Seite 1 von 1

Registry lesen & schreiben

Verfasst: Dienstag 2. Juli 2013, 21:55
von wb77
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.

Re: Registry lesen & schreiben

Verfasst: Dienstag 2. Juli 2013, 22:40
von IKT
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 ... ;-)

Re: Registry lesen & schreiben

Verfasst: Donnerstag 4. Juli 2013, 06:28
von wb77
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

Re: Registry lesen & schreiben

Verfasst: Donnerstag 4. Juli 2013, 21:56
von IKT
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.

Re: Registry lesen & schreiben

Verfasst: Montag 15. Juli 2013, 20:22
von wb77
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.

Re: Registry lesen & schreiben

Verfasst: Donnerstag 25. Juli 2013, 10:49
von IKT
@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:

Re: Registry lesen & schreiben

Verfasst: Donnerstag 25. Juli 2013, 19:35
von IKT
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!