Russian Qt Forum
Ноябрь 23, 2024, 20:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Серийный номер диска  (Прочитано 4501 раз)
nixman05
Гость
« : Март 16, 2012, 20:23 »

Здравствуйте.
Каким образом можно получить серийный номер диска?

Находил информацию о GetVolumeInformation, но как ее использовать в qt приложении?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Март 16, 2012, 22:22 »

это обычная функция WinAPI - берешь и вызываешь. примеры использования должны легко гуглиться.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
nixman05
Гость
« Ответ #2 : Март 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)'
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Март 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;
 
« Последнее редактирование: Март 16, 2012, 22:49 от Alex Custov » Записан
nixman05
Гость
« Ответ #4 : Март 17, 2012, 17:21 »

Спасибо.
Возвращается числовой тип.

Каким образом из его получить серийный номер, состоящий из букв и цифр?
Записан
V1KT0P
Гость
« Ответ #5 : Март 17, 2012, 17:40 »

Спасибо.
Возвращается числовой тип.

Каким образом из его получить серийный номер, состоящий из букв и цифр?
Отобразить в шестнадцатеричном виде?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 23.