Registry lesen & schreiben

Antworten
wb77
Beiträge: 13
Registriert: Sonntag 9. Juni 2013, 01:04

Registry lesen & schreiben

Beitrag von wb77 » Dienstag 2. Juli 2013, 21:55

Habe einen Plotter der die Parameter in der Registry gespeichert hat.
Nun möchte ich Werte aus der Registry auslesen und auch neuen Schlüssel schreiben.
Hab schon versucht eine dll zu schreiben bin aber bis jetzt immer gescheitert.
Berechnungen in einer dll Funktionieren Fehler frei nur bei String gibts immer Fehler.
Das einzige was mit Stringverarbeitung Funktioniert hat ist den Pfad auslesen und ausgeben.

IKT
Beiträge: 543
Registriert: Mittwoch 4. November 2009, 18:32

Re: Registry lesen & schreiben

Beitrag von IKT » Dienstag 2. Juli 2013, 22:40

Hallo WB77,

Erstens: DLL-Fragen bitte in Unterforum 'Allgemeines'-'DLL-Programmierung'.
Zweitens:
wb77 hat geschrieben:Habe einen Plotter der die Parameter in der Registry gespeichert hat.[edit]verstehe nur Bahnhof?? So erklären, dass es alle verstehen.[/edit]
Nun möchte ich Werte aus der Registry auslesen und auch neuen Schlüssel schreiben.
Hab schon versucht eine dll zu schreiben, [edit]Programmiersprache??[/edit] bin aber bis jetzt immer gescheitert [edit]bisherigen code posten[/edit].
Berechnungen in einer dll funktionieren fehlerfrei, nur bei Strings gibt es immer Fehler.
Das Einzige was mit Stringverarbeitung funktioniert hat ist: den Pfad auslesen und ausgeben.
deutsches Sprach, sweres Sprach ... ;-)
++++++
Gruss/regards IKT

wb77
Beiträge: 13
Registriert: Sonntag 9. Juni 2013, 01:04

Re: Registry lesen & schreiben

Beitrag von wb77 » Donnerstag 4. Juli 2013, 06:28

Die DLL programmiere ich in C++ & in Freebasic beides als Anfänger.
Bei Freebasic gibts Problemme bei der Stringverarbeitung generell.
Bei C++ mache ich wahrscheinlich habe bei den Pointern einen Fehler.
Ein Beispiel wäre nicht schlecht das würde mir schon weiterhelfen. ( Ausgang $OUT = Festen String zugewiesen + Eingang $IN )

Zur Registry:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\plotter\STUDIO\SYSTEMPARAMETER]
"UseFontSelectedInEdit"=dword:00000000
"ZoomFontVectorial"=dword:0000000a
"LastPageSystemParameter"=dword:00000002
"LastFile"="H:\\Aufträge\\xxx\\Beschriftung\\yyy\\ve.pdb"
"DefTypePrint"=dword:00000000

[HKEY_CURRENT_USER\Software\plotter\STUDIO\SYSTEMPARAMETER\GridAspect]
"0"=dword:00000249
"1"=dword:00000294
"2"=dword:000007cb

vielleicht hat auch jemand schon ein solches Problem schon gelöst.
Einen Schlüssel auslesen und auch scheiben.
Schreiben habe ich bis jetzt immer per Batch ausgeführt, aber lesen z.B. "ZoomFontVectorial"=dword:0000000a ist der Wert 4 dann LED an oder "LastFile"="H:\\Aufträge\\xxx\\Beschriftung\\yyy\\ve.pdb" > "A" dann OK < "A" dann Fehler......

vielleicht hat ja jemand schon eine DLL dafür oder eine andere Lösung per Batch, Kommandozeile, Tool oder Ähnliches

IKT
Beiträge: 543
Registriert: Mittwoch 4. November 2009, 18:32

Re: Registry lesen & schreiben

Beitrag von IKT » Donnerstag 4. Juli 2013, 21:56

wb77 hat geschrieben:Die DLL programmiere ich in C++ & in Freebasic beides als Anfänger.
Bei Freebasic gibts Problemme bei der Stringverarbeitung generell.
FreeBASIC als Anfänger = gute Wahl
C++ = keine so gute Wahl (aus zwei Gründen: - schwer leserlicher code - nur bedingt kompatibel mit FreeBASIC), wenn schon, dann C da dieses sehr gut mit FreeBASIC zusammenarbeitet (kompatibel ist).

Haste schon die neuste [edit]Ver.0.90.1[/edit] heruntergeladen?
Als IDE ist FBEdit (für Win) sehr zu empfehlen (richtige Entwicklungsumgebung). Beispiele für viele wiederkehrende Aufgaben etc. .
(FBIde wird seit längerem nicht mehr updated, ist sehr rudimentär, eigentlich eher ein besserer Editor.)

FreeBASIC Beispiel für PLE-DLL gibts hier im Forum: Auch die Stringverarbeitung funktioniert. BTW: es gibt generell 'KEINE' Probleme mit Strings in FB.
Zuletzt geändert von IKT am Donnerstag 25. Juli 2013, 11:17, insgesamt 1-mal geändert.
++++++
Gruss/regards IKT

wb77
Beiträge: 13
Registriert: Sonntag 9. Juni 2013, 01:04

Re: Registry lesen & schreiben

Beitrag von wb77 » Montag 15. Juli 2013, 20:22

