Registry Wert REG_EZ auslesen - Rückgabewert leer

Wohl das A & O in der Windows-Programmierung

Moderatoren: crack, Krüsty, Marwin

Registry Wert REG_EZ auslesen - Rückgabewert leer

Beitragvon _D4rk_ » Donnerstag 2. August 2007, 16:18

Hi zu allen,
wie mein Titel schon sagt, möchte ich einen REG_EZ wert aus der Registry auslesen und den Rückgabewert dann in eine test.txt Speichern. Aus einem mir unempfindlichen Grund funktioniert dies nicht. Die .txt-Datei bleibt leer.
Nach 2 Tagen intensiver suche nach dem Fehler vom mehrfachen, ach was sag ich zichfachen lesen der Referenzen bis hin zur Durchsuchung des Internets mithilfe von Google, habe ich den Fehler nicht finden können.
Als Anfänger auf dem Gebiet Win32API und als verwöhnter Interrup Nutzer Poste ich die hier zu lesenden Zeilen in der Hoffnung auf Hilfe.

Kurz:
Ich möchte den Wert eines REG_EZ Keys auslesen und in eine .txt Schreiben lassen. Die .txt wird angelegt, bleibt aber leider leer.

Hier mein Source:

Code: Alles auswählen
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib

.data
root HKEY HKEY_LOCAL_MACHINE
subkey db "SOFTWARE\Valve\Steam",0
schluessel db "InstallPath",0
filename db "C:\test.txt",0

.data?
zurueck DWORD ?
hKey HKEY ?

written dd ?
hFile dd ?

.code
   start:
   
   invoke RegOpenKeyEx, addr root, addr subkey, 0, KEY_READ, addr hKey
   invoke RegQueryValueEx, addr hKey, addr schluessel, 0, REG_SZ, addr zurueck, sizeof zurueck-1
   
   
   ;********** CreateFile Funktions Parameter Übergeben begin **********
   invoke CreateFile,addr filename,\
      GENERIC_WRITE or GENERIC_READ,\
      FILE_SHARE_READ or FILE_SHARE_WRITE,\
      NULL,\
      OPEN_ALWAYS,\
      FILE_ATTRIBUTE_NORMAL,\
      NULL
   mov hFile,eax
   ;**********  CreateFile Funktions Parameter Übergeben end  **********

   
   ;********** In die Datei schreiben begin **********
   invoke WriteFile, hFile, addr zurueck, sizeof zurueck-1, addr written, 0
   ;**********  In die Datei schreiben end  **********
   
   invoke CloseHandle, hFile
   invoke RegCloseKey, zurueck
   Exit:
   invoke ExitProcess, 0
end start



danke im voraus
MfG _D4rk_

//EDIT: Falls das von Bedeutung ist ich möchte den Wert von "HKEY_LOCAL_MACHINE\SOFTWARE\Valve\Steam\InstallPath" auslesen.
_D4rk_
Newbie
 
Beiträge: 1
Registriert: Donnerstag 2. August 2007, 15:52

Beitragvon Paulchen » Dienstag 7. August 2007, 15:31

Hallo _D4rk_,
würde mich freuen wenn mein kleines Testprogramm Dir weiterhelfen würde.

name regtest
title wert aus registry auslesen und über eine messagebox ausgeben

.386
.model flat,stdcall ;32 Bit Speichermodel
option casemap:none ;Groß/-Kleinschreibung beachten


include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\advapi32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\advapi32.lib


.data
subkey db "Control Panel\Desktop",0
schluessel db "Wallpaper",0
bufferLg dd 260 ;nach dem Auslesen L' Inhalt buffer

MsgTxt db "Kein Hintergrundbild geladen",0
MsgTitle db "Hintergrundbild",0

.data?
buffer db 260 dup(?)
hKey dd ? ;Handle
typ dd ? ;nach dem Auslesen Typ, z.B.REG_SZ


.code
start:
invoke RegOpenKeyEx,HKEY_CURRENT_USER, addr subkey, 0, KEY_QUERY_VALUE, addr hKey
invoke RegQueryValueEx, hKey, addr schluessel, NULL,addr typ, addr buffer, addr bufferLg

cmp bufferLg,1 ;Hintergrundbild im Schlüssel?
jg a10 ;ja

;*** Kein Hintergrundbild

invoke MessageBox,0,addr MsgTxt,addr MsgTitle,MB_OK
jmp a20

;*** Pfad der Hintergrunddatei

a10:
invoke MessageBox,0,addr buffer,addr MsgTitle,MB_OK

a20:
invoke RegCloseKey, hKey
invoke ExitProcess, 0

end start

mit freundlichen Grüßen
Paulchen
Paulchen
Member
 
Beiträge: 11
Registriert: Samstag 6. Mai 2006, 13:02
Wohnort: 16727 Oberkrämer/Schwante

Beitragvon crack » Freitag 10. August 2007, 00:38

Hallo Paulchen,

Sich StringVariablen in einer Messagebox anzeigen zu lassen ist IMHO der Königsweg bei der Fehlersuche, so kann man erstens feststellen was für den Fehler ursächlich ist, und zweitens eingrenzen in welchem Programmabschnitt der Fehler zu tragen kommt, Klasse 8)
mit freundlichen grüssen,
with best regards,

crack
Benutzeravatar
crack
Administrator
 
Beiträge: 280
Registriert: Dienstag 21. Dezember 2004, 15:02
Wohnort: 53783 Eitorf


Zurück zu Windows-API

 


  • { RELATED_TOPICS }
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron