2017-05-24 2 views
1

J'essaie d'obtenir la liste des noms d'imprimantes physiques, qui sont connectés à Windows, basé sur une réponse de Query available RAM in Inno Setup.Liste toutes les imprimantes physiques utilisant la requête WMI dans Inno Setup

Mais juste obtenir: "Envoyer à OneNote 16".

Voici ma question:

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

Répondre

1

Vous devez itérer le jeu de résultats:

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; 

Le code requiert la version Unicode de Inno Setup pour une better Variant support.


En fait, vous pouvez voir ce code dans la même question, où vous avez pris la WbemQuery de:
Is there a way to read the system's information in Inno Setup

Notez comment le Win32_NetworkAdapterConfiguration est réitérée là.

+0

Merci Martin –