![]() |
Anwendung für http herausfinden
hi,
Mit ![]() möchte ich die verknüpfte Anwendung für http herausfinden. Soweit habe ich diesen Code. Nur sAssociation gibt immer Nil zurück. An was könnte es liegen?
Delphi-Quellcode:
uses
ActiveX; const CLSID_ApplicationAssociationRegistration: TGUID = '{591209c7-767b-42b2-9fba-44ee4615f2c7}'; type ASSOCIATIONTYPE = (AT_FILEEXTENSION, AT_URLPROTOCOL, AT_STARTMENUCLIENT, AT_MIMETYPE); ASSOCIATIONLEVEL = (AL_MACHINE, AL_EFFECTIVE, AL_USER); IApplicationAssociationRegistration = interface(IUnknown) ['{4e530b0a-e611-4c77-a3ac-9031d022281b}'] function ClearUserAssociations: HRESULT; stdcall; function QueryAppIsDefault(pszQuery: PWideChar; atQueryType: ASSOCIATIONTYPE; alQueryLevel: ASSOCIATIONLEVEL; pszAppRegistryName: PWideChar; var pfDefault: BOOL): HRESULT; stdcall; function QueryAppIsDefaultAll(alQueryLevel: ASSOCIATIONLEVEL; pszAppRegistryName: PWideChar; var pfDefault: BOOL): HRESULT; stdcall; function QueryCurrentDefault(pszQuery: PWideChar; atQueryType: ASSOCIATIONTYPE; alQueryLevel: ASSOCIATIONLEVEL; var ppszAssociation: PWideChar): HRESULT; stdcall; function SetAppAsDefault(pszAppRegistryName: PWideChar; pszSet: PWideChar; atSetType: ASSOCIATIONTYPE): HRESULT; stdcall; function SetAppAsDefaultAll(pszAppRegistryName: PWideChar): HRESULT; stdcall; end; procedure TForm1.FormCreate(Sender: TObject); var pAAR: IApplicationAssociationRegistration; sAssociation: PWideChar; Res : HRESULT; begin Res := CoCreateInstance(CLSID_ApplicationAssociationRegistration, nil, CLSCTX_INPROC, IApplicationAssociationRegistration, pAAR); if SUCCEEDED(Res) then begin pAAR.QueryCurrentDefault('http', AT_URLPROTOCOL, AL_EFFECTIVE, sAssociation); ShowMessage(sAssociation); end; end; |
Re: Anwendung für http herausfinden
verstehe ich dich richtig du willst wissen welcher der default browser ist?
wenn ja schau mal hier ![]() gruss daniel m. |
Re: Anwendung für http herausfinden
die dort aufgezeigte Lösung ist aber recht unschön. Zumindest finde ich es recht unelegant erst eine Datei anzulegen die man dann wieder löschen will wenn es auch anders geht.
Ich würde vermuten das es am fehlerhaften Aufruf von pAAR.QueryCurrentDefault liegt. Dort wird derzeit un ininitialisierter Pointer rein gereicht. Wenn die Funktionen wie die meisten anderen Api-Funktionen arbeitet wird dort ein Pointer auf einen gültigen Speicherbereich erwartet. Ich würde einfach mal den Pointer mit einem bestimmten Wert initialisieren und wenn der Pointer danach nicht auf 0 geändert wurde ist es definitiv so das dort ein Pointer auf einen gültigen Bereich erwartet wird. Oder nochmal in die Doku schauen und vor allem den Fehlercode abfragen. |
Re: Anwendung für http herausfinden
Was spricht dagegen den Standard-Browser aus der Registry auszulesen?
HKEY_CLASSES_ROOT\http\shell\open\command |
Re: Anwendung für http herausfinden
dagegen spricht das sich der Registryzweig zwischen den Windowsversionen ändern kann. Zudem ist der von dir angegebene Pfad auch nicht DER richtige. Denn jeder Nutzer kann einen eigenen Standardbrowser haben ohne dazu Adminrechte haben zu müssen und für alle anderen den Standardbrowser mit zu verstellen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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