![]() |
Zugriff auf Sicherheitscenter von WinXP SP2
Hi DPler
Wie im Titel schon erwähnt möchte ich zugriff auf das Sicherheitscenter von Windows XP mit SP2 bekommen. D.h.: Auslesen welcher Status z.b. der Virenschutz hat. UM in meinen Programm schreiben zu können: "Ihr System wird vom (Programm) geschüzt und hat gemeldet des es vollkommen einsatzfähig ist..." Außerdem müsste ich wissen wie man die Dialoge z.b. für die Firewall aufruft. Ich hoffe ihr könnt mir helfen. :coder2: |
DP-Maintenance
Dieses Thema wurde von "alcaeus" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API / MS.NET Framework API" verschoben.
Ich schiebe es mal in die API-Sparte, da das mit Delphi geloest werden soll ;) |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
hast du schonmal im MSDN gestöbert/gesucht?
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
nein noch nicht
//edit: Hab die MSDN durchstöbert. Aber nichts :wall: |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
*push*
:duck: [edit=MrSpock]Ein push ist genug. Mfg, MrSpock[/edit] |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Wenn du im XP-SP2-PSDK (eher gab's das Feature ja nicht) nichts findest, wird ein Zugriff u.U. garnicht möglich sein (außer mit unsauberen Methoden). Dieses PSDK habe ich aktuell aber leider nichtmal installiert, kann also nicht nachgucken.
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Wenn du auf der MSDN:
![]() [Edit] Zitat:
[/edit] André |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Hurra :mrgreen: des ganz klingt ja schon mal nicht schlecht
So mir ist es eigentlich egal welche Variante es soll halt funktionieren. Aber da ich mich mit WMI nicht auskenne werd ich wahrscheinlich des mit der Regedit ihn arbeit nehmen. Wenn jetzt jemand noch die Regedit schlüssel weiss dann wäre des super. :-D |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
*push*
:duck: |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Zitat:
Ich weiß nicht alle Schüssel und sonst wohl auch keiner hier. Hast du mal im PSDK unter WMI nachgeschaut? |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Aus eigener Erfahrung heraus:
Die Informationen über das WSC (Windows Security Center) sind als "NON-PUBLIC" markiert bei Microsoft. D.h. die Daten wie man das Ding ansteuert erhalten nur Personen die von Microsoft als Trusted eingestuft worden sind. Ich hab auch schon vergeblich versucht das ding anzusteuern. Ich weiß aus zuverläßiger Quelle, das es sogar eine direkte API für das WSC gibt, aber es ist nichts veröffentlicht. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Mist :wall:
Ich nehme auch Information aus inoffiziellen Quellen :twisted: |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
hi,
Vielleicht hilft dir das vbs Script weiter...
Code:
'******************************************************************************
'AvSettings-wmi.vbs 'Author: Peter Costantini, The Microsoft Scripting Guys 'Date: 9/1/04 'Version: 1.0 'This script reads properties of an installed anti-virus product, using WMI. 'root\SecurityCenter:AntiVirusProduct is new on Windows XP Service Pack 2. '****************************************************************************** strComputer = "." 'Can set to remote machine. Set objAntiVirusProduct = GetObject _ ("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & _ "\root\SecurityCenter:AntiVirusProduct") If Err = 0 Then Err.Clear WScript.Echo "companyName: " & objAntiVirusProduct.companyName WScript.Echo "displayName: " & objAntiVirusProduct.displayName WScript.Echo "enableOnAccessUIMd5Hash: " & _ objAntiVirusProduct.enableOnAccessUIMd5Hash WScript.Echo "enableOnAccessUIParameters: " & _ objAntiVirusProduct.enableOnAccessUIParameters WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid WScript.Echo "onAccessScanningEnabled: " & _ objAntiVirusProduct.onAccessScanningEnabled WScript.Echo "pathToEnableOnAccessUI: " & _ objAntiVirusProduct.pathToEnableOnAccessUI WScript.Echo "pathToUpdateUI: " & objAntiVirusProduct.pathToUpdateUI WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate WScript.Echo "updateUIMd5Hash: " & objAntiVirusProduct.updateUIMd5Hash WScript.Echo "updateUIParameters: " & objAntiVirusProduct.updateUIParameters WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber Else WScript.Echo "Unable to connect to AntiVirusProduct class on " & _ strComputer & "." WScript.Echo " Error Number:" & Err.Number WScript.Echo " Source:" & Err.Source WScript.Echo " Description:" & Err.Description End If |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
:shock: es schaut nicht schlecht aus wenn ich es nur verstehen würde
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin,
das script läuft bei mir nicht... aber das hier ![]() Habs hier mal rein kopiert:
Delphi-Quellcode:
'**********************************
'by "Peter Urbanetz" <peter@[EMAIL PROTECTED] > Oct 14, 2004 at 12:53 PM '********************************** On Error Resume Next strComputer = "." ' compname Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\SecurityCenter") Set colItems = objWMIService.ExecQuery("Select * from FirewallProduct",,48) For Each objItem in colItems MsgBox objItem.getObjectText_ Next Set colItems = objWMIService.ExecQuery("Select * from AntiVirusProduct",,48) For Each objItem in colItems MsgBox objItem.getObjectText_ Next '********************************** 'I hope it is helpfull 'Peter ' |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
ich hab mal ne delphi funktion darfür
Delphi-Quellcode:
und der VBS script wäre dann
procedure GetFirewallandAntiVirusSoftware(SLAntiVirus, SLFirewall: TStringList);
var f: TextFile; VBSFile, InfoFile: String; SL: TStringList; i: Integer; begin SL := TStringList.Create; VBSFile := Copy(ParamStr(0), 1, Length(ParamStr(0)) -4) + '.vbs'; InfoFile := Copy(ParamStr(0), 1, Length(ParamStr(0)) -4) + '.erz'; AssignFile(f, VBSFile); ReWrite(f); // Stuff is needed .. WriteLn(f, 'Set objSecurityCenter = GetObject("winmgmts:\\.\root\SecurityCenter")'); WriteLn(f, 'Set colFirewall = objSecurityCenter.ExecQuery("Select * From FirewallProduct",,48)'); WriteLn(f, 'Set colAntiVirus = objSecurityCenter.ExecQuery("Select * From AntiVirusProduct",,48)'); WriteLn(f, 'Set objFileSystem = CreateObject("Scripting.fileSystemObject")'); WriteLn(f, 'Set objFile = objFileSystem.CreateTextFile("' + InfoFile + '", True)'); WriteLn(f, 'Enter = Chr(13) + Chr(10)'); WriteLn(f, 'CountFW = 0'); WriteLn(f, 'CountAV = 0'); // Firewall(s) WriteLn(f, 'For Each objFirewall In colFirewall'); WriteLn(f, 'CountFW = CountFW + 1'); WriteLn(f, 'Info = Info & "F" & CountFw & ") " & objFirewall.displayName & " v" & objFirewall.versionNumber & Enter'); WriteLn(f, 'Next'); // AntiVirus WriteLn(f, 'For Each objAntiVirus In colAntiVirus'); WriteLn(f, 'CountAV = CountAV + 1'); WriteLn(f, 'Info = Info & "A" & CountAV & ") " & objAntiVirus.displayName & " v" & objAntiVirus.versionNumber & Enter'); WriteLn(f, 'Next'); // Write to File WriteLn(f, 'objFile.WriteLine(Info)'); WriteLn(f, 'objFile.Close'); CloseFile(f); ShellExecute(0, 'open', PChar(VBSFile), nil, nil, SW_HIDE); // 2 sec warten, is genug Sleep(2000); SL.LoadFromFile(InfoFile); for i := 0 to SL.Count -1 do begin if Copy(SL[i], 1, 1) = 'F' then SLFirewall.Add(Copy(SL[i], 2, Length(SL[i]))) else if Copy(SL[i], 1, 1) = 'A' then SLAntiVirus.Add(Copy(SL[i], 2, Length(SL[i]))) end; DeleteFile(VBSFile); DeleteFile(InfoFile); end; // aufrufen procedure TfrmMain.Button1Click(Sender: TObject); var SLAntiVirus, SLFirewall: TStringList; i: Integer; begin lbAntiVirus.Clear; // ListBox lbFirewall.Clear; SLAntiVirus := TStringList.Create; SLFirewall := TStringList.Create; GetFirewallandAntiVirusSoftware(SLAntiVirus, SLFirewall); for i := 0 to SLAntiVirus.Count -1 do lbAntiVirus.Items.Add(SLAntiVirus[i]); for i := 0 to SLFirewall.Count -1 do lbFirewall.Items.Add(SLFirewall[i]); end;
Delphi-Quellcode:
Set objSecurityCenter = GetObject("winmgmts:\\.\root\SecurityCenter")
Set colFirewall = objSecurityCenter.ExecQuery("Select * From FirewallProduct",,48) Set colAntiVirus = objSecurityCenter.ExecQuery("Select * From AntiVirusProduct",,48) Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objFile = objFileSystem.CreateTextFile("C:\Filename.erz", True) Enter = Chr(13) + Chr(10) CountFW = 0 CountAV = 0 For Each objFirewall In colFirewall CountFW = CountFW + 1 Info = Info & "F" & CountFw & ") " & objFirewall.displayName & " v" & objFirewall.versionNumber & Enter Next For Each objAntiVirus In colAntiVirus CountAV = CountAV + 1 Info = Info & "A" & CountAV & ") " & objAntiVirus.displayName & " v" & objAntiVirus.versionNumber & Enter Next objFile.WriteLine(Info) objFile.Close |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
klingt alles super und funktioniert auch alles einwandfrei aber gibt es nicht eine gänzlich aus Delphi-Code bestehende Lösung, weil des mit die 2 sec. warten ist total schlecht. z.b. am Afnag wo isch probiert habe bin ich fast verzeifelt weil er dann nie die Entdatei gefunden hat. Was war der Grund? NORTAN den er hat mir die ganze Zeit den Script gesperrt.
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
reicht dir evtl. das?
Delphi-Quellcode:
{..}
uses {..,} ComObj, ActiveX; {..} procedure TForm1.Button1Click(Sender: TObject); var SWbem, SWbemCon, SWbemQuery, objVar : OleVariant; szWQL : String; pFetched : LongInt; unknown : IUnknown; enumUnk : IEnumUnknown; Counter : Integer; procedure Display(szValue: String = ''; szData : String = ''); begin Form1.Canvas.TextOut(20 , Counter, szValue); Form1.Canvas.TextOut(200, Counter, szData ); inc(Counter, 17); end; begin Canvas.FillRect(Rect(0,0,form1.Width,form1.Height)); Counter := 20; CoInitialize(nil); try SWbem := CreateOleObject('WbemScripting.SWbemLocator'); // strServer, strNamespace, strUser, strPassword, strLocale, strAuthority, // iSecurityFlags, objwbemNamedValueSet SWbemCon := SWbem.ConnectServer('', 'root\SecurityCenter', '', '', ''); szWQL := 'Select * from AntiVirusProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin Display('companyName:' , VarToStr(objVar.companyName)); Display('displayName:' , VarToStr(objVar.displayName)); Display('enableOnAccessUIMd5Hash:' , VarToStr(objVar.enableOnAccessUIMd5Hash)); Display('enableOnAccessUIParameters:', VarToStr(objVar.enableOnAccessUIParameters)); Display('instanceGuid:' , VarToStr(objVar.instanceGuid)); Display('onAccessScanningEnabled:' , VarToStr(objVar.onAccessScanningEnabled)); Display('pathToEnableOnAccessUI:' , VarToStr(objVar.pathToEnableOnAccessUI)); Display('pathToUpdateUI:' , VarToStr(objVar.pathToUpdateUI)); Display('productUptoDate:' , VarToStr(objVar.productUptoDate)); Display('updateUIMd5Hash:' , VarToStr(objVar.updateUIMd5Hash)); Display('updateUIParameters:' , VarToStr(objVar.updateUIParameters)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else Display('No supported AV products found...'); Display('---------------------------------------------'); szWQL := 'Select * from FirewallProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin Display('Company Name:' , VarToStr(objVar.companyName)); Display('Display Name:' , VarToStr(objVar.displayName)); Display('Enabled:' , VarToStr(objVar.enabled)); Display('enableUIParameters:', VarToStr(objVar.enableUIParameters)); Display('pathToEnableUI:' , VarToStr(objVar.pathToEnableUI)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else Display('No supported FW products found...'); finally CoUnInitialize; end; end; {..} |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
@x000x: funktioniert super, danke :thumb: :dance:
Jetzt noch ein paar Fragen: Also des Sicherheitsfenster hat unten so die drei Sachen: Internet-Optionen, Automatisches Update, Windows Firewall. Internet-Optionen ist kein Problem aber wie kann ich den Dialog Automatisches Update und Windows Firewall aufrufen? Außerdem war stellt sich auch die Frage wie ich den Status des Automatisches Update und der Windows Firewall bekomme. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Hallo,
ich finde diesen Code-Schnipsel für die Delphi-only-Lösung sehr hilfreich. Nur leider bekomme ich ihn nur unter Delphi 7 personal und nicht unter Delphi 3 professional zum Laufen. An der folgenden Zeile stört sich der Compiler:
Delphi-Quellcode:
Ich erhalte an der Stelle mit Delphi 3 immer den Fehler: Inkompatible Typen 'Variant' und 'IUnknown'.
unknown := SWbemQuery._NewEnum;
Versuche ich mich an einer Typumwandlung
Delphi-Quellcode:
bekomme ich die Fehlermeldung: Operator ist auf diesen Operandentyp nicht anwendbar.
unknown := Variant(SWbemQuery._NewEnum) as IUnknown;
Gibt's für Delphi 3 an der Stelle noch eine Chance? Kann mir bitte jemand helfen? Grüße aus Stuttgart, Marian |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Kann sein, dass Delphi 3 das noch nicht unterstützt, weil zu der Zeit WMI noch nicht unterstützt wurde.
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
du könntest nochmal folgendes versuchen:
Delphi-Quellcode:
Falls das nicht funktionieren sollte, kannst du das ganze auch über die Unit WbemScripting_TLB realisieren, wie
//...
var //... pFetched : LongInt; unknown : Variant; //IUnknown; enumUnk : IEnumUnknown; //... begin //... unknown := SWbemQuery._NewEnum; IUnknown(unknown).QueryInterface(IEnumVariant, enumUnk); // unknown.QueryInterface(IEnumVariant, enumUnk); //... szWQL := 'Select * from FirewallProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; IUnknown(unknown).QueryInterface(IEnumVariant, enumUnk); // unknown.QueryInterface(IEnumVariant, enumUnk); //... du zu dieser kommst, findest du bestimmt hier im Forum... |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Zitat:
kaum zu glauben, aber ich habe tatsächlich ewig an der richtigen Lösung vorbei gecastet. :oops: Vielen Dank für die Verhinderung schlafloser Nächte und für den entscheidenden Hinweis. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Also irgendwie erhalte ich in der folgenden zeile einen Fehler:
Delphi-Quellcode:
OleCheck(enumUnk.Next( 1, objVar, @pFetched ));
Delphi-Quellcode:
Ich benutze D5 Prof.
[Fehler] MDIFrame.pas(2449): Undefinierter Bezeichner: 'Next'
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
Zitat:
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
also ich habs heute mit Delphi 5 getestet und der Code von oben fnuktioniert einwandfrei. (Einfach in ein neues Project kopiert und uses ComObj, ActiveX eingefügt) Kannst du mal die Deklaration der Variablen enumUnk prüfen? die sollte vom Typ IEnumUnknown sein. |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Zitat:
also ComObj und AktiveX stehen in den uses, enumUnk ist so deklariert:
Delphi-Quellcode:
trotzdem kommt der Fehler 'undefinierter Bezeichner: next'. :?: :(
enumUnk : IEnumUnknown;
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
also dann stimmt wohl irgendwas mit deiner ActiveX Unit nicht, bzw. IEnumUnknown ist noch irgendwo anners deklariert :gruebel: Wo springt Delphi hin, wenn du mit der Mause auf IEnumUnknown klickst und dabei [STRG] gedrückt hälst? Es sollte die Unit ActiveX aufgehen und der Cursor sollte an die Stelle springen:
Delphi-Quellcode:
Du könntest enumUnk auch mal so deklarieren:
{$EXTERNALSYM IEnumUnknown}
IEnumUnknown = interface(IUnknown) ['{00000100-0000-0000-C000-000000000046}'] function Next(celt: Longint; out elt; pceltFetched: PLongint): HResult; stdcall; function Skip(celt: Longint): HResult; stdcall; function Reset: HResult; stdcall; function Clone(out enm: IEnumUnknown): HResult; stdcall; end;
Delphi-Quellcode:
Ansonsten hab ich im Moment keine weiteren Ideen woran es liegen könnte...
enumUnk : ActiveX.IEnumUnknown;
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Zitat:
Danke! :-D |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Hallo,
Bei neueren Delphi versionen sollte noch in uses die Unit "Variants" aufgenommen werden, ansonsten findet er das "VarToStr" nicht ... Könnte jemand das auch noch in dem zugeordneten Beitrag von CalganX in der CodeLibrary ergänzen ? |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Hallo!
Gibt es einen Ersatz für "Longet". Weder Lazarus noch mein Turbo Delphi mögen "Longet". |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Meinst Du LongInt?
|
Re: Zugriff auf Sicherheitscenter von WinXP SP2
moin moin,
@gauggi: Wie ich dir schon per PN geschrieben habe, ich kann in meinem Quelltext kein Longet finden. Zeigt doch mal die Stelle wo du Probleme hast, ist ja evtl. nur nen typo... |
Re: Zugriff auf Sicherheitscenter von WinXP SP2
Unter Windows 7 scheint funktioniert das Auslesen leider nicht mehr :? Hat da jemand ne Idee? Ich vermute mal, da müssen nur ein Paar Strings angepasst werden.
|
AW: Zugriff auf Sicherheitscenter von WinXP SP2
Moin moin,
der Vollständigkeit halber und um die Frage zu beantworten hier die Lösung (besser spät als nie):
Delphi-Quellcode:
Unter Vista/Win7 funktioniert ebenfalls die Abfrage auf: AntiSpywareProduct (Siehe Kommentar)
uses {..,} ComObj, ActiveX;
procedure TForm1.Button1Click(Sender: TObject); var SWbem, SWbemCon, SWbemQuery, objVar : OleVariant; szWQL : String; pFetched : LongInt; unknown : IUnknown; enumUnk : IEnumUnknown; Counter : Integer; boIsWinXP: Boolean; const ARR_NAMESPACE : Array[False..True] of String = ('SecurityCenter2', //Vista/Win7 'SecurityCenter'); //WinXP procedure Display(szValue: String = ''; szData : String = ''); begin Form1.Canvas.TextOut(20 , Counter, szValue); Form1.Canvas.TextOut(200, Counter, szData ); inc(Counter, 17); end; begin boIsWinXP := False; //get win version Canvas.FillRect(Rect(0,0,form1.Width,form1.Height)); Counter := 20; CoInitialize(nil); try SWbem := CreateOleObject('WbemScripting.SWbemLocator'); // strServer, strNamespace, strUser, strPassword, strLocale, strAuthority, // iSecurityFlags, objwbemNamedValueSet SWbemCon := SWbem.ConnectServer('', 'root\'+ARR_NAMESPACE[boIsWinXP], '', '', ''); //szWQL := 'Select * from AntiSpywareProduct'; // not in WinXP szWQL := 'Select * from AntiVirusProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin if boIsWinXP then begin Display('companyName:' , VarToStr(objVar.companyName)); Display('displayName:' , VarToStr(objVar.displayName)); Display('enableOnAccessUIMd5Hash:' , VarToStr(objVar.enableOnAccessUIMd5Hash)); Display('enableOnAccessUIParameters:', VarToStr(objVar.enableOnAccessUIParameters)); Display('instanceGuid:' , VarToStr(objVar.instanceGuid)); Display('onAccessScanningEnabled:' , VarToStr(objVar.onAccessScanningEnabled)); Display('pathToEnableOnAccessUI:' , VarToStr(objVar.pathToEnableOnAccessUI)); Display('pathToUpdateUI:' , VarToStr(objVar.pathToUpdateUI)); Display('productUptoDate:' , VarToStr(objVar.productUptoDate)); Display('updateUIMd5Hash:' , VarToStr(objVar.updateUIMd5Hash)); Display('updateUIParameters:' , VarToStr(objVar.updateUIParameters)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else begin Display('displayName:' , VarToStr(objVar.displayName)); Display('instanceGuid:' , VarToStr(objVar.instanceGuid)); Display('pathToSignedProductExe:' , VarToStr(objVar.pathToSignedProductExe)); Display('pathToSignedReportingExe:' , VarToStr(objVar.pathToSignedReportingExe)); Display('productState:' , VarToStr(objVar.productState)); end; end else Display('No supported AV products found...'); Display('---------------------------------------------'); szWQL := 'Select * from FirewallProduct'; SWbemQuery := SWbemCon.ExecQuery(szWQL,'WQL', 48); unknown := SWbemQuery._NewEnum; unknown.QueryInterface(IEnumVariant, enumUnk); VarClear(objVar); OleCheck(enumUnk.Next( 1, objVar, @pFetched )); if (pFetched <> 0) then begin if boIsWinXP then begin Display('Company Name:' , VarToStr(objVar.companyName)); Display('Display Name:' , VarToStr(objVar.displayName)); Display('Enabled:' , VarToStr(objVar.enabled)); Display('enableUIParameters:', VarToStr(objVar.enableUIParameters)); Display('pathToEnableUI:' , VarToStr(objVar.pathToEnableUI)); Display('versionNumber:' , VarToStr(objVar.versionNumber)); end else begin Display('displayName:' , VarToStr(objVar.displayName)); Display('instanceGuid:' , VarToStr(objVar.instanceGuid)); Display('pathToSignedProductExe:' , VarToStr(objVar.pathToSignedProductExe)); Display('pathToSignedReportingExe:' , VarToStr(objVar.pathToSignedReportingExe)); Display('productState:' , VarToStr(objVar.productState)); end; end else Display('No supported FW products found...'); finally CoUnInitialize; end; end; Siehe auch: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz