Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi URL an IE senden der mittels shellexecute erzeugt wurde (https://www.delphipraxis.net/60644-url-ie-senden-der-mittels-shellexecute-erzeugt-wurde.html)

delphilevi 10. Jan 2006 14:45


URL an IE senden der mittels shellexecute erzeugt wurde
 
Moin,

ich benutze Delphi um eine IE-Anwendung zu starten. Leider kann die IE-Anwendung schon laufen und ich muß bestehende IE-Instanzen mit einer Logout-URL versorgen bevor ich die Anwendung starte.
Die abgewandelten sourcen aus dsdt ergeben eine Exception in der Zeile if (Pos ...

Geht das wie hier beschrieben oder ist ein api-call mit sendmessage an das ie-Handle sinnvoll - falls
ja wie sieht dieser aufruf aus ?

danke für die mühen

Delphi-Quellcode:
// ermittle ob eine ziel_url geoeffnet ist
procedure URL(const ziel_url: string);
  function EnumWindowsProc (Wnd: HWND; const liste: TStringList): BOOL; stdcall;
  var
    theClassname: array [0..128] of Char;
    //caption: Array [0..128] of Char;
    IE: IWebbrowser2;
    WndChild: HWND;
    a, b, c, d    : OleVariant;
  begin
    Result := True;
    Windows.GetClassname( Wnd, theClassname, Sizeof( theclassname ));
    if theClassname='IEFrame' then
    begin
      WndChild := FindWindowEX(Wnd, 0, 'Shell DocObject View', nil);
      if WndChild <> 0 then
      begin
        WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);
        if WndChild <> 0 then
        begin
          if GetIEFromHWND(WndChild, IE)=S_OK then begin
            if IE<>nil then begin
              if (Pos(ziel_url,IE.LocationURL)>0) then begin;
                IE.Navigate(HOST + LOGOUT + '?logout=yes',a,b,c,d);
              end;
            end;
          end;
        end;
      end;
    end;
  end;
begin
  EnumWindows(@EnumWindowsProc, integer(liste));
end;

delphilevi 12. Jan 2006 13:03

Re: URL an IE senden der mittels shellexecute erzeugt wurde
 
hmm so geht's schon fast,

das ergebnis findet sich bei gründlicher suche in delphi + c++ foren :)
der fenstertitel ist die ie-instanz, die ich mit einer neuen url versorgen moechte
dank an thomas stutz
findcontrolbynumber funzt merkwuerdigerweise nicht daher der umweg ueber findwindowex

der code schreibt die url in die url-leiste aber die return-tasten-simulation
Delphi-Quellcode:
 
SendMessage(hadr, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(hadr, WM_KEYUP, VK_RETURN, 0);
mag nicht ... kann mir jemand sagen warum oder den goldenen link senden :-D




Delphi-Quellcode:
function sende_url(const Fenster_Titel:string; const logout_url : string): boolean;
var Whandle,child,ctl,
    hadr : HWND;
begin
  sende_url := false;
  Whandle:=FindWindowbyTitle(Fenster_Titel);
  if Whandle=0 then exit
  else begin
    child := FindWindowEx(Whandle,0,'WorkerW',0);
    if child = 0 then exit
    else begin
     ctl := FindWindowEx(child,0,'ReBarWindow32',0);
     if ctl = 0 then exit
     else begin
      hadr := FindWindowEx(ctl,0,'ComboBoxEx32',0);
      if hadr = 0 then exit
      else begin
        SendMessage(hadr, WM_SETTEXT, 0, Integer(PChar(logout_url)));
        SendMessage(hadr, WM_KEYDOWN, VK_RETURN, 0);
        SendMessage(hadr, WM_KEYUP, VK_RETURN, 0);
        sende_url := true;
        exit;
      end;
     end;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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