|
Вопрос # 5 913/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
получаю МАС адрес компьютера функцией, повсеместно лежащей в инете. Проблема в том что работает только на 2х компах где стоит дельфи. на чистых компах возвращает ПУСТУТЮ СТРОКУ, почему - не понимаю.
Приложение: Переключить в обычный режим- function GetMACAdress(var pureMac: string): string;
- var
- NCB: PNCB;
- Adapter: PAdapterStatus;
-
- URetCode: PChar;
- RetCode: char;
- I: integer;
- Lenum: PlanaEnum;
- _SystemID: string;
- TMPSTR: string;
- begin
- Result := '';
- _SystemID := '';
- Getmem(NCB, SizeOf(TNCB));
- Fillchar(NCB^, SizeOf(TNCB), 0);
-
- Getmem(Lenum, SizeOf(TLanaEnum));
- Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
-
- Getmem(Adapter, SizeOf(TAdapterStatus));
- Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
-
- Lenum.Length := chr(0);
- NCB.ncb_command := chr(NCBENUM);
- NCB.ncb_buffer := Pointer(Lenum);
- NCB.ncb_length := SizeOf(Lenum);
- RetCode := Netbios(NCB);
-
- i := 0;
- repeat
- Fillchar(NCB^, SizeOf(TNCB), 0);
- Ncb.ncb_command := chr(NCBRESET);
- Ncb.ncb_lana_num := lenum.lana[I];
- RetCode := Netbios(Ncb);
-
- Fillchar(NCB^, SizeOf(TNCB), 0);
- Ncb.ncb_command := chr(NCBASTAT);
- Ncb.ncb_lana_num := lenum.lana[I];
- // Must be 16
- Ncb.ncb_callname := '* ';
-
- Ncb.ncb_buffer := Pointer(Adapter);
-
- Ncb.ncb_length := SizeOf(TAdapterStatus);
- RetCode := Netbios(Ncb);
- //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
- if (RetCode = chr(0)) or (RetCode = chr(6)) then
- begin
- _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
- IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
- IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
- IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
- IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
- IntToHex(Ord(Adapter.adapter_address[5]), 2);
- pureMac := IntToHex(Ord(Adapter.adapter_address[0]), 2) +
- IntToHex(Ord(Adapter.adapter_address[1]), 2) +
- IntToHex(Ord(Adapter.adapter_address[2]), 2) +
- IntToHex(Ord(Adapter.adapter_address[3]), 2) +
- IntToHex(Ord(Adapter.adapter_address[4]), 2) +
- IntToHex(Ord(Adapter.adapter_address[5]), 2);
- end;
- Inc(i);
- until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
- FreeMem(NCB);
- FreeMem(Adapter);
- FreeMem(Lenum);
- GetMacAdress := _SystemID;
- end;
 |
Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 27 января 2012, 17:44
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 28 января 2012, 10:23; участников в обсуждении: 3.
|
bugmenot (статус: 3-ий класс), 27 января 2012, 22:57 [#1]:
а что сказал аффтар?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
AlexMPEI (статус: 1-ый класс), 27 января 2012, 23:22 [#2]:
автора не найти. да и примудрого особо в этой функции ничего нет. Просто если поискать по инету "получить МАС" то на всех сайтах приводится эта ф-я в разных вариациях. Я пробовал на 4х компьютерах. На тех 2х где есть Delphi (Win XP, Vista) она отлично выдает МАС (я не утверждаю что причина именно в Delphi, на этих компьютерах очень много чего еще стоит), а на 2х чистых пользовательских компах (Win XP) она выдает "". Абсолютно не понимаю возможную причину такого поведения.
|
|
SOA (статус: Посетитель), 27 января 2012, 23:29 [#3]:
to AlexMPEI: Скорее всего какая то из используемых функций привязана к dll устанавливаемым вместе с Delphi, попробуйте проверить к каким библиотекам обращаются все используемые функции.
|
|
AlexMPEI (статус: 1-ый класс), 28 января 2012, 10:23 [#4]:
для этой функции в usus подкючается файл NB30 - работа с нетбиос
|
29 января 2012, 12:44: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|