::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-08-13 18:09:39, Hit : 6063, Vote : 1506
 http://www.howto.pe.kr
 IP Helper API 를 이용한 "ipconfig /all" 구현

// IPHLPAPI.DLL 의 Delphi 헤더파일은 JEDI 에서 받을 수 있습니다
//   ftp://delphi-jedi.org/api/IPHlpAPI.zip

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Winsock, IpHlpApi, IPTypes, IpIfConst;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetAdaterTypeName(Type_:Uint):string;
begin
  case Type_ of
    MIB_IF_TYPE_ETHERNET: begin
      result:='Ethernet adapter';
    end;
    MIB_IF_TYPE_TOKENRING: begin
      result:='oken Ring adapter';
    end;
    MIB_IF_TYPE_FDDI: begin
      result:='FDDI adapter';
    end;
    MIB_IF_TYPE_PPP: begin
      result:='PPP adapter';
    end;
    MIB_IF_TYPE_LOOPBACK: begin
      result:='Loopback adapter';
    end;
    MIB_IF_TYPE_SLIP: begin
      result:='Slip adapter';
    end;
    else begin
      result:='Unknow Adapter type';
    end;
  end;
end;

function GetNodeTypeName(Type_:Uint):string;
begin
  case Type_ of
    1: result:='Broadcast';
    2: result:='Peer to peer';
    4: result:='Mixed';
    8: result:='Hybrid';
    else begin
      result:='Unknown';
    end;
  end;
end;

function FormatMAC(pAdapt:PIP_ADAPTER_INFO):string;
var
  i:Integer;
begin
  result:='';
  for i:=0 to pAdapt^.AddressLength-1 do begin
    if (i = (pAdapt^.AddressLength - 1)) then begin
      result:=result+Format('%.2X', [Integer(pAdapt^.Address[i])]);
    end else begin
      result:=result+Format('%.2X-', [Integer(pAdapt^.Address[i])]);
    end;
  end;
end;


function B2S(b:Boolean):String;
begin
  if b then result:='Yes' else result:='No';
end;

Procedure IPConfig(Target:TStrings);
var
  Err:DWORD;
  pFixedInfo:PFIXED_INFO;
  FixedInfoSize:DWORD;
  pAdapterInfo, pAdapt:PIP_ADAPTER_INFO ;
  AdapterInfoSize:DWORD;
  pAddrStr:PIP_ADDR_STRING;
begin
  // Get the main IP configuration information for this machine using a FIXED_INFO structure
  Err := GetNetworkParams(NIL, FixedInfoSize);
  if (Err <> 0) then begin
    if (Err <> ERROR_BUFFER_OVERFLOW) then begin
      raise Exception.CreateFmt(
        'GetNetworkParams sizing failed with error %d',
        [Err]
      );
    end;
  end;

  // Allocate memory from sizing information
  pFixedInfo := PFIXED_INFO(GlobalAlloc(GPTR, FixedInfoSize));
  if not Assigned(pFixedInfo) then begin
    raise Exception.Create(
      'Memory allocation error'
    );
  end;

  Err := GetNetworkParams(pFixedInfo, FixedInfoSize);
  if (Err = 0) then begin
    Target.Add(Format('Host Name . . . . . . . . . : %s', [pFixedInfo^.HostName]));
    Target.Add(Format('DNS Servers . . . . . . . . : %s', [pFixedInfo^.DnsServerList.IpAddress.S]));
    pAddrStr := pFixedInfo^.DnsServerList.Next;
    while (pAddrStr<>NIL) do begin
      Target.Add(Format('%s', [pAddrStr^.IpAddress.S]));
      pAddrStr := pAddrStr^.Next;
    end;

    Target.Add('Node Type . . . . . . . . . : '+GetNodeTypeName(pFixedInfo^.NodeType));

    // if you really need it....
    //    printf("\tNetBIOS Scope ID. . . . . . : %s\n", pFixedInfo->ScopeId);
    //    printf("\tIP Routing Enabled. . . . . : %s\n", (pFixedInfo->EnableRouting ? "yes" : "no"));
    //    printf("\tWINS Proxy Enabled. . . . . : %s\n", (pFixedInfo->EnableProxy ? "yes" : "no"));
    //    printf("\tNetBIOS Resolution Uses DNS : %s\n", (pFixedInfo->EnableDns ?"yes" : "no"));
  end; // if

  //
  // Enumerate all of the adapter specific information using the IP_ADAPTER_INFO structure
  // Note:  IP_ADAPTER_INFO contains a linked list of adapter entries.
  //
  AdapterInfoSize := 0;
  Err := GetAdaptersInfo(NIL, AdapterInfoSize);
  if (Err <> 0) then begin
    if (Err <> ERROR_BUFFER_OVERFLOW) then begin
      raise Exception.CreateFmt(
        'GetAdaptersInfo sizing failed with error %d',
        [Err]
      );
    end;
  end;

  // Allocate memory from sizing information
  pAdapterInfo := PIP_ADAPTER_INFO(GlobalAlloc(GPTR, AdapterInfoSize));
  if not Assigned(pAdapterInfo) then begin
    raise Exception.Create(
      'Memory allocation error'
    );
  end;

  // Get actual adapter information
  Err := GetAdaptersInfo(pAdapterInfo, AdapterInfoSize);
  if (Err <> 0) then begin
    raise Exception.CreateFmt('GetAdaptersInfo failed with error %d',[Err]);
  end;

  pAdapt := pAdapterInfo;

  while (pAdapt<>NIL) do begin
    Target.Add(GetAdaterTypeName(pAdapt^.Type_));
    Target.Add(pAdapt^.AdapterName);
    Target.Add(Format('Description . . . . . . . . : %s',[pAdapt^.Description]));
    // MAC address
    Target.Add('Physical Addresses (MAC). . . . : '+FormatMAC(pAdapt));
    Target.Add('DHCP Enabled. . . . . . . . : '+B2S(pAdapt^.DhcpEnabled<>0));

    // list ip addresses
    pAddrStr := @pAdapt^.IpAddressList;
    while (pAddrStr<>NIL) do begin
      Target.Add('IP Address. . . . . . . . . : '+pAddrStr^.IpAddress.S);
      Target.Add('Subnet Mask . . . . . . . . : '+pAddrStr^.IpMask.S);
      pAddrStr := pAddrStr^.Next;
    end; // end

    // list gateways
    Target.Add('Default Gateway . . . . . . : '+pAdapt^.GatewayList.IpAddress.S);
    pAddrStr := pAdapt^.GatewayList.Next;
    while(pAddrStr <>NIL) do begin
      Target.Add(pAddrStr^.IpAddress.S);
      pAddrStr := pAddrStr^.Next;
    end; // while

    // DCHP
    Target.Add('DHCP Server . . . . . . . . : '+pAdapt^.DhcpServer.IpAddress.S);

    // WINS
    Target.Add('Primary WINS Server . . . . : '+pAdapt^.PrimaryWinsServer.IpAddress.S);
    Target.Add('Secondary WINS Server . . . : '+pAdapt^.SecondaryWinsServer.IpAddress.S);

  (*

    // if you really need it....
        struct tm *newtime;

        // Display coordinated universal time - GMT
        newtime = gmtime(&pAdapt->LeaseObtained);
        printf( "\tLease Obtained. . . . . . . : %s", asctime( newtime ) );

        newtime = gmtime(&pAdapt->LeaseExpires);
        printf( "\tLease Expires . . . . . . . : %s", asctime( newtime ) );
  *)

    // next adapter
    pAdapt := pAdapt^.Next;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IPConfig(Memo1.Lines);
end;

end.





851   [네트웍/인터넷] IP Helper API 를 이용한 "route PRINT" 명령어  김영대 2004/08/13 6108 1538
  [네트웍/인터넷] IP Helper API 를 이용한 "ipconfig /all" 구현  김영대 2004/08/13 6063 1506
