Registry-Befehle

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

Willi die Rübe

Betreff: Registry-Befehle

BeitragSa, Mai 20, 2006 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 20, 2006 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 20, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
kann man auch irgendwie werte auslesen?
www.xairro.com

Willi die Rübe

BeitragSo, Mai 21, 2006 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Gesagt, Getan Very Happy Dadurch das Return mitten in der Funktion stand, wurde das DeleteFile am Ende gar nicht aufgerufen, dass hatte ich ganz vergessen. Sollte aber jetzt funktionieren, Thx für den Hinweis!

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

BeitragSo, Mai 21, 2006 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
und thy für die neuen funktionen! Very Happy
www.xairro.com

PowerProgrammer

BeitragSo, Mai 21, 2006 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
@junkprogger: Ja Very Happy

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 Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

PowerProgrammer

BeitragSo, Mai 21, 2006 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, jetzt kommt n Mini-Tut zum "Anmelden eigener Dateiendungen":

Arrow Unter HKEY_CLASSES_ROOT einen Key erstellen, mit der Dateiendung. Zum Beispiel: ".abc"

Arrow Den Default-Wert des Keys mit einem Alias belegen, Typ REG_SZ. Zum Beispiel: "abc-Datei"

Arrow Dann wieder unter HKEY_CLASSES_ROOT einen Key mit dem Alias als Namen erstellen. Zum Beispiel: "abc-Datei"

Arrow Den Standartwert dieses Keys kann man mit einer Dateibeschreibung belegen.

Arrow Im Alias-Key einen Key namens "DefaultIcon" erstellen. Den Standardwert in diesem Key mit dem Icon der Dateiendung versehen. Zum Beispiel: C:\Programme\ABC\abc.exe,0

Arrow Im Alias-Key einen weiteren Key namens "Shell" erstellen.

Arrow Im Shell-Key einen Key "open" anlegen und in "open" einen weiteren Key namens "Command". Den Standard-Wert des Command-Keys mit dem Programmpfad in folgender Form belegen:
"C:\Programme\ABC\abc.exe" "%1"
Es ist wichtig, das das %1 und die Anführungsstriche bleiben.

Arrow Fertig. Explorer neu starten.


Ich garantiere aber für nichts!

Edit: Probierts zuerst mit "regedit" aus!
 

Steve0

BeitragSo, Mai 21, 2006 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert bei mir einwandfrei.

PowerProgrammer

BeitragSo, Mai 21, 2006 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 21, 2006 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 22, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
PowerProgrammer hat Folgendes geschrieben:

...
Arrow Im Shell-Key einen Key "open" anlegen und in "open" einen weiteren Key namens "Command". Den Standard-Wert des Command-Keys mit dem Programmpfad in folgender Form belegen:
"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

BeitragMo, Mai 22, 2006 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Mai 27, 2006 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, bei mir (Win2000) geht das irgendwie nicht Crying or Very sad !
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

BeitragSa, Mai 27, 2006 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Sad

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

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group