Registry-Befehle
Übersicht

![]() |
Willi die RübeBetreff: Registry-Befehle |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe für ein paar kleine Experimente mir ein paar Funktionen für Registry Änderungen geschrieben: AddKey(Schlüssel$) Der Befehl AddKey erstellt einen Unterschlüssel. Beispiel: AddKey("HKCU\Software\TestKey") AddEntry(schlüssel$, name$, type$, wert$) Der Befehl AddEntry erstellt einen Eintrag. Der Parameter type$ gibt den Type an: -String : Zeichenkette -Num ; Ein numerischer Wert, auch Hexzahlen möglich -Bin ; Binärwert Alternativ kann man auch die Registrydatentypen verwenden wie z.B. REG_SZ oder REG_DWORD Beispiel: Addentry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "B3D", "String", "C:/Programme/Blitz3D/Blitz3d.exe") DeleteKey(key$) Der Befehl DeleteKey löscht einen Schlüssel. Beispiel: DeleteKey("HKCU\Software\TestKey") DeleteEntry(key$,entry$) Der Befehl DeleteEntry löscht einen Eintrag. Beispiel: DeleteEntry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "C:/Programme/Blitz3D/Blitz3d.exe") ChangeEntry(schlüssel$, name$, type$, wert$) Der Befehl ChangeEntry ändert einen Eintrag. Beispiel: ChangeEntry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "B3D", "String", "C:/Programme/Blitz2D/Blitz2d.exe") GetEntry$(path$, entry$) Der Befehl GetEntry ermittelt den Wert eines Eintrags in der Registry. Wenn ein numerischer Wert zurückgeliefert wird, so ist es immer eine HexZahl! Beispiel: test$= GetEntry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Reliability", "TimeStampInterval") Print test$ WaitKey() GetEntryType$(path$, entry$) Der Befehl GetEntryType ermittelt den Type eines Eintrags in der Registry. Es wird ein Registrydatentyp wie z.B. REG_DWORD oder REG_SZ zuückgeliefert. Beispiel: test$= GetEntryType("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Reliability", "TimeStampInterval") Print test$ WaitKey() *Anmerkung: Allgemeine Registrykentnisse werden dringend empfohlen! http://www.wintotal.de/Artikel...gistry.php Code: [AUSKLAPPEN] ;----------------------------------------------- Function AddKey(key$) key$=Replace$(key$,"/", "\") If Instr(key$, "\", len(key$)-1)<>0 Then key$=Left(key$, Len(Key$)-1) ExecFile("CMD"+Chr(10)+"REG ADD "+chr(34)+key$+Chr(34)+" /f") End Function ;--------------------------------------------- Function AddEntry(path$, name$, typ$, Dat$) typ$=Lower(typ$) If Instr(typ$, "REG_")=0 Then Select typ$ Case "string" typ$="REG_SZ" Case "num" typ$="REG_DWORD" dat$="0x"+hex$(dat) Case "binary" typ$="REG_BINARY" Case "bin" typ$="REG_BINARY" End select Else typ$=Upper(typ$) EndIf path$=Replace$(path$,"/", "\") If Instr(path$, "\", len(path$)-1)<>0 Then path$=Left(path$, Len(path$)-1) ExecFile("REG ADD "+chr(34)+path$+chr(34)+" /v "+chr(34)+name$+chr(34)+" /t "+typ$+" /d "+chr(34)+chr(34)+dat$+chr(34)+chr(34) +" /f") End Function ;--------------------------------------- Function DeleteKey(key$) key$=Replace$(key$,"/", "\") If Instr(key$, "\", len(key$)-1)<>0 Then key$=Left(key$, Len(Key$)-1) ExecFile("REG Delete "+chr(34)+key$ +chr(34)+" /f") End Function ;------------------------------------------- Function DeleteEntry(path$, entry$) path$=Replace$(path$,"/", "\") If Instr(path$, "\", len(path$)-1)<>0 Then path$=Left(path$, Len(path$)-1) ExecFile("REG Delete "+chr(34)+path$ +chr(34)+" /v "+chr(34)+entry$+chr(34)+" /f") End Function ;---------------------------------------- Function ChangeEntry(path$, name$, typ$, Dat$) AddEntry(path$, name$, typ$, Dat$) End Function ;----------------------------------------- Function GetEntry$(path$, entry$) Local tmp1$,tmp2%,tmp3%,tmp4%,tmp5$ file2=WriteFile("tmp.bat") WriteLine file2, "REG QUERY "+chr(34)+path$+chr(34)+" /v "+chr(34)+entry$+chr(34)+">tmp2" CloseFile file2 ExecFile("tmp.bat") Delay 200 file=ReadFile("tmp2") While Eof(file)=0 tmp1$=ReadLine$(file) tmp2%=Instr(tmp1$, entry$) If tmp2%>0 tmp3=Instr(tmp1$,"REG_",tmp2%) If tmp3>0 tmp4%=Instr(tmp1$, Chr$(9),tmp3%) If tmp4%>0 Then tmp5$=Mid(tmp1$,tmp4%+1) tmp6$=GetEntryType(path$,entry$) If tmp6$="REG_DWORD" And Instr(tmp5$, "0x")>0 Then tmp5$=Right(tmp5$, Len(tmp5$)-2) : tmp5$= "$"+tmp5$ ;If t CloseFile file DeleteFile("tmp.bat") DeleteFile("tmp2") Return tmp5$ EndIf EndIf EndIf Wend End Function ;---------------------------------------- Function GetEntryType$(path$, entry$) Local tmp1$,tmp2%,tmp3%,tmp4%,tmp5$ file2=WriteFile("tmp.bat") WriteLine file2, "REG QUERY "+chr(34)+path$+chr(34)+" /v "+chr(34)+entry$+chr(34)+">tmp2" CloseFile file2 ExecFile("tmp.bat") Delay 200 file=ReadFile("tmp2") While Eof(file)=0 tmp1$=ReadLine$(file) tmp2%=Instr(tmp1$, entry$) If tmp2%>0 tmp3=Instr(tmp1$,"REG_",tmp2%) If tmp3>0 tmp4%=Instr(tmp1$, Chr$(9),tmp3%) If tmp4%>0 Then tmp5$=Mid(tmp1$,tmp3%, tmp4%-tmp3) CloseFile file DeleteFile("tmp3.bat") DeleteFile("tmp4") Return tmp5$ EndIf EndIf EndIf Wend End Function ;--------------------------------------- |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
- Zuletzt bearbeitet von Willi die Rübe am Mi, Dez 20, 2006 21:46, insgesamt 7-mal bearbeitet
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einfach cool, die Lösung ohne nervige Userlibs und so... Ich wusste gar nichts, was da in meinem System-Verzeichnis schlummert...
Sowas suche ich schon länger! Thx! |
||
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann man auch irgendwie werte auslesen? | ||
www.xairro.com |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich habe extra 2 neue Funktionen für BLITZchecker heute nacht noch geschrieben: GetEntry und GetEntryType. Ich habs oben hinzueditiert und hab auch zusätzlich noch nen kleinen Leerzeichen-Bug behoben.
Greetz |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Very well done!
Du solltest das aber noch so machen, dass die Temporären Dateien am Ende der Funktion gelöscht werden. Edit: Wie ich grade gesehen habe, sollte das auch geschehen. Bei mir klappte das aber nicht. |
||
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gesagt, Getan ![]() Greetz |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
und thy für die neuen funktionen! ![]() |
||
www.xairro.com |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie stehts mit Funktionen zum Auflisten von allen Keys in einem Key und von allen Werten in so nem Teil? Also "EnumKeys", oder so. | ||
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
soll das heissen, ich könnte mir damit ne installations programm schreiben das mein prog spgar regestriert o0 | ||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
@junkprogger: Ja ![]() oder n anderes Beispiel: wenn du n super-cooles programm zum bearbeiten von bildern geschrieben hast (<- toller gedanke!!), dann kannst du es so in die registry schreiben, dass alle .bmp/.jpg/.png/etc. mit deinem programm geöffnet werden, wenn man auf die dateien doppelklick macht ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jo, jetzt kommt n Mini-Tut zum "Anmelden eigener Dateiendungen":
![]() ![]() ![]() ![]() ![]() ![]() ![]() "C:\Programme\ABC\abc.exe" "%1" Es ist wichtig, das das %1 und die Anführungsstriche bleiben. ![]() Ich garantiere aber für nichts! Edit: Probierts zuerst mit "regedit" aus! |
||
Steve0 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also erstmal find ichs genial, das das so einfach geht. Danke dafür <Willi die Rübe>
Bei mir funktioniert das mit dem Anmelden einer Dateiendung einwandfrei. Dafür auch danke PowerProgrammer. So als nächstes hab ich ein Problem. Wenn ich versuche 2 Schlüssel auf einmal zu erstellen. Code: [AUSKLAPPEN] addkey("HKCR\.abc\test1")
addkey("HKCR\.abc\test2") stürzt das Programm ab. Aber die beiden Schlüssel werden noch geschrieben. Wenn ich ein kleines Delay 25 reinmache dann gehts. In der Exe funktioniert es auch ohne das Delay ohne Probleme. Es stürzt also bloss ab wenn ichs in BlitzPlus lade. |
||
Pixelgenaue 2D SingleSurface Engine!!! |
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktioniert bei mir einwandfrei. | ||
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es wird ja immer die reg.exe ausgeführt. Das Programm wartet nicht, bis dieses beendet hat. Also entstehen 2 registry-Zugriffe gleichzeitig. Da wundert es mich nicht, das da was passiert, ohne Delays. Jedenfalls, wenn ich mir das mal klar durch den Kopf gehen lasse...
Edit: @ Artemis: Dann ist dein PC vielleich ein Tick langsamer. |
||
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
PowerProgrammer hat Folgendes geschrieben: Und wie stehts mit Funktionen zum Auflisten von allen Keys in einem Key und von allen Werten in so nem Teil? Also "EnumKeys", oder so.
Wie genau meinst du das? Eine Funktion die einfach alles auflistet? @SteveO: Bei mir funktioniert es auch ohne Probleme. Ich denke es liegt bei dir dadran, dass Execfile eine gewisse "Ausführzeit" braucht. Probier es mal mit dieser Funktion: Code: [AUSKLAPPEN] Function AddKey(key$) key$=Replace$(key$,"/", "\") If Instr(key$, "\", len(key$)-1)<>0 Then key$=Left(key$, Len(Key$)-1) ExecFile("CMD"+Chr(10)+"REG ADD "+chr(34)+key$+Chr(34)+" /f") End Function Hier wird eine eigene Cmd-Instanz geöffnet. [/code] |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich meinte einfach eine Auflistfunktion, die man vielleicht mit mit den ReadDir/NextFile-Funktionen von BlitzBasic vergleichen kann, nur das nicht Ordner/Dateien aufgelistet werden, sondern alle Keys in dem angegebenen Startkey. Und das gleiche auch nocheinmal für Werte...
Hab ich mich wieder so ... ähhmm ... blöd ausgedrückt? Hoffe, das ist jetzt verständlich... |
||
![]() |
BlitzChecker |
![]() Antworten mit Zitat ![]() |
---|---|---|
PowerProgrammer hat Folgendes geschrieben: ... ![]() "C:\Programme\ABC\abc.exe" "%1" ... Ergänzung: man kann anstat "open" auch "edit" nehmen, dann wird die datei meit deinem Programm geöffnet, wenn man auf die Datei Rechte Maustaste -> Bearbeiten klickt. Man kann auch anstatt "open" beliebie andere Werte nehmen, z.B. "Öffnen in ABC-Programm". Dann Öffnet man die Datei so mit dem Programm: Rechte Maustaste -> Öffnen in ABC-Programm. |
||
www.xairro.com |
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht nur das. Man kann noch einen beliebig namigen Key dort einsetzen! Der Name des Keys steht dann da, wo bei deinem Beispiel dann "Öffnen" steht. Und "print" wird zu "Drucken"... | ||
$tankY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, bei mir (Win2000) geht das irgendwie nicht ![]() Ich hab das Beispiel genommen: Addentry("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "B3D", "String", "C:/Programme/Blitz3D/Blitz3d.exe") Aber als ich in die Registry geschaut hab, war der Eintrag nicht vorhanden. Woran kann das liegen? Edit: Hab ne umständlichere Version via Batch, aber mit Blitzbasic wäre mit lieber (hab b+, falls das hilft) |
||
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe gerade ein bisschen nachgeforscht und bin auf folgendes gestoßen:
PCWelt.de hat Folgendes geschrieben: Standardmäßig installiert wird das Tool bei Windows XP. Wer Windows 2000 einsetzt, kann es von der Setup-CD nachrüsten. Öffnen Sie dazu den Ordner \Support\ Tools, doppelklicken Sie auf das Archiv SUPPORT.CAB, und kopieren Sie die Datei Reg.EXE in den Ordner %windir%\ System32.
Oder hier: http://www.dynawell.com/reskit...00/reg.zip Desweiteren hab ich gerade erfahren, dass das unter Win 98/ME/95... nicht funktioniert. ![]() Ich suche momentan noch eine Alternative (die ich eigentlich acuh schon gefunden habe, allerdings mommentan keine Zeit habe. Greets |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group