849   [네트웍/인터넷] IP Helper API 를 이용한 ARP 예제 (MAC->IP 구하기)  김영대 2004/08/12 5364 1255
848   [네트웍/인터넷] 설치된 Network Protocol 목록 구하기 (Winsock2)  김영대 2004/08/12 4827 1295
847   [네트웍/인터넷] Network Packet Capture (Winsock2)  김영대 2004/08/12 5790 1240
846   [네트웍/인터넷] IP Helper API 를 이용한 NIC 통신 상태 구하기  김영대 2004/08/12 5115 1430
845   [네트웍/인터넷] IP Helper API 를 이용한 IP 주소 테이블 구하기  김영대 2004/08/12 5458 1204
844   [네트웍/인터넷] IP Helper API 를 이용한 접속 상태 테이블 구하기  김영대 2004/08/12 5398 1383
843   [일반/컴포넌트] Task bar 에 나타나는 프로그램 아이콘 바꾸기  김영대 2004/08/11 4866 1149
842   [시스템] 디스플레이 어댑터 목록 구하기  김영대 2004/08/11 4421 1173
841   [윈도우즈 API] IE 임시 인터넷 파일 폴더 비우기2  김영대 2004/08/11 4774 1223
840   [시스템] Sleep 중에도 타이머 이벤트 발생시키기  김영대 2004/08/09 5720 1325
839   [일반/컴포넌트] 도넛(Doughnut) 모양의 폼 만들기  김영대 2004/08/09 4298 1064
838   [네트웍/인터넷] Ping 소스  김영대 2004/08/09 6723 1209
837   [일반/컴포넌트] 수식(Expression) 계산기  김영대 2004/08/09 4442 1090
836   [COM/OLE] Shockwave Flash ActiveX 사용하기 예제  김영대 2004/08/09 4867 1306
835   [일반/컴포넌트] 벽에 들러붙는 자석폼 만들기  김영대 2004/08/06 4571 1136
834   [윈도우즈 API] Type Library 목록 구하기  김영대 2004/08/06 4386 1173
833   [일반/컴포넌트] Title bar 에 문자 올리기  김영대 2004/08/06 4571 1223
832   [일반/컴포넌트] Shockwave Flash 가 설치되었는지 검사하고 버전정보 읽어오기  김영대 2004/08/06 5893 1470
831   [일반/컴포넌트] Adobe Acrobat 이 설치되었는지 검사하기  김영대 2004/08/06 4387 1090
830   [시스템] 프로그램 제거(Uninstall) 목록 구하기  김영대 2004/08/05 4769 1244
829   [일반/컴포넌트] TreeView 의 노드를 볼드(Bold)로 강조하기  김영대 2004/08/05 5754 1664
828   [윈도우즈 API] 휴지통이 비어있는지 확인하기  김영대 2004/08/05 4720 1177
827   [일반/컴포넌트] ListView 내용을 파일로 저장하고 불러오기  김영대 2004/08/05 4433 1055
826   [시스템] 윈도우즈 부팅 모드(정상, 안전)  김영대 2004/08/05 4098 1154
825   [일반/컴포넌트] TPanel 로 만든 힌트  김영대 2004/08/05 4385 1088
824   [윈도우즈 API] 세로 타이틀바 만들기  김영대 2004/08/04 4873 1334
823   [일반/컴포넌트] 동적으로 생성한 TLabel 마우스로 이동시키기  김영대 2004/08/04 6256 1845
822   [일반/컴포넌트] RichEdit 에 URL link 만들기  김영대 2004/08/04 5758 1286
821   [일반/컴포넌트] Hex Viewer  김영대 2004/08/04 4209 1060
820   [시스템] 파일의 소유자와 도메인 구하기  김영대 2004/08/04 4077 1140
819   [시스템] 윈도우즈 사용자 계정 정보 구하기  김영대 2004/08/03 5102 1308
818   [시스템] 윈도우즈 화면 잠그기  김영대 2004/08/03 5047 1283
817   [시스템] DOS 명령어 실행하고 결과 받아오기 (Win2k,XP)  김영대 2004/08/03 5596 1334
816   [시스템] 일정시간 경과 후 윈도우즈 종료하기  김영대 2004/08/03 4488 1097
815   [일반/컴포넌트] Zlib 를 이용한 압축과 해제  김영대 2004/08/03 5238 1199
814   [일반/컴포넌트] Search and Select  김영대 2004/08/03 5147 1346
813   [시스템] DOS (명령 프롬프트) 창의 색상, 화면 모드 바꾸기  김영대 2004/08/02 5415 1591
812   [시스템] 외부 프로그램 종료 시키기  김영대 2004/08/02 5839 1186

[1][2][3] 4 [5][6][7][8][9][10]..[25] [다음 10개]
 

Copyright 1999-2019 Zeroboard / skin by zero