• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

用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呢。

...全文
227 点赞 收藏 4
写回复
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日
哦,问啊……日啊,慢慢等等吧
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1470

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告