Ich hab´s geschafft nachdem ich gelesen habe das PStrings für IN & OUT Speichert.
z.B.: PInput[1] >> PStrings[2] POutput[2]
Inhalt: (abc) >> (abc) (abc)

Nun habe ich zwei dll´s für Registry lesen & schreiben mit Freebasic geschrieben.
Das einzige was nicht Funktioniert ist das ich z.B.: HKEY_CURRENT_USER auch in PL auswählen kann.
Liegt aber auch zum teil daran das der Basic-Teil der Registry nicht von mir ist vielleicht hat dazu ja noch jemand einen Tipp.
Dateianhänge
PL_Registry.zip
(15.54 KiB) 180-mal heruntergeladen

IKT
Beiträge: 543
Registriert: Mittwoch 4. November 2009, 18:32

Re: Registry lesen & schreiben

Beitrag von IKT » Donnerstag 25. Juli 2013, 10:49

@wb77,

das Ganze ist IMHO* viel zu 'gross' für einen Anfänger, da es in höchstem Masse gefährlich ist, in der Registry 'herumzutoben'. Kann das ganze System unwiederbringlich zerstören!

Ich sage dies, da ich langjährige Erfahrung mit 'Windows' Systemen habe (als Domain- / Netzwerk- / Sicherheits-Administrator).
wb77 hat geschrieben:Ich hab´s geschafft nachdem ich gelesen habe das PStrings für IN & OUT Speichert.
z.B.: PInput[1] >> PStrings[2] POutput[2]
Inhalt: (abc) >> (abc) (abc)

Nun habe ich zwei dll´s für Registry lesen & schreiben mit Freebasic geschrieben.
Das einzige was nicht Funktioniert ist das ich z.B.: HKEY_CURRENT_USER auch in PL auswählen kann.
Liegt aber auch zum teil daran das der Basic-Teil der Registry nicht von mir ist vielleicht hat dazu ja noch jemand einen Tipp.
Siehe Code unten (Erklärungen in engl.):

Code: Alles auswählen

' :::::::::: DLL-START ::::::::::::: '

#INCLUDE "windows.bi"
#INCLUDE "vbcompat.bi"                      ' can be kicked out after converting everything to FB style code
#inclib  "advapi32" 

' ----- Microsoft Reference 'accessing registry' on the INET "http://support.microsoft.com/kb/145679" ----- '
'Public Const REG_SZ As Long = 1            ' in FB: instead of 'long' use 'Integer', both are I32 = 4Byte Int
'Public Const REG_DWORD As Long = 4
'
'Public Const HKEY_CLASSES_ROOT = &H80000000 '<-- defined in advapi32.dll
Public Const HKCR = HKEY_CLASSES_ROOT       '<-- our shortcut definition, use that afterwards (in code)
'Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKCU = HKEY_CURRENT_USER
'Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKLM = HKEY_LOCAL_MACHINE
'Public Const HKEY_USERS = &H80000003
Public Const HKU  = HKEY_USERS

' ===== Local Functions/Subs ===== '
Dim Shared As ZString * 1024 RegVal = ""    ' not shure that this is big enough, in reference it says up to 2048 Byte???
'Dim Shared As HKEY root     ' since I can't find a declaration for HKEY this seems to be useless
Dim Shared As ANY root      ' undefined type variable

Function myRegGetStr(root As HKEY, sub_ As ZString ptr, name_ As ZString ptr, out_ As ZString ptr) as string 
  Dim As HKEY hKey_         ' probably has to be replaced by one of the above defined keys (e.g. HKCU, HKLM etc.)
  Dim As Integer rc, KeyValType, KeyData        ' long is C-language/VB for I32 = Integer in FreeBASIC
  'RegVal="" --> not needed any longer because it is already initialised to ""
    If RegOpenKeyEx(root, sub_, 0, KEY_READ, @hKey_) = ERROR_SUCCESS Then 
        Dim l As DWORD = 512 
        Dim t As DWORD 
        If RegQueryValueEx(hKey_, name_, NULL, @t, out_, @l) <> ERROR_SUCCESS Then Return "" 
      If t = REG_SZ Then  
         out_[512 - 1] = 0 
      end if
Dies ist nur ein Auszug ...
* = IMHO = in my humble opinion = meiner unmassgeblichen Meinung nach ... :mrgreen:
++++++
Gruss/regards IKT

IKT
Beiträge: 543
Registriert: Mittwoch 4. November 2009, 18:32

Re: Registry lesen & schreiben

Beitrag von IKT » Donnerstag 25. Juli 2013, 19:35

Hallo an alle,

weitere Infos und die entsprechenden Links unten:

Code: Alles auswählen

Registry:
---------
REG_SZ = either ZString or WString in FB (ZS = ANSI, WS = UniCode) depends on the Function used.
REG_DWORD = Integer (32-bit number - signed)
REG_QWORD = LongInt (64-bit number - signed)

Weitere Info:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773476%28v=vs.85%29.aspx

Desktop Applications:
---------------------
HKEY  = A handle to a Registry key. In WinDef.h as:
        typedef HANDLE HKEY; (see below)
HANDLE = typedef PVOID HANDLE; (undefined(void) ptr type) = Any Ptr in FB
DWORD = UInteger (32-bit number - unsigned)
QWORD = ULongInt (64-bit number - unsigned)

Weitere Info:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx

ATTENTION:
==========
Please note the differences between Desktop Application / Registry types!
++++++
Gruss/regards IKT

Antworten

Zurück zu „DLL-Programmierung“