用WMI无法读取本机当前IP?

tokimemo 2008-08-25 12:50:39
这个是使用WMI读取系统信息的部分代码
Wmi:= CreateOleObject('WbemScripting.SWbemLocator');
Objs := Wmi.ConnectServer('.','root\cimv2').ExecQuery('Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled = true',,48);
Enum:=IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
Enum.Next(1,Obj,C);
这些都没有什么问题,但是我用
labIP.Caption := Obj.Properties_.Item('IPAddress(0)',0).Value;
来获取IP地址的时候,系统报“找不到”,但是,如下
labMAC.Caption := Obj.Properties_.Item('MACAddress',0).Value;
却可以找到本机的MAC地址。
使用微软的WMI工具得到的VBS代码是这样的
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where ipenabled = true",,48)
For Each objItem in colItems
Wscript.Echo "IPAddress: " & objItem.IPAddress(0)
Wscript.Echo "MACAddress: " & objItem.MACAddress
Next
最后那里是用的IPAddress(0),如果是IPAddress,也有类似“找不到”的错误
不过如果使用IPAddress(0)在Delphi中,好像就不能用了
到底这个(0)应该在什么地方使用才能正确显示IP呢。

...全文
291 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tokimemo 2008-08-25
  • 打赏
  • 举报
回复
另外,我用的是Delphi7。
tokimemo 2008-08-25
  • 打赏
  • 举报
回复
原来很简单,因为获得的IP就是一个数组,所以显示不出来
把数组的第一个值取出来就可以,代码实现虽然笨了点,不过
还是实现效果了
labMAC.Caption := Obj.Properties_.Item('MACAddress',0).Value;

Obj := Obj.Properties_.Item('IPAddress',0).Value;
Obj := Obj[0];
labIP.Caption := Obj;

必须要先显示MAC,再对Obj变量进行处理,显示IP,呵呵。
楼上的方法好像不行,代码不处理啊。
老之 2008-08-25
  • 打赏
  • 举报
回复
直接写IPAddress应该可以的

var
WMi, Objs, Obj, Value: OleVariant;
Enum: IEnumVariant;
C: Cardinal;
s: array of string;
i: Integer;
Name, IP: string;
begin
IP := '';
Wmi:= CreateOleObject('WbemScripting.SWbemLocator');
Objs := Wmi.ConnectServer('.','root\cimv2')
.ExecQuery('Select * from Win32_NetworkAdapterConfiguration where IPEnabled!=0');
Enum := IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
C := 0;
while Succeeded(Enum.Next(1, Obj, C)) and (C > 0) do
begin
begin
Name := Obj.Properties_.Item('Description', 0).Value;
s := Obj.Properties_.Item('IPAddress', 0).Value;
IP := IP + Name + #13#10;
for i := 0 to High(s) do IP := IP + (s[i]) + #13#10;
IP := IP + #13#10;
end;
end;
ShowMessage(IP);
end;
oosmile 2008-08-25
  • 打赏
  • 举报
回复
哦,问啊……日啊,慢慢等等吧

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