Hola que tal tengo una duda la verdad, quisiera saber por que no puedo crear un valor dword dentro de varias carpetas la verdad no se que estoy haciendo mal y si alguien me hecha una mano seria genial
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
include advapi32.inc
includelib user32.lib
includelib kernel32.lib
includelib advapi32.lib
.data
SubKey db "Software\Microsoft\Windows Live\Messenger",0
Nombre db "Multiple Instances",0
Mensaje db "Carpeta No Encontrada",0
Titulo db "Error",0
.data?
hKey dd ?
Buffer dd ?
.code
Main:
invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE, addr SubKey,0,KEY_ALL_ACCESS,addr hKey
.if al==NULL
invoke MessageBox,NULL,addr Mensaje,addr Titulo,MB_OK + MB_ICONINFORMATION
.else
invoke RegSetValueEx,addr hKey,addr Nombre,0,REG_DWORD,addr Buffer, 1
invoke RegCloseKey,addr hKey
.endif
invoke ExitProcess,0
End Main
y como la imagen vale mas que mil palabras
esto es lo que quiero hacer
(http://i41.tinypic.com/voptl2.jpg)
y porsupesto darle un valor
(http://i39.tinypic.com/2lc7h1i.jpg)
A RegSetValueEx y RegCloseKey les tenes que pasar el HANDLE y no un puntero al mismo. El ultimo parametro de RegSetValueEx es "The size of the information pointed to by the lpData parameter, in bytes." y le estas pasando 1, pasale el tamaño de un DWORD (4 bytes). El anterior es el buffer, donde tenes que poner el DWORD que queres escribir ... no tiene que ser un valor indefinido.
Otra cosa, RegOpenKeyEx:
Return Value
If the function succeeds, the return value is ERROR_SUCCESS.
ERROR_SUCCESS es 0 asi que estas haciendo la comparacion mal.
PD. Son claves del registro no carpetas.