एक WMI से एक जटिल जानकारी निकालने के लिए प्रयोग करना चाहिए। मैंने अपने पीसी पर समांतर बंदरगाह पते खोजने की कोशिश की है और यह रिपोर्ट है:
सबसे पहले मैंने सभी समांतर बंदरगाहों को खोजने के लिए Win32_ParallelPort क्लास से पूछताछ की है। (पहले अपनी पोस्ट में PRUZ के समान कोड का उपयोग करके): 'Win32_ParallelPort से * चुनें *। परिणाम है (मैं अपने सिस्टम में केवल एक समानांतर पोर्ट है):
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&25C6B52A&0";
PowerManagementSupported = FALSE;
ProtocolSupported = 17;
SystemCreationClassName = "Win32_ComputerSystem";
SystemName = "JUPITER";
};
दूसरा, मैं पूछे है Win32_PNPAllocatedResource ('* Win32_PnPAllocatedResource से चुनें')। मुझे यहां बहुत सारी जानकारी मिली है, लेकिन मैंने केवल 3 प्रविष्टियों को पीएनपीडीवाइसिसआईडी = "एसीपीआई \ पीएनपी 04401 \ 4 & 25C6B52A & 0" चुना है।
instance of Win32_PNPAllocatedResource
{
Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_PortResource.StartingAddress=\"888\"";
Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&25C6B52A&0\"";
};
instance of Win32_PNPAllocatedResource
{
Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_PortResource.StartingAddress=\"1912\"";
Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&25C6B52A&0\"";
};
instance of Win32_PNPAllocatedResource
{
Antecedent = "\\\\JUPITER\\root\\cimv2:Win32_DMAChannel.DMAChannel=3";
Dependent = "\\\\JUPITER\\root\\cimv2:Win32_PnPEntity.DeviceID=\"ACPI\\\\PNP0401\\\\4&25C6B52A&0\"";
};
तीसरी प्रविष्टि कोई रूचि नहीं है। पहले दो प्रविष्टियों हमें दो (दशमलव) शुरू करने के पते (888 और 1912)
अंत में मैं पूछे है Win32_PortResource ('* Win32_PortResource से चुनें') इसी के लिए शुरू के पते समाप्ति पता लगाने के लिए देता है 888 और 1912:
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";
};
मैं RRUZ रूप में एक ही कोड का इस्तेमाल किया है अपडेट किया गया, जीयूआई आवेदन में (देखें नीचे)। केवल एक चीज जिसे आप संकलित करने की आवश्यकता है वह WbemScripting_TLB.pas इकाई है। इकाई द्वारा प्रकार लायब्रेरी आयात विज़ार्ड उत्पन्न होता है, तो आप my blog
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 <> 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 <> 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 <> nil) then
begin
SWbemObject.Properties_;//Load the Properties to read
Memo1.Lines.Add(SWbemObject.GetObjectText_(0));
end;
end;
end;
end.
यह आशाजनक सर्ज दिखता है - पते मेरा लक्ष्य हैं - कुछ मोटे डेल्फी कोड का कोई मौका? धन्यवाद ब्रायन। –
@ सर्ग: ग्रेट - मैं अनुभवी हूं। धन्यवाद। ब्रायन। –
@ सर्ग: यह बहुत अच्छा काम करता है, बहुत धन्यवाद - बिल्कुल मुझे जो शुरू करने के लिए जरूरी था। –