none
Sobre REgistro RRS feed

  • Pregunta

  • El siguiente codigo compila perfectamente, pero al ejecutar me salta con un error: "The procedure entry point RegSetKeyValueA could not be located in the dynamic link library ADVAPI32.dll" <--- Ein?


    HKEY   hkey;
    DWORD  dwDisposition;
    int iValue = 0;
    CString str = "Hello world";


    RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\Imsomne"), 0, NULL, 0, 0, NULL, &hkey, &dwDisposition);
    RegSetKeyValue(hkey,"Hello",str,REG_DWORD,str ,sizeof(DWORD));



    -------------------------------------

    Por si acaso hay un "blonde moment" en el codigo, aquí estan los includes:

    #include "stdafx.h"
    #include "Service.h"
    #include "cService.h"
    #include "malloc.h"
    #include <iostream>
    #include "HardDiskManager.h"
    #include <fstream>
    #include "Socket.h"
    using namespace std;
    //  -----
    #include <stdio.h>
    #include <WinSock.h>
    //  -----
    #include <Windows.h>
    #include <Winbase.h>
    #include <lm.h>
    #include <assert.h>
    #pragma comment(lib, "Netapi32.lib")
    #pragma comment(lib, "wbemuuid.lib")
    #include <comdef.h>
    #include <Wbemidl.h>
    #include <math.h>
    #define _WIN32_DCOM
    // -----



    La idea es grabar una key en el registro para poder utilizar con mi programa. Los ejemplos que he visto, no me son aplicables y me resulta más facil de esta forma.

    Si alguno tiene algun codigo, o ejemplo en el que tire directamente desde un .reg al registro para crear las claves, tambien me puede valer.

    martes, 22 de septiembre de 2009 11:22

Respuestas

  • HKEY hKey;
    int iValue = 0;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Imsomne", 0, KEY_SET_VALUE, &hKey);
    RegSetValueEx(hKey, "KnowHd", 0, REG_DWORD, (CONST BYTE*)&iValue, sizeof(DWORD));

    RegCloseKey(hKey);

    Ya está. De esta forma ya me guarda el Registro. Al poner el KEY_SET_VALUE crea la clave si no existe.
    • Marcado como respuesta Doberdog miércoles, 23 de septiembre de 2009 9:38
    miércoles, 23 de septiembre de 2009 9:35
  • Aqui la respuesta a mi propia pregunta, en bien de la humanidad me la contestaré.
    Para guardar un CString en el registro, este codigo funciona genial:

    HKEY hKey;
    CString ipserver = "127.0.0.1";
    LPBYTE pByte = new BYTE[ipserver.GetLength()+1];
    memcpy(pByte,(VOID*)LPCSTR(ipserver),ipserver.GetLength());
    DWORD dwSizeIp = (_tcslen(ipserver))* sizeof(TCHAR);


    RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\DATOS", 0, KEY_SET_VALUE, &hKey);
    RegSetValueEx(hKey,"IpServer",0,REG_SZ, (LPBYTE) pByte,dwSizeIp);
    • Marcado como respuesta Doberdog viernes, 25 de septiembre de 2009 9:25
    viernes, 25 de septiembre de 2009 9:25

Todas las respuestas

  • Pues va a ser que la segunda opcion, por que las maquinas tienen xp, y parece que al menos durante un tiempo seguirán con él. Por lo que a mi pregunta me remito.

    Con RegSetValueEx se puede modificar el valor de una clave existente, pero a la hora de crear una nueva. Cual es la mejor opcion?. O algun parametro que desconozco de dicha funcion permite crear una clave nueva?
    martes, 22 de septiembre de 2009 12:16
  • No entiendo a lo que te refieres con lo de setear el target con un valor minimo.

    Y ¿ RegCreateKey[Ex] ? < ---- Que pasa? Esto crea; digamos, un "directorio" dentro del registro de windows.


    Pero lo que me interesa es una clave donde guardar cierta informacion, Ip servidor, claves a usar como variable, etc. Lo que en un archivo .reg viene siendo esto.


    [HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox\Extensions]
    "{20a82645-c095-46ed-80e3-08825760534b}"="C:\\Windows\\Microsoft.NET\\Framework64\\v3.5\\Windows Presentation Foundation\\DotNetAssistantExtension\\"



    martes, 22 de septiembre de 2009 17:12
  • HKEY hKey;
    int iValue = 0;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Imsomne", 0, KEY_SET_VALUE, &hKey);
    RegSetValueEx(hKey, "KnowHd", 0, REG_DWORD, (CONST BYTE*)&iValue, sizeof(DWORD));

    RegCloseKey(hKey);

    Ya está. De esta forma ya me guarda el Registro. Al poner el KEY_SET_VALUE crea la clave si no existe.
    • Marcado como respuesta Doberdog miércoles, 23 de septiembre de 2009 9:38
    miércoles, 23 de septiembre de 2009 9:35
  • Sigo con problemas. De la forma que he puesto puede guardar un DWORD. Pero tambien necesitaría guardar un REG_SZ, un String vamos. Pero a la hora de pasarselo me da un valor "`†4", cosa que como que no es lo que quiero. Si me pueden ayudar, lo agradecería.


    Esta es la sentencia que utilizo.

    CString ipserver = "127.0.0.1";
    RegSetValueEx(hKey, "IpServer", 0,REG_EXPAND_SZ,(CONST BYTE*)&ipserver,sizeof(CString));


    Guardaría la ip como DWORD, puesto que coge por tamaño, pero siendo una ip como 127.0.0.1. Le sería complicado entender y distinguir de 1.270.0.1, por ejemplo. Por eso me gustaría en REG_SZ, para puntearla.
    miércoles, 23 de septiembre de 2009 10:31
  • Aqui la respuesta a mi propia pregunta, en bien de la humanidad me la contestaré.
    Para guardar un CString en el registro, este codigo funciona genial:

    HKEY hKey;
    CString ipserver = "127.0.0.1";
    LPBYTE pByte = new BYTE[ipserver.GetLength()+1];
    memcpy(pByte,(VOID*)LPCSTR(ipserver),ipserver.GetLength());
    DWORD dwSizeIp = (_tcslen(ipserver))* sizeof(TCHAR);


    RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\DATOS", 0, KEY_SET_VALUE, &hKey);
    RegSetValueEx(hKey,"IpServer",0,REG_SZ, (LPBYTE) pByte,dwSizeIp);
    • Marcado como respuesta Doberdog viernes, 25 de septiembre de 2009 9:25
    viernes, 25 de septiembre de 2009 9:25