小编Cor*_*ver的帖子

无法将类型(Null)的变体转换为类型(OleStr)

你知道为什么下面的代码块会在某些计算机上否定"无法将类型(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)

非常感谢你的帮助.

delphi wmi ole delphi-xe2

7
推荐指数
1
解决办法
4万
查看次数

Coinitialize尚未被称为错误消息

我正在编写一个控制台应用程序,它将为我的主应用程序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)

delphi windows-firewall console-application delphi-xe2

4
推荐指数
1
解决办法
9946
查看次数

Treeview Imageindex - 图像不断变化

当选择节点时,如何使Treeview不再恢复到图像列表中的第一个图像?创建组节点时,它们的ImegeIndex为1

  Node := TreeView1.Items.Add(nil, 'Software');
  Node.ImageIndex:=1;
Run Code Online (Sandbox Code Playgroud)

但是,当我展开节点时,它会显示ImageIndex变为0并显示不同的图像.知道如何解决这个问题.谢谢.

delphi treeview delphi-xe2

2
推荐指数
1
解决办法
5881
查看次数

TIdHTTP异常处理

我创建了一个程序,自动连接到我们的本地服务器并下载更新,这里是代码:

// 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"

在此输入图像描述

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

delphi indy10 delphi-xe2

1
推荐指数
1
解决办法
7497
查看次数