在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
是如何反复出现。
谢谢你马丁 –