как программно узнать ProductID и InstallDate

Тема в разделе "WASM.X64", создана пользователем BOB4uK, 16 май 2010.

  1. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    Привет всем!
    не могу найти где в Windows 7 64bit в реестре расположены ProductID и InstallDate?!

    как программно узнать ProductID и InstallDate в Windows 7 64bit
     
  2. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    HKLM\SOFTWARE\Microsoft\Windows NT\CyrrentVersion

    values:

    InstallDate
    ProductId
     
  3. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    >>CyrrentVersion

    CurrentVersion =\
     
  4. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    В этом то и дело что нет там этих данных!
     
  5. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Win7 x64
    [​IMG]
     
  6. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    Странно! Я на нескольких ноутбуках смотрел эту ветку полей этих нет!
     
  7. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Если смотреть 32-битным софтом, то InstallDate = 0, а значения ProductId нет вообще. Редирект
     
  8. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    я через regedit смотрел...
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    На самом деле 32х битным софтом можно посмотреть 64х битный ключ минуя редирект, если открыть его с флагом KEY_WOW64_64KEY.
     
  10. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Так их 2. Один 32 бита, а другой 64. Первый расположен в SysWOW64, а второй в system32. Вот если смотреть первым, то значений нет. Причем в директорию SysWOW64 с ее regedit-ом можно попасть через какой-то 32-битный файловый менеджер например. Проще говоря, вы уверены, что ваш regedit 64-битный? Если да, то хотелось бы уточнить Edition, сборку вашей ОС.

    надо было уточнить про regedit
     
  11. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    я не уверен на счет битности regedit, но запускаю из командной строки...

    тогда может подскажите как программно (программа 32битная) можно это прочитать, например на C++ Builder?
     
  12. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    "битность" можно посмотреть в диспетчере задач.

    Код (Text):
    1. BOOLEAN GetValueFromKey(HKEY hKey,
    2.                        LPCSTR lpSubKey,
    3.                        LPCSTR lpValue,
    4.                        PVOID pBuffer,
    5.                        ULONG uSize)
    6. {
    7.    HKEY hTargetKey;
    8.    LONG lRet;
    9.    ULONG uSz = uSize;
    10.    
    11.    lRet = RegOpenKeyEx(hKey,
    12.                  lpSubKey,
    13.                  0,
    14.                  KEY_READ|KEY_WOW64_64KEY,
    15.                  &hTargetKey);
    16.                  
    17.     if(lRet!=ERROR_SUCCESS) return FALSE;
    18.    
    19.     lRet = RegQueryValueEx(hTargetKey,
    20.                     lpValue,
    21.                     0,
    22.                     0,
    23.                     (LPBYTE)pBuffer,
    24.                     &uSz);
    25.                    
    26.     if(lRet!=ERROR_SUCCESS)
    27.     {
    28.       RegCloseKey(hTargetKey);
    29.       return FALSE;
    30.     }
    31.    
    32.     RegCloseKey(hTargetKey);
    33.     return TRUE;
    34.  
    35. }
    вызов

    Код (Text):
    1. ULONG uInstallDate;
    2.     CHAR cProductId[200] = {0};
    3.    
    4.     if(GetValueFromKey(HKEY_LOCAL_MACHINE,
    5.                     "Software\\Microsoft\\Windows NT\\CurrentVersion",
    6.                     "InstallDate",
    7.                     &uInstallDate,
    8.                     sizeof(uInstallDate)))
    9.                     {
    10.                       printf("InstallDate = %X\n",uInstallDate);
    11.                     }
    12.     if(GetValueFromKey(HKEY_LOCAL_MACHINE,
    13.                     "Software\\Microsoft\\Windows NT\\CurrentVersion",
    14.                     "ProductId",
    15.                     &cProductId,
    16.                     sizeof(cProductId)))
    17.                     {
    18.                       printf("ProductId = %s\n",cProductId);
    19.                     }
    Я не юзаю C++ Builder.
     
  13. BOB4uK

    BOB4uK New Member

    Публикаций:
    0
    Регистрация:
    12 авг 2009
    Сообщения:
    10
    У меня эти поля были! Буду ждать, когда еще раз попадется ноут с предустановленной виндой...

    Сриншот не нашел, но поставил на виртуалку Win 7 64bit, стандартный код для чтения этих полей из реестра не срабатывает, пока не отключишь Контроль Учетных Записей...
    lhc645 Респект! Код который ты дал работает на 100% без отключения Контроля Учетных Записей!

    Всем Спасибо за помощь!