Mac-адрес, Железо, style|ES_NUMBER
2. Ели кто знает может расскажете по подробнее о SetWindowLong(Edit1->Handle,GWL_STYLE,style|ES_NUMBER); а имено о "style|ES_NUMBER" какие еще могут быть стили, хочется что бы в Edit1 можно было вводить только IP-адрес. Использование MaskEdit не совсем подходит.
И последний вопрос
3. Как все таки получать информацию о железе, серийник харда, номер и дата прошивки биоса и еще какйю нибудь инфу по железу, но не зависимо от версии винды ( неважно 9х это или NT, 2000, XP )
Заранее благодарен.
__int64 GetMAC(void)
{
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
} ASTAT, * PASTAT;
ASTAT Adapter;
NCB Ncb;
UCHAR uRetCode;
char NetName[50];
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = 0;
uRetCode = Netbios( &Ncb );
if (uRetCode) return -1;
memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = 0;
strcpy( Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );
if (uRetCode) return -2;
// "Packing" 6 bytes of MAC-address into __int64 MAC6b = 0;
for (int i=0; i<6; i++) MAC6b |= __int64(Adapter.adapt.adapter_address) << ((5-i)<<3);
return MAC6b;
}
Извиняюсь, я там в конце объявление переменной пропустил: __int64 MAC6b = 0;
Ну, и #include <nb30.h> тоже надо добавить.
В int64, конечно, преобразовывать не обязательно.
В структуре Adapter.adapt.adapter_address весь адрес аккуратно байтиками лежит...
P.S. Параллельный вопрос: тут вроде как NetBios использован. Чем это чревато? Например, какие гарантии того, что он установлен на машине?
С другой стороны это ведь в MSDN дано, т.е. под любой виндой должно работать? (win98/win2000/winXP проверял - правда, работало
:-)
За пример кончно спасибо ( еще пригодится ).