Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1218
Благодарности: 955

Профиль | Отправить PM | Цитировать


Цитата R.i.m.s.k.y.:
а с выдергиванием айпишника из выхлопа ipconfig никто не поможет? »
Цитата R.i.m.s.k.y.:
собрал свой вариант вычисления айпишника, айпиадреса, айпи, IP адреса, IPAdress, IP Adress, IPAdres, IP Adres (это были теги для поиска
нужен AdapterWatch »
R.i.m.s.k.y., можно и без сторонних средств, например, использовать WMI:
Код: Выделить весь код
[code]
type
   IP_ADDR_INFO = array of record
      Description: String;
      IPv4: String;
      IPv6: String;
   end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
   objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
   IndexCount, i: Byte;
   strBuf, ptrnIPv4, ptrnIPv6: String;
begin
   try
      objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      objRegExp := CreateOleObject('VBScript.RegExp');
   except
      ShowExceptionMessage;
      Exit;
   end;
   ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
   ptrnIPv6 := //IPv6 regexp
      '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
      '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
      '(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
      '((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
      '((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
      '(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
      '(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})'; 

   objSWbemServices := objSWbemLocator.ConnectServer();
   objSWbemServices.Security_.ImpersonationLevel := 3;
   IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
   objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');

   for i := 1 to IndexCount do
   try
      SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
      strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
      IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
      objRegExp.Pattern := ptrnIPv4;
      if objRegExp.Test(strBuf) then
      begin
         objRegExpMatches := objRegExp.Execute(strBuf);
         IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
      end;
      objRegExp.Pattern := ptrnIPv6;
      if objRegExp.Test(strBuf) then
      begin
         objRegExpMatches := objRegExp.Execute(strBuf);
         IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
      end;
   except
      GetExceptionMessage;
      SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
   end;
   Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
   i: Byte;
   arr: IP_ADDR_INFO;
begin
   if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
   MsgBox(
      'Description: ' + arr[i].Description + #13#10 +
      'IPv4: ' + arr[i].IPv4 + #13#10 +
      'IPv6: ' + arr[i].IPv6 + #13#10, mbInformation, MB_OK);
end;

Последний раз редактировалось El Sanchez, 15-08-2011 в 13:31. Причина: ошибочка затесалась

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:44, 02-05-2011 | #1496