Avatar billede nameless Nybegynder
29. januar 2004 - 22:41 Der er 6 kommentarer og
1 løsning

Registry RegEnumValue

Hvordan bruger du RegEnumValue til at få alle de strings der ligger i HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run

Har fået koden til at virke(næsten) men kan ikke rigtigt få navnene til at passe.. Får godt nok antal filer der er i mappen men navnene der kommer ud er noget volapyk.

noget af den kode jeg har skrevet:

    if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0, 0, KEY_WRITE, 0, &hKey, 0) == ERROR_SUCCESS)
    {
    char Test[1024];
    LONG    lReturn;
    DWORD    dwType;
    TCHAR    szStr[200];
    DWORD dwValueNameLen = 200;

    lReturn = RegEnumValue(
            hKey                // handle to key to query
        ,    0                // index of value to query
        ,    szStr                // address of buffer for value string
        ,    &dwValueNameLen            // address for size of value buffer
        ,    NULL                // reserved
        ,    &dwType                // address of buffer for type code
        ,    NULL                // address of buffer for value data
        ,    NULL                // address for size of data buffer
    );
    cout << szStr << endl;

    }


    RegCloseKey(hKey);
Avatar billede arne_v Ekspert
29. januar 2004 - 22:49 #1
Det er ikke fordi at du får UNICODE tilbage men du skriver det ud som ISO-8859-1 ?
Avatar billede arne_v Ekspert
29. januar 2004 - 22:52 #2
Hm. Det er næppe problemet.

Det her eksempel virker på mine Win2000 systemer:

#include <windows.h>
#include <stdio.h>
#include <string.h>

void getinfo(char *key, char *info)
{
  HKEY hk;
  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_QUERY_VALUE, &hk) == ERROR_SUCCESS)
  {
    DWORD ix = 0;
    char name[1024];
    BYTE value[1024];
    DWORD namelen, type, valuelen;
    namelen = sizeof(name);
    valuelen = sizeof(value);
    while(RegEnumValue(hk, ix, name, &namelen, NULL, &type, value, &valuelen) == ERROR_SUCCESS)
    {
        strcat(info,name);
        strcat(info,"=");
        strcat(info,(char *)value);
        strcat(info,"\n");
        ix++;
        namelen = sizeof(name);
        valuelen = sizeof(value);
    }
  }
  RegCloseKey(hk);
}

int main(int argc, char **argv)
{
    char info[12345];
    strcpy(info,"");
    getinfo("SOFTWARE\\Microsoft\\Windows\\CurrentVersion", info);
    printf("%s\n", info);
    return 0;
}
Avatar billede nameless Nybegynder
29. januar 2004 - 22:53 #3
Hvordan kan jeg lave UNICODE om til ISO-8859-1 ?
prøvede denne men den virkede ikke:

ConvertTToC(CHAR* pszDest, const TCHAR* pszSrc)
{
    for(int i = 0; i < _tcslen(pszSrc); i++)
        pszDest[i] = (CHAR) pszSrc[i];
}
Avatar billede nameless Nybegynder
29. januar 2004 - 22:56 #4
Smid et svar :)
Avatar billede arne_v Ekspert
29. januar 2004 - 22:58 #5
ok

(jeg formoder at mit lille eksempel også virkede hos dig)
Avatar billede nameless Nybegynder
29. januar 2004 - 22:58 #6
Virkede Perfekt..
Avatar billede jakobdo Ekspert
30. januar 2004 - 11:32 #7
Bare lige for at være en flueknepper, men Arne mangler \\Run efter CurrentVersion! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester