Registry UserLib für PB 5.40

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

sharkpeter hat geschrieben:@Thomas,

doch ich gebe die als String zurück. Fein säuberlich Byteweise getrennt durch
ein Leerzeichen.
Und die Nullbytes :mrgreen:
sharkpeter hat geschrieben: Klar können die auch größer sein, nur muß ich eine Variable definieren in die
ich die einlesen will, damit ich deren Adresse übergeben kann. Und da habe
ich eben bei 1024 Fini geblasen.
Da werden Binäre Dateien (sogar Treiber) gespeichert. Diese solltest Du in
den Speicher laden und dann den Pointer zurückgeben. Die größe kann man sich
ja dank PB4 selber mit Memsize ermitteln.
sharkpeter hat geschrieben: Andererseits, warum soll man solchen Riesenkram in die Reg schreiben.
Ich glaube da gibt es dann doch andere Orte für.

Gruß Jens

Mein Registry ist über 70 MB groß, da steht ne menge unnötiges drinnen.
Ich kanns ja nicht verhindern, wenn einige Softewarehäuser der Meinung
sind, die Treiber für alle Brenner dort zu hinterlegen, damit sie diese beim
Brennerwechsel installieren können :mrgreen:

Nur als Beispiel, Du würdest Dich wundern, was dort alles gespeichert wird.
Da wäre es schön gut, wenn ich diese Einträge mithilfe von PB finden und
analysieren kann. 1024 Bytes, wo die NULLBytes fehlen, helfen garnicht. :mrgreen:

Ich hoffe, das Du jetzt den Sinn verstanden hast, und dieses Umsetzen kannst.

PS: Wenn Du möchtest, kann ich Deine UserLib auch Unicode-Fest machen,
da sie zur Zeit im ASCII-Modus initialisiert wird und unter Unicode natürlich
nur Müll zurückgibts (Wie fast alle Userlibs zur Zeit).

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@Thomas,

klar kannst du das nicht ändern, wenn dort solche Sachen reinkommen.
Allerdings haben die meiner Meinung nach dort eigentlich nichts verloren.

Mit Nullbytes meinst du leere oder welche mit Inhalt 00, das ist ja nun ein
Unterschied.

Andererseits: Ich habe noch nie Binarys verwendet. Sicher, man kann dort
wenn man mag auch direkt ausführbaren Code reinschreiben. Wobei man
sich auch hier wieder die Fragen stellen muß, gehörts dort hin oder nicht.

Mit ASCII hast du recht, das sollte ich auf jedenfall noch auf UniCode ändern.
Schlußendlich habe ich mir erst einmal wieder die Möglichkeit geschaffen,
mit meinen Projekten weiterzukommen, da es ja keine fix vorhandenen
Möglichkeiten in PB gibt. Alles weitere wird die Zeit schon bringen.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Binär stehen da auch Chr(0) drinnen, der in Strings das Ende bedeutet.
Fixstrings werden, wenn ich mich nicht Irre nur bis zur Verwendung Fix behalten, danach sind es normale String, so das alles hinter dem ersten Chr(0) verschwindet.
Hier ist wirklich nur ein Memory sinnvoll. Also feststellen, wie groß ist der Eintrag, Speicher allokieren und dann die Adresse als Ergebnis.
Für schreiben dann so ähnlich. In der Registry stehts wohl in einem speciellem Format, das Du konvertieren müßtest.

Aber nur wenn Du Lust hast, es zu vervollständigen :wink:

Für Unicode brauchste dann jede Procedure 2x, 1x mit _UNICODE angehangen, wo Du alle Unicode strings in ASCII wandelst, mit PeekS usw.
Und auch wenn Du ergebnisse zurückgibts, müssen diese dann vorher als Unicode gepoked werden. Schwer zu erklären, was da sonst noch alles zu beachten ist :freak:

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@Thomas,

oh je, mit dem Wert "00" das habe ich wohl übersehen :oops:

Also Handlungsbedarf. Am besten wird wohl dann sein, ich gebe entweder
die ASCII-Werte zurück oder den Inhalt wie er ist, ohne ihn zu wandeln.

Ach Mensch, an der Stelle habe ich es doch nur gut gemeint, wohl zu gut :freak:

Wo ich im Moment arg klemme, wie soll ich denn vorher feststellen, wie groß
der Eintrag ist.

Mit dem Vervollständigen, klar soll es doch sein.

Gruß Jens

