你知道为什么下面的代码块会在某些计算机上否定"无法将类型(Null)的变体转换为类型(OleStr)",而不是全部,但是十分之三的计算机会生成错误消息.

function GetWMIstringSW(const WMIClass, WMIProperty:string): string;
const
wbemFlagForwardOnly = $00000020;
var
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
LNode : TTreeNode;
LNode2 : TTreeNode;
begin
Result:='';
FWbemObjectSet:= FWMIService.ExecQuery(Format('Select %s from %s',[WMIProperty, WMIClass]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
if not VarIsNull(FWbemObject.Properties_.Item(WMIProperty).Value) then
Result:=FWbemObject.Properties_.Item(WMIProperty).Value;
LNode := ClientForm.TreeView1.Items.AddChild(Node, Format('%s',[String(FWbemObject.Name)]));
LNode2 := ClientForm.TreeView1.Items.AddChild(LNode, Format('%s',[String(FWbemObject.Version)]));
FWbemObject:=Unassigned;
end;
end;
Run Code Online (Sandbox Code Playgroud)
然后在FormCreate中执行该函数:
GETWMIstringSW('Win32_Product','Name');
Run Code Online (Sandbox Code Playgroud)
非常感谢你的帮助.
我正在编写一个控制台应用程序,它将为我的主应用程序Client.exe创建一个防火墙例外,它通过FTP将一些文档上传到我们的服务器.我从Delphi 7 Windows Vista/7防火墙异常网络位置借用了RRUZ代码,我的代码如下所示:
program ChangeFW;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
ComObj;
var
ExecName: string;
procedure AddExceptionToFirewall(Const Caption, Executable: String);
const
NET_FW_PROFILE2_DOMAIN = 1;
NET_FW_PROFILE2_PRIVATE = 2;
NET_FW_PROFILE2_PUBLIC = 4;
NET_FW_IP_PROTOCOL_TCP = 6;
NET_FW_ACTION_ALLOW = 1;
var
fwPolicy2 : OleVariant;
RulesObject : OleVariant;
Profile : Integer;
NewRule : OleVariant;
begin
Profile := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2');
RulesObject := fwPolicy2.Rules;
NewRule := CreateOleObject('HNetCfg.FWRule');
NewRule.Name := Caption;
NewRule.Description := Caption;
NewRule.Applicationname := Executable;
NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
NewRule.Enabled …Run Code Online (Sandbox Code Playgroud) 当选择节点时,如何使Treeview不再恢复到图像列表中的第一个图像?创建组节点时,它们的ImegeIndex为1
Node := TreeView1.Items.Add(nil, 'Software');
Node.ImageIndex:=1;
Run Code Online (Sandbox Code Playgroud)
但是,当我展开节点时,它会显示ImageIndex变为0并显示不同的图像.知道如何解决这个问题.谢谢.
我创建了一个程序,自动连接到我们的本地服务器并下载更新,这里是代码:
// Connect to web server and download ToBeInstalled.ini
Url := 'http://'+IPAdd+'/ToBeInstalled.ini';
MS := TMemoryStream.Create
try
try
http.Get(url, MS);
code := http.ResponseText;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode;
end;
MS.SaveToFile(UserPath + 'ToBeInstalled.ini');
finally
http.Free();
end;
Run Code Online (Sandbox Code Playgroud)
该程序在办公室工作得很好,但当用户在家但无法访问服务器或服务器不可用时,获得"套接字错误#10061"

我不知道如何捕获那个,更糟糕的是程序在显示错误消息后一起停止执行.你知道如何解决这个问题吗?非常感谢.