在Inno Setup中列出所有使用WMI查询的物理打印机

在Inno Setup中列出所有使用WMI查询的物理打印机

问题描述:

我试图根据Query available RAM in Inno Setup的答案获取连接到Windows的物理打印机名称的列表。在Inno Setup中列出所有使用WMI查询的物理打印机

但只是得到:“发送到OneNote 16”。

这里是我的查询:

Query := 'SELECT Name FROM Win32_Printer'; 
Printer := WbemQuery(WbemServices, Query); 
if not VarIsNull(Printer) then 
begin 
    Log(Format('Printers=%s', [Printer.Name])); 
end; 

你必须遍历结果集:

var 
    Query: string; 
    WbemLocator, WbemServices, WbemObjectSet: Variant; 
    Printer: Variant; 
    I: Integer; 
begin 
    WbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); 
    WbemServices := WbemLocator.ConnectServer('.', 'root\CIMV2'); 
    Query := 'SELECT Name FROM Win32_Printer'; 
    WbemObjectSet := WbemServices.ExecQuery(Query); 
    if not VarIsNull(WbemObjectSet) and (WbemObjectSet.Count > 0) then 
    begin 
    for I := 0 to WbemObjectSet.Count - 1 do 
    begin 
     Printer := WbemObjectSet.ItemIndex(I); 
     if not VarIsNull(Printer) then 
     begin 
     Log(Printer.Name); 
     end; 
    end; 
    end; 
end; 

的代码需要一个better Variant support Inno Setup的的Unicode版本。


其实,你可以在同样的问题,你来自哪里,带着WbemQuery看到这样的代码:
Is there a way to read the system's information in Inno Setup

注意Win32_NetworkAdapterConfiguration是如何反复出现。

+0

谢谢你马丁 –