Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>One must experiment to extract a complex information from WMI. I have tried to find the parallel port addresses on my PC and that is the report:</p> <p>First of all I have queried Win32_ParallelPort class to find all parallel ports. (using the same code as PRUZ in his post before): 'Select * From Win32_ParallelPort'. The result is (I have only one parallel port in my system):</p> <pre><code>instance of Win32_ParallelPort { Availability = 3; Caption = "LPT1"; ConfigManagerErrorCode = 0; ConfigManagerUserConfig = FALSE; CreationClassName = "Win32_ParallelPort"; Description = "LPT1"; DeviceID = "LPT1"; Name = "LPT1"; OSAutoDiscovered = TRUE; PNPDeviceID = "ACPI\\PNP0401\\4&amp;25C6B52A&amp;0"; PowerManagementSupported = FALSE; ProtocolSupported = 17; SystemCreationClassName = "Win32_ComputerSystem"; SystemName = "JUPITER"; }; </code></pre> <p>Second, I have queried Win32_PNPAllocatedResource ('Select * From Win32_PnPAllocatedResource'). I have got a lot of information here, but I have selected only the 3 entries by PNPDeviceID = "ACPI\PNP0401\4&amp;25C6B52A&amp;0".</p> <pre><code>instance of Win32_PNPAllocatedResource { Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_PortResource.StartingAddress=\"888\""; Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&amp;25C6B52A&amp;0\""; }; instance of Win32_PNPAllocatedResource { Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_PortResource.StartingAddress=\"1912\""; Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&amp;25C6B52A&amp;0\""; }; instance of Win32_PNPAllocatedResource { Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_DMAChannel.DMAChannel=3"; Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&amp;25C6B52A&amp;0\""; }; </code></pre> <p>The third entry is of no interest. The first two entries gives us two (decimal) starting addresses (888 and 1912)</p> <p>Finally I have queried Win32_PortResource ('Select * From Win32_PortResource') to find the ending addresses corresponding to the starting addresses 888 and 1912:</p> <pre><code>instance of Win32_PortResource { Alias = FALSE; Caption = "0x00000378-0x0000037F"; CreationClassName = "Win32_PortResource"; CSCreationClassName = "Win32_ComputerSystem"; CSName = "JUPITER"; Description = "0x00000378-0x0000037F"; EndingAddress = "895"; Name = "0x00000378-0x0000037F"; StartingAddress = "888"; Status = "OK"; }; instance of Win32_PortResource { Alias = FALSE; Caption = "0x00000778-0x0000077B"; CreationClassName = "Win32_PortResource"; CSCreationClassName = "Win32_ComputerSystem"; CSName = "JUPITER"; Description = "0x00000778-0x0000077B"; EndingAddress = "1915"; Name = "0x00000778-0x0000077B"; StartingAddress = "1912"; Status = "OK"; }; </code></pre> <hr> <p><strong>Updated</strong></p> <p>I have used the same code as RRUZ, in GUI application (see below). The only thing you need to compile it is the WbemScripting_TLB.pas unit. The unit is generated by type library import wizard, you can read about the process in Delphi 2009 in <a href="http://sergworks.wordpress.com/2009/12/23/wmi-in-delphi-how-to-enumerate-serial-ports-and-everything-in-windows/" rel="nofollow noreferrer">my blog</a></p> <pre><code>unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button4: TButton; Button5: TButton; Button6: TButton; procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses WbemScripting_TLB, ActiveX; {$R *.dfm} procedure TForm1.Button4Click(Sender: TObject); var WMIServices : ISWbemServices; WMILocator : ISWbemLocator; Root : ISWbemObjectSet; SWbemObject : ISWbemObject; Item : IEnumVariant; rgVar : OleVariant; pCelFetched : Cardinal; begin Memo1.Lines.Clear; WMILocator := CoSWbemLocator.Create(); WMIServices := WMILocator.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil); // Root := WMIServices.ExecQuery('Select * From Win32_PnPAllocatedResource','WQL', 0, nil); Item := (Root._NewEnum) as IEnumVariant; while (Item.Next(1, rgVar, pCelFetched) = S_OK) do begin SWbemObject := IUnknown(rgVar) as ISWBemObject; if (SWbemObject &lt;&gt; nil) then begin SWbemObject.Properties_;//Load the Properties to read Memo1.Lines.Add(SWbemObject.GetObjectText_(0)); end; end; end; procedure TForm1.Button5Click(Sender: TObject); var WMIServices : ISWbemServices; WMILocator : ISWbemLocator; Root : ISWbemObjectSet; SWbemObject : ISWbemObject; Item : IEnumVariant; rgVar : OleVariant; pCelFetched : Cardinal; begin Memo1.Lines.Clear; WMILocator := CoSWbemLocator.Create(); WMIServices := WMILocator.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil); // Root := WMIServices.ExecQuery('Select * From Win32_PortResource','WQL', 0, nil); Item := (Root._NewEnum) as IEnumVariant; while (Item.Next(1, rgVar, pCelFetched) = S_OK) do begin SWbemObject := IUnknown(rgVar) as ISWBemObject; if (SWbemObject &lt;&gt; nil) then begin SWbemObject.Properties_;//Load the Properties to read Memo1.Lines.Add(SWbemObject.GetObjectText_(0)); end; end; end; procedure TForm1.Button6Click(Sender: TObject); var WMIServices : ISWbemServices; WMILocator : ISWbemLocator; Root : ISWbemObjectSet; SWbemObject : ISWbemObject; Item : IEnumVariant; rgVar : OleVariant; pCelFetched : Cardinal; begin Memo1.Lines.Clear; WMILocator := CoSWbemLocator.Create(); WMIServices := WMILocator.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil); // Root := WMIServices.ExecQuery('Select * From Win32_ParallelPort','WQL', 0, nil); Item := (Root._NewEnum) as IEnumVariant; while (Item.Next(1, rgVar, pCelFetched) = S_OK) do begin SWbemObject := IUnknown(rgVar) as ISWBemObject; if (SWbemObject &lt;&gt; nil) then begin SWbemObject.Properties_;//Load the Properties to read Memo1.Lines.Add(SWbemObject.GetObjectText_(0)); end; end; end; end. </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload