Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Anwendung für http herausfinden (https://www.delphipraxis.net/137645-anwendung-fuer-http-herausfinden.html)

API 25. Jul 2009 07:21


Anwendung für http herausfinden
 
hi,

Mit IApplicationAssociationRegistration.QueryCurrentDe fault
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;

dmagin 25. Jul 2009 09:18

Re: Anwendung für http herausfinden
 
verstehe ich dich richtig du willst wissen welcher der default browser ist?

wenn ja schau mal hier

http://edn.embarcadero.com/article/26083

gruss daniel m.

SirThornberry 25. Jul 2009 11:05

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.

Andreas L. 25. Jul 2009 11:12

Re: Anwendung für http herausfinden
 
Was spricht dagegen den Standard-Browser aus der Registry auszulesen?

HKEY_CLASSES_ROOT\http\shell\open\command

SirThornberry 25. Jul 2009 11:31

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 18:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz