Вывод значения параметра DWORD...

Тема в разделе "WASM.BEGINNERS", создана пользователем sxd, 5 авг 2007.

  1. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Пытаюсь вывести значения параметра реестра типа DWORD...
    В реестре это выглядит так 0х00000001 (1) или 0х00000000 (0)...
    Но когда выводит буффер на экране либо пусто либо хрень какая-то...
    Код (Text):
    1. char c[256];
    2. RegQueryValueEx(hkey,name,NULL,&dwType,(byte *)&c, &dwSize);
    3. printf("key value:%s\n", c);
    Скажите как правильно вывести и проанализировать значение такого параметра?
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    ртфм
    %s - это строка
    %d - дворд
    %h - hex дворд
     
  3. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    C %h - hex дворд - выводит пустую строку (key value: и всё), со значением в реестре как с 0х00000001 (1) так и с 0х00000000 (0), а %d - дворд - выводит значение 1244552, со значением в реестре как с 0х00000001 (1) так и с 0х00000000 (0)

    То есть как бы не прослеживается особое изменение =)
    Так как же быть?
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    %x/%X - это HEX.
    прогляди в отладчике, всё ли верно.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.558
    Адрес:
    Russia
    В общем ты должен проверять тип значения REG_DWORD и тп
    И в зависимости от типа делать принтф
    например есть значение 2 а реестре

    Код (Text):
    1. char c[255] = "1234";
    2. DWORD BufferSize = 255;
    3. HKEY hKey ;
    4. LONG lRet;
    5.  
    6. lRet = RegQueryValueEx(hKey, TEXT("test"),  NULL,NULL,(LPBYTE)&c,&BufferSize);
    7. if( lRet != ERROR_SUCCESS)
    8.     return FALSE;
    9.  
    10. printf("key value %d\n",c[0]);
    Выдаст цифру 2.
    Это говорит о том что копируется не строка а явно значение параметра.
     
  6. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    sxd
    Может имеет смысл заполнить значение параметра lpType
     
  7. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Вот код он прост до безобразия!!!

    Код (Text):
    1. BOOL CheckDataRegistry()
    2. {
    3.     HKEY hkey;
    4.     const char path[]="SYSTEM\\CurrentControlSet\\Control\\PnP\0";
    5.     const char name[]="DisableFirmwareMapper\0";
    6.     DWORD dwSize=sizeof(DWORD);
    7.     DWORD dwType=REG_DWORD;
    8.     long result;
    9.     char c[256];
    10.  
    11.     result = RegOpenKeyEx (HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS|KEY_READ|KEY_WRITE, &hkey);
    12.     if (result! = ERROR_SUCCESS)
    13.     {
    14.         printf ("failed to open key \n");
    15.         return -1;
    16.     }
    17.  
    18.     result = RegQueryValueEx (hkey, name, NULL, &dwType, (byte *)&c, &dwSize);
    19.     if (result != ERROR_SUCCESS)
    20.     {
    21.         printf ("failed to query key value \n");
    22.         return -1;
    23.     }
    24.  
    25.     printf ("key value: %d\n", c); //КОСЯК!!!
    26.  
    27.     result = RegCloseKey (hkey);
    28.     if (result != ERROR_SUCCESS)
    29.     {
    30.         printf ("failed to close key \n");
    31.         return -1;
    32.     }
    33.    
    34.  
    35.     return 0;
    36. }
     
  8. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    []

    достаточно ссылки на описание функции

    Mental_Mirror я заполнил...
     
  9. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.558
    Адрес:
    Russia
    sxd
    Чувствуешь разницу?
    Код (Text):
    1. printf("key value %d\n",c[0]);
    2. и
    3. printf ("key value: %d\n", c); //КОСЯК!!!
     
  10. sxd

    sxd Виталий

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    56
    Адрес:
    Москва
    Да спасибо TermoSINteZ... Я вчера тоже допёр, что нужно только c[0]...
    Хм смешно, такая мелочь... Спасибо всем!
     
  11. fufel

    fufel New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2011
    Сообщения:
    1
    TermoSINteZ
    А у меня когда значение переваливает на второй байт начинает ерунду выдовать...
    как правельние сделать?