Russian Qt Forum

Qt => Общие вопросы => Тема начата: nixman05 от Март 16, 2012, 20:23



Название: Серийный номер диска
Отправлено: nixman05 от Март 16, 2012, 20:23
Здравствуйте.
Каким образом можно получить серийный номер диска?

Находил информацию о GetVolumeInformation, но как ее использовать в qt приложении?


Название: Re: Серийный номер диска
Отправлено: kambala от Март 16, 2012, 22:22
это обычная функция WinAPI - берешь и вызываешь. примеры использования должны легко гуглиться.


Название: Re: Серийный номер диска
Отправлено: nixman05 от Март 16, 2012, 22:31
Неработает. Следующий код
Код
C++ (Qt)
   char *lcDrive = "C:\"";
   WCHAR  lpVolumeNameBuffer  ;
  int  nVolumeNameSize  ;
   char*  lpVolumeSerialNumber     ;
   char*  lpMaximumComponentLength ;
   char*  lpFileSystemFlags  ;
   char*  lpFileSystemNameBuffer  ;
  int  nFileSystemNameSize ;
 
   GetVolumeInformation(lcDrive,lpVolumeNameBuffer,nVolumeNameSize,lpVolumeSerialNumber,
                        lpMaximumComponentLength,lpFileSystemFlags,lpFileSystemNameBuffer,
                        nFileSystemNameSize);
std::cout<<lpVolumeSerialNumber<<std::endl;
 
Выдает ошибку
 cannot convert 'char*' to 'const WCHAR*' for argument '1' to 'BOOL GetVolumeInformationW(const WCHAR*, WCHAR*, DWORD, DWORD*, DWORD*, DWORD*, WCHAR*, DWORD)'


Название: Re: Серийный номер диска
Отправлено: Alex Custov от Март 16, 2012, 22:41
У тебя не совпадает часть параметров по типу, см. http://msdn.microsoft.com/en-us/library/windows/desktop/aa364993%28v=vs.85%29.aspx . Строки в win32 api - это TCHAR *, которые в зависимости от поддержки UNICODE превращаются в char * или WCHAR * (он же wchar_t *) http://www.prog.org.ru/index.php?topic=21224.msg145897#msg145897

Должно быть что-то такое

Код
C++ (Qt)
   TCHAR lcDrive[] =
       #ifdef UNICODE
           L"C:\\";
       #else
           "C:\\";
       #endif
 
   TCHAR lpVolumeNameBuffer[MAX_PATH];
   DWORD lpVolumeSerialNumber;
   DWORD lpMaximumComponentLength;
   DWORD lpFileSystemFlags;
   TCHAR lpFileSystemNameBuffer[MAX_PATH];
 
   BOOL ok = GetVolumeInformation(lcDrive, lpVolumeNameBuffer, sizeof(lpVolumeNameBuffer), &lpVolumeSerialNumber,
                        &lpMaximumComponentLength, &lpFileSystemFlags, lpFileSystemNameBuffer,
                        sizeof(lpFileSystemNameBuffer));
 
   qDebug() << ok;
 


Название: Re: Серийный номер диска
Отправлено: nixman05 от Март 17, 2012, 17:21
Спасибо.
Возвращается числовой тип.

Каким образом из его получить серийный номер, состоящий из букв и цифр?


Название: Re: Серийный номер диска
Отправлено: V1KT0P от Март 17, 2012, 17:40
Спасибо.
Возвращается числовой тип.

Каким образом из его получить серийный номер, состоящий из букв и цифр?
Отобразить в шестнадцатеричном виде?