这个是使用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呢。
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呢。
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;
把数组的第一个值取出来就可以,代码实现虽然笨了点,不过
还是实现效果了labMAC.Caption := Obj.Properties_.Item('MACAddress',0).Value; Obj := Obj.Properties_.Item('IPAddress',0).Value;
Obj := Obj[0];
labIP.Caption := Obj;
必须要先显示MAC,再对Obj变量进行处理,显示IP,呵呵。
楼上的方法好像不行,代码不处理啊。