On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
Администратор




Пост N: 341
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.10.06 15:08. Заголовок: Серийный номер


Как средствами winapi считать Mac-адрес сетевушки, серийный номер диска или еще что-нибудь подобное понятно для каких целей

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 35 , стр: 1 2 All [только новые]


модератор




Пост N: 316
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 18.10.06 15:41. Заголовок: Предупреждение: НЕ испытано в полевых условиях



MAC адрес можно определить так (должно работать под Винды и Unix):

#include "hbapi.h"
#include <stdio.h>

#if defined(HB_OS_UNIX)

#include <unistd.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/if.h>

#elif defined(HB_OS_WIN_32)

#include <windows.h>
#include <wincon.h>
#include <time.h>

#endif

#define LEN_MACA_STR 12

long mac_addr_sys ( u_char *cResult );

HB_FUNC( GETMACADDR )
{
long iResult ;
u_char cResult[LEN_MACA_STR+1];

iResult = mac_addr_sys( cResult );

if ( iResult == 0 ) {
hb_retclen( cResult, LEN_MACA_STR );
}
else {
hb_retc( "" );
}
}

#if defined(HB_OS_WIN_32)

typedef struct _ASTAT_
{

ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];

} ASTAT, * PASTAT;

ASTAT Adapter;

#endif

long mac_addr_sys ( u_char *cResult )
{

#if defined(HB_OS_UNIX)

struct ifreq ifr ;
struct ifreq *IFR;
struct ifconf ifc;
char buf[1024];
int s, i;
int iFound = 0;

s = socket(AF_INET, SOCK_DGRAM, 0);

if (s==-1) {
return -1;
}

ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
ioctl(s, SIOCGIFCONF, &ifc);

IFR = ifc.ifc_req;

for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++) {

strcpy(ifr.ifr_name, IFR->ifr_name);
if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) {
if (! (ifr.ifr_flags & IFF_LOOPBACK)) {
if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) {
iFound = 1;
break;
}
}
}
}

close(s);

if (iFound) {
for (i=0;i<6;++i) {
sprintf( cResult+(i*2), "%2.2x", ifr.ifr_hwaddr.sa_data );
}
}
else {
return -1;
}
return 0;

}

#elif defined(HB_OS_WIN_32)

NCB Ncb;
UCHAR cRetCode;
char NetName[50];
LANA_ENUM lenum;
int i;

memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)&lenum;
Ncb.ncb_length = sizeof(lenum);
cRetCode = Netbios( &Ncb );

if ( lenum.length < 1 ) {
return -1;
}

memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[0];

cRetCode = Netbios( &Ncb );

memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[0];

strcpy( Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);

cRetCode = Netbios( &Ncb );

if ( cRetCode == 0 ) {
for (i=0;i<6;++i) {
sprintf( cResult+(i*2), "%02x", Adapter.adapt.adapter_address );
}
return 0;
}

return -1;

}

#else

return -1;
}

#endif


С серийным номером диска еще проще:

*--------------------------------------
Function GetVolumeSerialNumber(cPath)
*--------------------------------------
Private nSerialNumber,cFatName:=space(30),nFlag
GetVolumeInformation(cPath,NIL,nSerialNumber,NIL,56,nFlag,cFATName )
Return abs(nSerialNumber)