//Edit 24.06.2006: lesen der Binary repariert
Zuletzt geändert von sharkpeter am 24.06.2006 19:11, insgesamt 1-mal geändert.
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Habe noch ein neues Update (V1.03/24.06.2006) gemacht.
Allerdings habe ich es nicht geschafft, die Schreibfunktion für die Registry
betreffend der Binarys noch zu korrigieren.
Die Lesefunktion sollte jetzt richtig funktionieren, wie beschrieben als
HEX-Rückgabe mit Leerstring zwischen den Bytes.

Hier ist ein Bild

Es sind einige neue Funktionen hinzu gekommen, diese funktionieren zum
Teil vorerst nur mit Win98 und ME.
Außerdem funktioniert jetzt der themenbezogene Aufruf der Hilfe bei F1
wenn man auf dem Namen steht. Hier noch einmal ein Dank an Freak für
die Beantwortung der entsprechenden Frage. Siehe hier:
http://www.purebasic.fr/german/viewtopi ... highlight=

Gruß Jens

//Edit 24.06.2006

PS: Download-Link ist der gleiche geblieben, auch auf PureArea.net.
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

Habe es noch geschafft, die Einschränkungen aufzuheben was die Pfad-
funktionen betrifft. Hoffe auch diese sind jetzt OK. Wenn nicht, bitte ich
um Mitteilung.

Allerdings: Ich habe jetzt erst mal 2 Wochen Urlaub=PC freie Zeit

Ach so, für die, die sich erst ansehen möchten was so enthalten ist:
Auf meiner HP ist ein Link wo sich die Hilfe einzeln laden läßt.

JHRegistry_400

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

so, hab mal schnell eine Binary-Auslese Procedure geschrieben, die mir die
Memoryadresse zurückgibt, und nicht irgendwelche Strings :mrgreen:

Ich hoffe das kannste irgendwann verwerten

Code: Alles auswählen

Procedure.l Reg_GetBinary(topKey, sKeyName.s, sValueName.s)
  Protected GetHandle.l, hKey.l, lpData.l, lpcbData.l
  If Left(sKeyName, 1) = "\"
    sKeyName = Right(sKeyName, Len(sKeyName) - 1)
  EndIf
  GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
  If GetHandle = #ERROR_SUCCESS
    If RegQueryValueEx_(hKey, sValueName, 0, "REG_BINARY", @lpData, @lpcbData) = #ERROR_MORE_DATA
      lpData = AllocateMemory(lpcbData)
      If lpData
        GetHandle = RegQueryValueEx_(hKey, sValueName, 0, "REG_BINARY", lpData, @lpcbData)
        If GetHandle = #ERROR_SUCCESS
          RegCloseKey_(hKey)
          ProcedureReturn  lpData
        EndIf
        FreeMemory(lpData)
      EndIf
    EndIf
    RegCloseKey_(hKey)
  EndIf
  ProcedureReturn #False
EndProcedure

Mem = Reg_GetBinary(#HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", "DigitalProductId")
If Mem
  For I = 52 To 64
    Debug PeekB(Mem + I) & $FF
  Next
EndIf
Debug "#########"
Debug MemorySize(MEM) ; sollte 164 sein, auf WinXP ;)
FreeMemory(Mem)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Hi Sharkpeter,

hab ich doch die ganze zeit diesen thread übersehen.. komisch...

habs mir noch nicht gezogen, vorab eine frage:
ist der source dabei?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Nein.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

So, die Urlaubsreise ist nun vorbei. Schön war es :D

@Alves,

du hast Recht, der Quellcode ist nicht dabei. Da könnte ich ja gleich die
Proceduren Online stellen.

@Kearu,

dann ziehe es doch mal, wäre schön noch ein paar Kritiken zu bekommen.
Zu Deiner Frage, siehe oben.

@Thomas

Habe mir deinen Code mal geladen. Letztlich mache ich es ja schon ähnlich,
das heißt ich lese zuerst die Länge und trage dann ein, im Augenblick nur
als "übersetzten" String, aber ich habe noch was vor mit einem Flag, wo
man sich den Inhalt dann auch so ansehen kann, wie es in der Reg der
Fall ist, siehe auch Bild im PureArea.net Showcase. Auch dazu soll dann
dort nur die Rückgabe der Adresse, so daß man dann direkt im Programm
den enthaltenen "Programm"-Code erhalten kann. Ich habe es nur vor
dem Urlaub nicht mehr zu mehr geschafft.

Was mir allerdings noch ein wenig Kopfzerbrechen bereitet, wie bekomme
ich dort sauber alles wieder hinein, ich meine Binary.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Antworten