Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 913

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
получаю МАС адрес компьютера функцией, повсеместно лежащей в инете. Проблема в том что работает только на 2х компах где стоит дельфи. на чистых компах возвращает ПУСТУТЮ СТРОКУ, почему - не понимаю.

Приложение:
  1. function GetMACAdress(var pureMac: string): string;
  2. var
  3. NCB: PNCB;
  4. Adapter: PAdapterStatus;
  5.  
  6. URetCode: PChar;
  7. RetCode: char;
  8. I: integer;
  9. Lenum: PlanaEnum;
  10. _SystemID: string;
  11. TMPSTR: string;
  12. begin
  13. Result := '';
  14. _SystemID := '';
  15. Getmem(NCB, SizeOf(TNCB));
  16. Fillchar(NCB^, SizeOf(TNCB), 0);
  17.  
  18. Getmem(Lenum, SizeOf(TLanaEnum));
  19. Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
  20.  
  21. Getmem(Adapter, SizeOf(TAdapterStatus));
  22. Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
  23.  
  24. Lenum.Length := chr(0);
  25. NCB.ncb_command := chr(NCBENUM);
  26. NCB.ncb_buffer := Pointer(Lenum);
  27. NCB.ncb_length := SizeOf(Lenum);
  28. RetCode := Netbios(NCB);
  29.  
  30. i := 0;
  31. repeat
  32. Fillchar(NCB^, SizeOf(TNCB), 0);
  33. Ncb.ncb_command := chr(NCBRESET);
  34. Ncb.ncb_lana_num := lenum.lana[I];
  35. RetCode := Netbios(Ncb);
  36.  
  37. Fillchar(NCB^, SizeOf(TNCB), 0);
  38. Ncb.ncb_command := chr(NCBASTAT);
  39. Ncb.ncb_lana_num := lenum.lana[I];
  40. // Must be 16
  41. Ncb.ncb_callname := '* ';
  42.  
  43. Ncb.ncb_buffer := Pointer(Adapter);
  44.  
  45. Ncb.ncb_length := SizeOf(TAdapterStatus);
  46. RetCode := Netbios(Ncb);
  47. //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
  48. if (RetCode = chr(0)) or (RetCode = chr(6)) then
  49. begin
  50. _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
  51. IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
  52. IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
  53. IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
  54. IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
  55. IntToHex(Ord(Adapter.adapter_address[5]), 2);
  56. pureMac := IntToHex(Ord(Adapter.adapter_address[0]), 2) +
  57. IntToHex(Ord(Adapter.adapter_address[1]), 2) +
  58. IntToHex(Ord(Adapter.adapter_address[2]), 2) +
  59. IntToHex(Ord(Adapter.adapter_address[3]), 2) +
  60. IntToHex(Ord(Adapter.adapter_address[4]), 2) +
  61. IntToHex(Ord(Adapter.adapter_address[5]), 2);
  62. end;
  63. Inc(i);
  64. until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
  65. FreeMem(NCB);
  66. FreeMem(Adapter);
  67. FreeMem(Lenum);
  68. GetMacAdress := _SystemID;
  69. end;


AlexMPEI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 27 января 2012, 17:44
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 28 января 2012, 10:23; участников в обсуждении: 3.
bugmenot

bugmenot (статус: 3-ий класс), 27 января 2012, 22:57 [#1]:

а что сказал аффтар?
виконання програми розпочинається з того самого мiсця, де призупинилося.

AlexMPEI

AlexMPEI (статус: 1-ый класс), 27 января 2012, 23:22 [#2]:

автора не найти. да и примудрого особо в этой функции ничего нет. Просто если поискать по инету "получить МАС" то на всех сайтах приводится эта ф-я в разных вариациях. Я пробовал на 4х компьютерах. На тех 2х где есть Delphi (Win XP, Vista) она отлично выдает МАС (я не утверждаю что причина именно в Delphi, на этих компьютерах очень много чего еще стоит), а на 2х чистых пользовательских компах (Win XP) она выдает "". Абсолютно не понимаю возможную причину такого поведения.
SOA

SOA (статус: Посетитель), 27 января 2012, 23:29 [#3]:

to AlexMPEI: Скорее всего какая то из используемых функций привязана к dll устанавливаемым вместе с Delphi, попробуйте проверить к каким библиотекам обращаются все используемые функции.
AlexMPEI

AlexMPEI (статус: 1-ый класс), 28 января 2012, 10:23 [#4]:

для этой функции в usus подкючается файл NB30 - работа с нетбиос

29 января 2012, 12:44: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с сетями и протоколами модератором Ерёмин А.А.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:45
Выполнено за 0.02 сек.