| |
|
|
Jac de Lad | Hallöle, Yo voluntad una Valor en el Registry löschen. En me funzt el folgende pero no. Gibts como nen Fehler??? KompilierenMarcaSeparacióndef @RegOpenKeyEx(5) !"ADVAPI32","RegOpenKeyExA"
def @RegDeleteValue(2) !"ADVAPI32","RegDeleteValueA"
def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
declare Handle#
dim handle#,4
declare Key#
dim Key#,100
string Key#,0="SoftwareMicrosoftWindowsCurrentVersionRun" Pfad des Zielschlüssels
declare name#
dim Name#,100
string Name#,0="Fraps" Name des zu löschenden Wertes
print @RegOpenKeyEx($80000001,Key#,0,1,Handle#) $80000001=HK_Current_User
print @RegDeleteValue(@Long(Handle#,0),Name#)
print @RegCloseKey(@Long(Handle#,0))
dispose Handle#
dispose Key#
dispose Name#
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.12.2005 ▲ | |
|
|
|
|
| Usted öffnest el Schlüssel con KEY_QUERRY_VALUE Zugriff (lesen), willst aber escribir. Es no! |
|
|
| |
|
|
|
Jac de Lad | Hm, ok, y cómo mache ego correcto???
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.12.2005 ▲ |
|
|
|
|
Jac de Lad | Ahh! Yo habs ya gefunden.
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.12.2005 ▲ |
|
|
|
|
| Kurze Erklärung, entonces kommst du demnächst tal vez incluso zurecht Lo va en Parámetro 4 de RegOpenKeyEx:
Bajo NT/2000/XP son viele Objetos (Handles) con uno Zugriffskontrolle versehen. Man muß beim Öfffnen des Handles esta una Hexadezimale Zahl angegen (Flag), el angiebt, cómo hacerlo Handle abierto möchte (escribir, lesen, Vollzugriff...). Es hier el Parámetro 4 de RegOpenKeyEx. Das OS überprüft entonces zuerst, si el aufrufende User überhaupt el Recht dazu ha, el Handle en el angeforderten Art y Weise a abierto. Welche Rechte el jeweilige User geanau el Handle besitzt, es en el Security-Descriptor el el jeweiligen Objeto zugeordnet es. Sombrero él el angeforderten Rechte no, schlägt el Öffnen des Handles fehl.
Wird später una Función con el Handle (Speicherbereich) ausgeführt (hier RegDeleteValue), schlägt esta Función entonces fehl, si el Handle no en entsprechender Weise geöffnet wurde.
Arten de Zugriffsflags: Microsoft teilt esta Flags, el bestimmen, como una Handle a abierto es, en drei Arten ein=>
1.) Spezifische Rechte Jedes Objeto ha diferente Características y kann deshalb en unterschiedlicher Art y Weise geöffnet voluntad. Spezifische Rechte para Registryschlüssel son: $1=KEY_QUERY_VALUE=Wert lesen $2=KEY_SET_VALUE=Wert escribir $4=KEY_CREATE_SUB_KEY=Unterschlüssel redactar $8=KEY_ENUMERATE_SUB_KEYS=Unterschlüssel auflisten $10=KEY_NOTIFY=Über Los cambios benachrichtigen $20=KEY_CREATE_LINK=Symbolischen Link redactar
2.) Generic Rechte Como lo Zig Arten de zugriffsbeschränkten Handles son, wäre kaum una Programmierer en el Lage, se el alles a merken y überhaupt Programas para desarrollar. Lo son deshalb todavía el Generic Flags, el para cada Handle igual y quasi una Umsetzung el spezifischen Rechte y Standardrechte son: $10000000=GENERIC_ALL=Vollzugriff $80000000=GENERIC_READ=Kompletter Lesezugriff $40000000=GENERIC_WRITE=Kompletter Schreibzugriff $20000000=GENERIC_EXECUTE=Ausführen
3.)Standardrechte Natürlich hay auch Flags, el para todos Handles igual son: $40000=WRITE_DAC=Im Security-Descriptor Zugriffsrechte ändern $80000=WRITE_OWNER=Eigentümer uno Objektes ändern (el Eigentümer ha siempre erweiterte Zugriffsrechte). $20000=READ_CONTROL=Auslesen el bestehenden Zugriffsrechte de una Security-Descriptor $10000=_DELETE=Löschen $100000=SYNCHRONIZE=Warten, a una Handle bereit es
Ist alles en el Principio bastante simplemente - y cómo du de deinem Problema wohl gelernt hast, es auch muy muy wichtig el a wissen, si uno en neueren Betriebssystemen Programas escribir voluntad (bajo 95/98/ME kannst Si es usted el getrost alles vergessen)...
Hier el geänderte Code: KompilierenMarcaSeparaciónDef @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regdeletevalue(2) !"ADVAPI32","RegDeleteValueA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Declare Handle#
Dim Handle#,4
Declare Key#
Dim Key#,100
String Key#,0="SoftwareMicrosoftWindowsCurrentVersionRun" Pfad des Zielschlüssels
Declare Name#
Dim Name#,100
String Name#,0="Fraps" Name des zu löschenden Wertes
Print @Regopenkeyex($80000001,Key#,0,$2,Handle#)$80000001=HK_Current_User
Print @Regdeletevalue(@Long(Handle#,0),Name#)
Print @Regclosekey(@Long(Handle#,0))
Dispose Handle#
Dispose Key#
Dispose Name#
| 10.12.2005 ▲ | |
|
|
|
|
| Yo gerade gelesen, daß du XProfan besitzt. Ab Profano² 7 kannst du en APIs en lugar de el Bereiche auch Adressen de Variables angeben (sólo, si irgendwo una String zurückgeliefert se, solltest Si es usted el unterlassen): KompilierenMarcaSeparaciónDef @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regdeletevalue(2) !"ADVAPI32","RegDeleteValueA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Declare Handle&,Key$,Name$
LET Key$="SoftwareMicrosoftWindowsCurrentVersionRun" Pfad des Zielschlüssels
LET Name$="Fraps" Name des zu löschenden Wertes
Print @Regopenkeyex($80000001,@ADDR(Key$),0,$2,@ADDR(HANDLE&))$80000001=HK_Current_User
Print @Regdeletevalue(Handle&,@ADDR(Name$))
Print @Regclosekey(HANDLE&)
Wa /a>
|
|
|
| |
|
|
|
| Ach sí, todavía qué a el Thema... El Eigenart una Handle siempre con Vollzugriff (hier KEY_ALL_ACCESS=$1F003F) a abierto, debería uno möglichst ser dejar. Arbeitet una User no como Admin, nimmt una Windows solche faxen oft muy übel... |
|
|
| |
|
|
|
Jac de Lad | Aha.
Hm, como dijo, Yo hatte el problema ya incluso gefunden. Aber entonces igual a meiner nächsten Cuestión: Yo bin sicher no einzige con el Problema, Registry-Werte a lesen, el eventuell no disponible son, entonces gibts nen bösen Fehler. Den puede ser sí folgendermaßen umgehen: KompilierenMarcaSeparación Das ging a ahora bastante prima. Nun Yo aber seit heute XProfan 9. Como va el en el Interpreter auch todavía problemlos, aber con el Runtime kommen en una vez zwei böse Fehler. Kann al con APis realisieren? Mit RegKeyOpenEx y así...
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.12.2005 ▲ |
|
|
|
|
Jac de Lad | @AH:
So, hier ha se ya otra vez einiges geändert:
Relacionado con la Einkürzen es klar. Yo machs aber trotzdem siempre zuerst con Bereichen y kürze lo entonces una, wenns funktioniert. Trotzdem danke. Jetzt Yo aber festgestellt, dass el problema a Conjunto(Errorlevel... liegt. Aber si du me sagen könntest, como el con APIs funktioniert, sería se el problema sí erübrigen. Relacionado con la Vollzugriff y así voluntad Yo a Herzen nehmen!
Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.12.2005 ▲ |
|
|
|
|
| So: KompilierenMarcaSeparaciónBeispiel zu api_RegQueryValueExA,ADVAPI32
Declare Handle#,Fehler&,Key#,Name#,Wert#,Size#,Type#
Def @Regopenkeyex(5) !"ADVAPI32","RegOpenKeyExA"
Def @Regqueryvalueex(6) !"ADVAPI32","RegQueryValueExA"
Def @Regclosekey(1) !"ADVAPI32","RegCloseKey"
Windowstyle 31
Windowtitle "Aus Registry Startmenüname auslesen"
Window 0,0-640,440
Dim Key#,260
Dim Handle#,4
Dim Name#,250
Dim Size#,4
Dim Wert#,260
Dim Type#,4
String Key#,0="SoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell Folders"
Let Fehler&=@Regopenkeyex($80000001,Key#,0,$F003f,Handle#)
Print "Fehlercode beim Öffenen des Schlüssels User Shell Folders: ";Fehler&
If Fehler&=0
String Name#,0="Start Menu"
Long Size#,0=260
Let Fehler&=@Regqueryvalueex(@Long(Handle#,0),Name#,0,Type#,Wert#,Size#)
Print "Fehlercode beim Auslesen des Schlüssels: ";Fehler&
Print ""
Print "Das Startmenü des aktuellen Users steht hier: "
Print @String$(Wert#,0)
Print "Typ des Schlüssels: ";@Long(Type#,0)
Print "Länge des Wertes: ";@Long(Size#,0);" Bytes"
Print ""
Print "Fehlercode RegCloseKey: ";@Regclosekey(@Long(Handle#,0))
Endif
If Fehler&<>0
String Key#,0="SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders"
Let Fehler&=@Regopenkeyex($80000001,Key#,0,$1,Handle#)
Print "Fehlercode beim Öffenen des Schlüssels Shell Folders: ";Fehler&
String Name#,0="Start Menu"
Long Size#,0=260
Let Fehler&=@Regqueryvalueex(@Long(Handle#,0),Name#,0,Type#,Wert#,Size#)
Print "Fehlercode beim Auslesen des Schlüssels: ";Fehler&
Print ""
Print "Das Startmenü des aktuellen Users steht hier: "
Print @String$(Wert#,0)
Print "Typ des Schlüssels: ";@Long(Type#,0)
Print "Länge des Wertes: ";@Long(Size#,0);" Bytes"
Print ""
Print "Fehlercode RegCloseKey: ";@Regclosekey(@Long(Handle#,0))
Endif
If Fehler&<>0
Print "Fehler!!!!!! Startmenü konnte nicht ausgelesen werden!!!"
Endif
Dispose Type#
Dispose Wert#
Dispose Key#
Dispose Handle#
Dispose Name#
Dispose Size#
While 0=0
Waitinput
ass=s4 href='./../../function-references/XProfan/wend/'>Wend
1.) Mit RegOpenKeyEx el Schlüssel con el Flag $1 para lesen abierto. Hier en no Fall el Schlüssel con $F003F=Vollzugriff pero wirklich sólo $1=KEY_QUERY_VALUE abierto! Läuft dein Programa en un User Account y no con Adminrechten, es sonst el Auslesen de Schlüsseln bajo HKEY_LOCAL_MACHINE no posible!!!
2 Mit RegQueryValueEx Valor auslesen (egal welche Art - String, Struktur oder Doubleword...). Parámetro 4 Empfängt una Flag, el angibt welche Art de Valor ausgelesen wurde (String, Doubleword...). |
|
|
| |
|
|
|
| Ach sí...
Einige Registryschlüssel kannst du incluso como Administrator no sin weiteres auslesen. Dazu gehören bajo anderem por ejemplo el Schlüssel HKEY_LOCAL_MACHINESAMSAMDOMAINS y besonders de me geliebte Schlüssel HKEY_LOCAL_MACHINESecurityPolicyAccounts. |
|
|
| |
|
|
|
Jac de Lad | Ah, Yo wusste, dass I el zählen kann. Solche speziellen Schlüssel voluntad Yo sicher no brauchen. Trotzdem danke para deine Mühe,
schönen Sonntag todavía, Jac |
|
|
| Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.12.2005 ▲ |
|
|
|