как использовать diskid32 (номер HDD) в оконном приложении?
От: _EOA СССР  
Дата: 23.12.10 12:27
Оценка:
Здравствуйте.

Подскажите, как можно использовать diskid32 в оконном приложении написанном на MFC
http://www.winsim.com/diskid32/diskid32.html
Перерыл весь инет и не нашел ответа

Надо получать серийный номер HDD для привязки ПО к машине.
В консольном виде все работает без проблем при разном статусе пользователя (админ, гость)

Может быть у кто-то уже есть переделанная diskid32.cpp для работы с оконными приложениями.

Если нет, может как-то можно поступить по другому, например зашить консольное diskid32.exe в резурсы и заставить его создавать файл в который будет записан ссерийник HDD, а потом читать этот файл из оконного приложения. Но не очень хотелось бы так мудрить

Заранее спасибо за ответ.
diskid32
Re: как использовать diskid32 (номер HDD) в оконном приложен
От: ChromY  
Дата: 23.12.10 15:00
Оценка:
Я посмотрел на этот cpp.
Вам стоит разобраться, что там происходит, если Вы программист.
Если лень, то сделайте так:
Создайте файл s_fp = fopen("DiskId.txt", "w");
Замените везде printf на fprintf(s_fp,
Вызовите getHardDriveComputerID ()
Закройте файл.
Откройте файл для чтения, прочитайте в память и найдите нужную Вам инфо
с помощью доступных Вам методов поиска подстроки в строке.
Или чтобы не закрывать/открывать, создавайте файл с w+.
Удалите DiskId.txt.
Re[2]: как использовать diskid32 (номер HDD) в оконном прило
От: _EOA СССР  
Дата: 23.12.10 15:24
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Я посмотрел на этот cpp.

CY>Вам стоит разобраться, что там происходит, если Вы программист.
CY>Если лень, то сделайте так:
CY>Создайте файл s_fp = fopen("DiskId.txt", "w");
CY>Замените везде printf на fprintf(s_fp,
CY>Вызовите getHardDriveComputerID ()
CY>Закройте файл.
CY>Откройте файл для чтения, прочитайте в память и найдите нужную Вам инфо
CY>с помощью доступных Вам методов поиска подстроки в строке.
CY>Или чтобы не закрывать/открывать, создавайте файл с w+.
CY>Удалите DiskId.txt.

Спасибо Вам большое за ответ.
Видимо так и придется делать.
К сожалению разобраться в исходном коде у меня не получилось.
Раньше никогда консольные приложения не писал.

Скажите пжл. т.е.:
1. я подключаю этот файл в свой проект.
2. произвожу указанную Вами замену, для того чтобы информация писалась в файл.

3. в определенном месте своей программы я вызываю функцию getHardDriveComputerID
только как к ней обратиться из другого места программы, если она не объявлена глобально, т.е. я не имею к ней доступа.
Подскажите.

4. дальше просто читаю файл нахожу необходимое и удаляю файл.
Re[3]: как использовать diskid32 (номер HDD) в оконном прило
От: ChromY  
Дата: 23.12.10 15:44
Оценка:
_EO>3. в определенном месте своей программы я вызываю функцию getHardDriveComputerID
_EO>только как к ней обратиться из другого места программы, если она не объявлена глобально, т.е. я не имею к ней доступа.
_EO>Подскажите.

Если функция не имеет описателя static, она глобальная.
В том файле, где Вы её будете вызывать,
напишите её прототип:
long getHardDriveComputerID(void); — так кажется, сами проверьте.
перед первым вызовом, лучше сверху.
Re[4]: как использовать diskid32 (номер HDD) в оконном прило
От: _EOA СССР  
Дата: 24.12.10 06:35
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>Если функция не имеет описателя static, она глобальная.

CY>В том файле, где Вы её будете вызывать,
CY>напишите её прототип:
CY>long getHardDriveComputerID(void); — так кажется, сами проверьте.
CY>перед первым вызовом, лучше сверху.

ChromY, спасибо Вам большое.
Вы единственый человек, кто вступил в дисскусию, хотя вопрос я задавал на 3х разных форумах.

Вы знаете, тыкал, мыкал — все равно ничего у меня не вышло.
Если Вам не трудно гляньте "одним глазом" проект по этой сслылке, там уже все подготовленно и собрано, только осталось по нажатию кнопки запустить эту функцию getHardDriveComputerID();
http://rghost.ru/3734294

П.С. Нашел в сети вот такой dll
GetDiskSerial.dll
http://www.devlib.net/getdiskserial.htm
Все супер, только одна маленькая проблема, этот файл платный. Лекарства к нему нет.
Скажите, может есть подобные бесплатные аналоги. Мне надо привязать программу к железу, и единственное место (много читал форумов) это s/n HDD.

Спасибо Вам за ответ.
Re[5]: как использовать diskid32 (номер HDD) в оконном прило
От: ChromY  
Дата: 24.12.10 08:44
Оценка:
Здравствуйте, _EOA, Вы писали:

Файл MyHDDInfoDlg.cpp
//Пожалуйста покажите как вызвать ф-ю getHardDriveComputerID по этой кнопке
long getHardDriveComputerID();
void OpenInfoFile(LPCTSTR fName);
void CloseInfoFile();
long GetFileLength();
void CMyHDDInfoDlg::OnBnClickedGethddinfo()
{
// TODO: добавьте свой код обработчика уведомлений
OpenInfoFile( _T("DiskInfo.txt") );
getHardDriveComputerID();
long length = GetFileLength();
CloseInfoFile();
TCHAR *pMsg = new TCHAR [length+1];
pMsg[length] = _T('\0');
FILE *fp = fopen( _T("DiskInfo.txt") ,"r");
fread(pMsg,1,length,fp );
AfxMessageBox(pMsg);
delete pMsg;
fclose(fp);
remove("DiskInfo.txt");
}


Файл diskid32.cpp

Все printf( [ printf ( итп] должны быть заменены на fprintf(s_fp,

char HardDriveSerialNumber [1024];
char HardDriveModelNumber [1024];
int PRINT_DEBUG = false;

// Добавления:
static FILE *s_fp;
void OpenInfoFile(LPCTSTR fName)
{
s_fp = fopen(fName,"w");
}
void CloseInfoFile()
{
fclose(s_fp);
}
long GetFileLength()
{
return ftell(s_fp);
}

C++ — preprocessor — preprocessor definition:
WIN32;_WINDOWS;_DEBUG;PRINTING_TO_CONSOLE_ALLOWED;

Про dll не знаю ничего.
Re[5]: как использовать diskid32 (номер HDD) в оконном прило
От: ChromY  
Дата: 24.12.10 08:54
Оценка:
И ещё:
все это корректно только для mbcs.
Re[6]: как использовать diskid32 (номер HDD) в оконном прило
От: _EOA СССР  
Дата: 24.12.10 12:31
Оценка:
Здравствуйте, ChromY, Вы писали:

CY>И ещё:

CY>все это корректно только для mbcs.


Спасибо Вам большое, вроде заработало. Буду разбираться дальше, но всетаки сначала попытаюсь повозиться с кодом и перевести для возможности использования в оконном приложении. Если получиться — обязательно выложу код.
Re[7]: как использовать diskid32 (номер HDD) в оконном прило
От: _EOA СССР  
Дата: 26.12.10 12:13
Оценка:
ChromY

Еще раз спасибо вам большое, Ваша помощь мне очень помогла. Все оказалось очень просто надо было просто добавить свою функцию в файл diskid32.cpp например CString GetHHHSerial(int drivenum); и скопировать дуда тело функции getHardDriveComputerID(); немного изменить код для того чтобы читался только указанный по номеру хард и вызвать из любого места программы GetHHHSerial();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.