線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1711
推到 Plurk!
推到 Facebook!

如何獲取網卡IP,網卡地址等信息

尚未結案
james_yu
一般會員


發表:33
回覆:19
積分:10
註冊:2003-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-26 08:23:09 IP:210.208.xxx.xxx 未訂閱
我寫了一個程式,能獲取所有的工作組名和這個組裡的計算機名,但是不知如何獲取計算機的網絡卡的IP和網卡地址等信息?不知如何來獲取? unit U_NET; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, ImgList; type TNetResourceArray = ^TnetResource; TfrmNet = class(TForm) StatusBar: TStatusBar; Panel1: TPanel; TreeView: TTreeView; Panel2: TPanel; btnOK: TSpeedButton; btnCancel: TSpeedButton; ImageList: TImageList; procedure FormActivate(Sender: TObject); procedure TreeViewClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnCancelClick(Sender: TObject); private procedure GetComputerName; //獲取計算機名 procedure GetGroupName; //獲取組名 { Private declarations } public { Public declarations } end; function NetExecute(aFormClass: TFormClass): string; var frmNet: TfrmNet; node: Ttreenode; aComputerName : string;//全局變量,存儲選定的計算機名 implementation {$R *.DFM} //返回選定的計算機名 function NetExecute(aFormClass: TFormClass): string; begin aComputerName := ''; with aFormClass.Create(Application) do begin try showModal; finally free; end; result := aComputerName; end; end; procedure TfrmNet.FormActivate(Sender: TObject); begin node := treeview.Items.add(Treeview.topitem, '整個網絡'); node.imageindex := 0; treeview.SetFocus; end; //獲取組名 procedure TfrmNet.GetGroupName; var NetResource: TNetResource; Buf: Pointer; Count, BufSize, Res: DWORD; lphEnum: THandle; p: TNetResourceArray; i, j: SmallInt; NetworkTypeList: TList; my_node_1: Ttreenode; begin statusbar.panels[0].text := '正在列舉。。。請稍后'; statusbar.refresh; screen.Cursor := crHourGlass; NetworkTypeList := TList.Create; //鳳淕跺厙釐笢腔恅璃訧埭腔曆梟ㄛlphEnum峈殿隙靡梟 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, nil, lphEnum); if Res <> NO_ERROR then exit; //硒俴囮啖 //獲取整個網絡的資源信息 Count := $FFFFFFFF; //不限資源數目 BufSize := 8192; //緩沖區為8K GetMem(Buf, BufSize); //申請內存 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if (Res = ERROR_NO_MORE_ITEMS) //資源列舉 or (Res <> NO_ERROR) //執行失敗 then Exit; P := TNetResourceArray(Buf); for I := 0 to Count - 1 do //記錄各個網絡的信息 begin NetworkTypeList.Add(p); Inc(P); end; //WNetCloseEnum關閉一個網絡句柄 Res := WNetCloseEnum(lphEnum); //關閉一次列舉 if Res <> NO_ERROR then exit; for J := 0 to NetworkTypeList.Count - 1 do //列出各個網絡的工作組名 begin //列出一個網絡類型的工作組名 NetResource := TNetResource(NetworkTypeList.Items[J]^); //厙釐濬倰陓洘 //鳳議跺厙釐濬倰腔恅璃訧埭腔曆梟ㄛNetResource峈厙釐濬倰陓洘ㄛlphEnum峈殿隙靡梟 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum); if Res <> NO_ERROR then break; //硒俴囮啖 while true do //蹈撼珨跺厙釐濬倰腔垀衄馱釬郪腔陓洘 begin Count := $FFFFFFFF; //祥癹訧埭杅醴 BufSize := 8192; //遣喳?湮苤扢离峈8K GetMem(Buf, BufSize); //扠?囀湔ㄛ蚚衾鳳馱釬郪陓洘 //鳳珨跺厙釐濬倰腔恅璃訧埭陓洘ㄛ Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if (Res = ERROR_NO_MORE_ITEMS) //訧埭蹈撼俇救 or (Res <> NO_ERROR) //硒俴囮啖 then break; P := TNetResourceArray(Buf); for I := 0 to Count - 1 do //列舉跪跺馱釬郪腔陓洘 begin my_node_1 := treeview.Items.addchild(node, StrPAS(P^.lpRemoteName)); //取得一個工作組名 my_node_1.imageindex := 1; Inc(P); end; end; Res := WNetCloseEnum(lphEnum); //壽敕一次列舉 if Res <> NO_ERROR then break; //硒俴囮啖 end; FreeMem(Buf); NetworkTypeList.Destroy; screen.Cursor := crDefault; statusbar.panels[0].text := ''; statusbar.refresh; end; //鳳數呾儂靡 procedure TfrmNet.GetComputerName; var NetResource: TNetResource; Buf: Pointer; Count, BufSize, Res: DWord; Ind: Integer; lphEnum: THandle; Temp: TNetResourceArray; groupname: string; my_node: Ttreenode; my_node_2: Ttreenode; begin screen.Cursor := crHourGlass; statusbar.panels[0].text := '正在列舉。。。。請稍后'; statusbar.refresh; my_node := treeview.Selected; groupname := treeview.Selected.Text; FillChar(NetResource, SizeOf(NetResource), 0); //場宎趙厙釐脯棒陓洘 NetResource.lpRemoteName := @GroupName[1]; //硌隅馱釬郪靡備 NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; //濬倰峈督昢?ㄗ馱釬郪ㄘ NetResource.dwUsage := RESOURCEUSAGE_CONTAINER; NetResource.dwScope := RESOURCETYPE_DISK; //蹈撼恅璃訧埭陓洘 //鳳硌隅馱釬郪腔厙釐訧埭曆梟 Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, @NetResource, lphEnum); if Res <> NO_ERROR then Exit; //硒俴囮啖 while True do //蹈撼硌隅馱釬郪腔厙釐訧埭 begin Count := $FFFFFFFF; //祥癹訧埭杅醴 BufSize := 8192; //遣喳?湮苤扢离峈8K GetMem(Buf, BufSize); //扠?囀湔ㄛ蚚衾鳳馱釬郪陓洘 //鳳數呾儂靡備 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); if Res = ERROR_NO_MORE_ITEMS then break; //訧埭蹈撼俇救 if (Res <> NO_ERROR) then Exit; //硒俴囮啖 Temp := TNetResourceArray(Buf); for Ind := 0 to Count - 1 do //蹈撼馱釬郪腔數呾儂靡備 begin //鳳馱釬郪腔數呾儂靡備ㄛ 2桶尨刉壺"\\"ㄛ?\\wangfajun=>wangfajun my_node_2 := treeview.Items.AddChild(my_node, Temp^.lpRemoteName 2); my_node_2.imageindex := 2; Inc(Temp); end; end; Res := WNetCloseEnum(lphEnum); //壽敕珨棒蹈撼 if Res <> NO_ERROR then exit; //硒俴囮啖 FreeMem(Buf); screen.Cursor := crDefault; statusbar.panels[0].text := ''; statusbar.refresh; end; //絞攷倰醴翹掩萸僻奀 procedure TfrmNet.TreeViewClick(Sender: TObject); begin if treeview.Selected.Level = 0 then begin if treeview.Selected.count = 0 then //添加工作組名 GetGroupName; end; if treeview.selected.level = 1 then begin if treeview.Selected.count = 0 then //添加計算機名 GetComputerName; end; if treeview.Selected.level = 2 then btnOK.Enabled := true else btnOK.Enabled := false end; //返回被選中的主機名 procedure TfrmNet.btnOKClick(Sender: TObject); begin aComputerName := treeview.Selected.Text; close; end; procedure TfrmNet.btnCancelClick(Sender: TObject); begin close; end; end. 發表人 - james_yu 於 2004/04/26 08:39:01
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-26 08:53:50 IP:210.68.xxx.xxx 未訂閱
您好: 可以參考包子大大發表的大作 看看有沒有幫助 http://delphi.ktop.com.tw/topic.php?topic_id=39424    ~悠遊法國號~
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-26 08:55:49 IP:61.222.xxx.xxx 未訂閱
請參考 http://delphi.ktop.com.tw/topic.php?topic_id=375
系統時間:2024-05-22 11:16:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!