#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( GETVOLUMEINFORMATION )
{
char *VolumeNameBuffer = (char *) hb_xgrab( MAX_PATH ) ;
DWORD VolumeSerialNumber ;
DWORD MaximumComponentLength ;
DWORD FileSystemFlags ;
char *FileSystemNameBuffer = (char *) hb_xgrab( MAX_PATH ) ;
BOOL bRet;

bRet = GetVolumeInformation( ISNIL(1) ? NULL : (LPCTSTR) hb_parc(1) ,
(LPTSTR) VolumeNameBuffer ,
MAX_PATH ,
&VolumeSerialNumber ,
&MaximumComponentLength ,
&FileSystemFlags ,
(LPTSTR)FileSystemNameBuffer ,
MAX_PATH ) ;
if ( bRet )
{
if ( ISBYREF( 2 ) ) hb_storc ((char *) VolumeNameBuffer, 2 ) ;
if ( ISBYREF( 3 ) ) hb_stornl( (LONG) VolumeSerialNumber, 3 ) ;
if ( ISBYREF( 4 ) ) hb_stornl( (LONG) MaximumComponentLength, 4 ) ;
if ( ISBYREF( 5 ) ) hb_stornl( (LONG) FileSystemFlags, 5 );
if ( ISBYREF( 6 ) ) hb_storc ((char *) FileSystemNameBuffer, 6 );
}

hb_retl(bRet);
hb_xfree( VolumeNameBuffer );
hb_xfree( FileSystemNameBuffer );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 399
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.10.06 16:15. Заголовок: Re:


Так до кучи.
Немного похожая тема вот тут терлась
http://fivetechsoft.com/forums/viewtopic.php?t=4412


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 342
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.10.06 17:14. Заголовок: Re:


Спасибо, то что надо

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1341
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.06.10 17:14. Заголовок: gfilatov пишет: С с..


gfilatov пишет:

 цитата:
С серийным номером диска еще проще:
*--------------------------------------
Function GetVolumeSerialNumber(cPath)
*--------------------------------------
Private nSerialNumber,cFatName:=space(30),nFlag
GetVolumeInformation(cPath,NIL,nSerialNumber,NIL,56,nFlag,cFATName )
Return abs(nSerialNumber)
........
И Т.Д.



Не работает что-то ?
Compiling...
Z:\xHarbour\bin\harbour hdd-serial.prg -n -q0 -gc -iZ:\xHarbour\include -p -w
hdd-serial.prg(14) Warning W0001 Ambiguous reference: 'CFATNAME'
hdd-serial.prg(15) Warning W0001 Ambiguous reference: 'NSERIALNUMBER'
hdd-serial.prg(15) Warning W0001 Ambiguous reference: 'NFLAG'
hdd-serial.prg(15) Warning W0001 Ambiguous reference: 'CFATNAME'
hdd-serial.prg(16) Warning W0001 Ambiguous reference: 'NSERIALNUMBER'
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hdd-serial.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

W:\FOND9\UTIL\HDD>hdd-serial.exe

Error BASE/1089 Argument error: ABS Arguments: ( [ 1] = Type: U)

Error at ...: ABS(0) in Module:
Called from : GETVOLUMESERIALNUMBER(16) in Module: hdd-serial.prg
Called from : MAIN(4) in Module: hdd-serial.prg


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1720
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.06.10 17:25. Заголовок: Andrey Volserial из..


Andrey
Volserial из CT покажет тебе ту же инфу.

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1349
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.06.10 17:28. Заголовок: А как определить тип..


А как определить тип процессора ?
Хотя бы считать из реестра !


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1727
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.06.10 17:54. Заголовок: Andrey Посмотри при..


Andrey
Посмотри пример в MiniGui SAMPLES\ADVANCED\SYSINFO\
У меня Минигуи старый , аж 2004 года , возможно с тех пор появились и новые примеры в
этом плане.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1350
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.06.10 18:20. Заголовок: Точно, нашел такой. ..


Точно, нашел такой.

Но так как пишу на хХарборе без ГУИ, то выдрал оттуда нужные мне функции.

Пример здесь: Скрытый текст


Пришлось прицепить библиотеку cputype.lib для функции GetCPU()

А дальше облом, нужен класс TReg32(), нашел в h_registry.prg, опять прицепил к проекту.
Еще больше ошибок....
Error: Unresolved external '_HB_FUN_REGCLOSEKEY' referenced from W:\UTIL\
Error: Unresolved external '_HB_FUN_REGOPENKEYEXA' referenced from W:\UTI
Error: Unresolved external '_HB_FUN_MSGSTOP' referenced from W:\UTIL\CPU\
Error: Unresolved external '_HB_FUN_REGCREATEKEY' referenced from W:\UTIL
Error: Unresolved external '_HB_FUN_REGQUERYVALUEEXA' referenced from W:\
Error: Unresolved external '_HB_FUN_REGSETVALUEEXA' referenced from W:\UT
Error: Unresolved external '_HB_FUN_REGDELETEVALUEA' referenced from W:\U
Error: Unresolved external '_HB_FUN_REGDELETEKEY' referenced from W:\UTIL

Блин, нельзя ли укоротить ВСЕ ЭТО хозяйство под хХарбор ????
Кто поможет ???

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 965
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.06.10 18:44. Заголовок: Andrey пишет: Блин,..


Andrey пишет:

 цитата:
Блин, нельзя ли укоротить ВСЕ ЭТО хозяйство под хХарбор ???? Кто поможет ???


Помогите себе сами, попробуйте узнать о хХарбор больше, чем вы знаете
#define HKEY_LOCAL_MACHINE 0  

proc main

? GetRegistry( HKEY_LOCAL_MACHINE, "HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString" )

return


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1351
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.06.10 18:45. Заголовок: Сделал тест под хХар..


Сделал тест под хХарбор. Исходники здесь http://slil.ru/29281289

Вопрос остается прежним: Как укоротить ВСЕ ЭТО хозяйство под хХарбор ???



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1728
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.06.10 21:34. Заголовок: Andrey пишет: Как у..


Andrey пишет:

 цитата:
Как укоротить ВСЕ ЭТО хозяйство под хХарбор ???



Петр пишет:

 цитата:
#define HKEY_LOCAL_MACHINE 0

proc main

? GetRegistry( HKEY_LOCAL_MACHINE, "HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString" )

return


Читал ответ Петра ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1352
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.06.10 21:39. Заголовок: Петр пишет: Помогит..


Петр пишет:

 цитата:
Помогите себе сами, попробуйте узнать о хХарбор больше, чем вы знаете



Спасибо Петр ! Направление понял.

Только что-то сайт под тормаживает, тема Петра получилась выше, т.е. перед тем как я пример последний записывал.
И поэтому сразу не заметил ответ. Благо Дима подсказал.... Ну что без него мы делали бы...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1353
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.06.10 21:45. Заголовок: Сделал укороченный п..


Сделал укороченный пример но только для NT и выше:
Скрытый текст


Может кому пригодиться ....
Спасибо всем за помощь .....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1731
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.06.10 22:07. Заголовок: Andrey пишет: И поэ..


Andrey пишет:

 цитата:
И поэтому сразу не заметил ответ


Для этого есть Темы с новыми сообщениями

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1380
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.10 13:25. Заголовок: Сделал укороченный п..


Сделал укороченный пример но только для NT и выше:
Скрытый текст


Оказывается работает, только под ХР !!!
А под Win2000 - вылетает !

Где ошибка ? Может разные ветки реестра ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1762
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.10 13:35. Заголовок: Andrey пишет: Где о..


Andrey пишет:

 цитата:
Где ошибка ? Может разные ветки реестра ?


Тут написано для каких осей
http://msdn.microsoft.com/ru-ru/library/system.security.permissions.registrypermission%28VS.90%29.aspx<\/u><\/a>

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1763
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.10 13:40. Заголовок: Andrey пишет: А под..


Andrey пишет:

 цитата:
А под Win2000 - вылетает !



Варианты:
1. Проверь ручками наличие этого ключа
2. Не достаточно прав , заюзай логин админа ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1381
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.10 16:08. Заголовок: Dima пишет: Вариант..


Dima пишет:

 цитата:
Варианты:
1. Проверь ручками наличие этого ключа
2. Не достаточно прав , заюзай логин админа ;)



Нету под руками Win2000. Ошибку мне прислали из другого города.
Эмулятор 2000 на ноутбуке не встанет, да и дорого сейчас тянуть дистрибутив. Трафик дорогой.

А что делать если у юзера нет прав для чтения ключа ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1765
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.10 16:31. Заголовок: Andrey Проверь сам ..


Andrey
Проверь сам ;)
Есть отличная прога TeamViewer. Ставишь ее у себя и даешь клиенту , клиент сообщает
тебе номер компа и пароль , забиваешь в TeamViewer его данные и ты уже на его компе.
Дистрибутив не требующий инсталляции налить куда то ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1382
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.10 18:33. Заголовок: Dima пишет: Есть от..


Dima пишет:

 цитата:
Есть отличная прога TeamViewer


Спасибо Дима ! Попробую !

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 35 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет