Einzelnen Beitrag anzeigen

Markus Effenberger

Registriert seit: 2. Jul 2014
44 Beiträge
 
Delphi 10.3 Rio
 
#1

Fremdes Fenster in den Vordergrund bringen in Windows 10

  Alt 7. Aug 2017, 09:23
Guten Morgen zusammen!

Komme gerade bei einem kleinen "Phänomen" nicht weiter Vielleicht weiß ja jemand von Euch eine Lösung? In diesem Fall wird leider noch Delphi 7 benutzt.

Und zwar soll ein Fenster einer Fremdanwendung (in meinem Fall ein Browser-Tab) in den Vordergrund gebracht werden. Dafür gab's ursprünglich den Befehl SetForegroundWindow. Dieser funktionierte ab Windows 7 nicht mehr. Deshalb gab es dann eine "Überarbeitung", mit der es für Windows 7 wieder funktionierte. Nun ist mir aufgefallen, dass dieser Code aber ab Windows 10 wieder nicht funktioniert.

Frage: Weiß jemand, was man abändern muss, damit der Code ein Fremdfenster (z.B. ein Browsertab) unter Windows 10 in den Vordergrund bringen kann?

Delphi-Quellcode:
procedure SetForegroundWindowEx(Wnd: HWND);
var
       Attached: Boolean;
       ThreadId: DWORD;
       FgWindow: HWND;
       AttachTo: DWORD;
begin
    Attached := False;
    ThreadId := GetCurrentThreadId;
    FgWindow := GetForegroundWindow();
    AttachTo := GetWindowThreadProcessId(FgWindow, nil);
   if (AttachTo <> 0) and (AttachTo <> ThreadId) then
    if AttachThreadInput(ThreadId, AttachTo, True) then
       begin
         Attached := Windows.SetFocus(Wnd) <> 0;
         AttachThreadInput(ThreadId, AttachTo, False);
       end;
   if not Attached then
      begin
          SetForegroundWindow(Wnd);
          SetFocus(Wnd);
      end;
end; // von setforegroundWindowEx

//Aufruf mit:
SetForegroundWindowEx(Handle);
Als Handle übergebe ich in diesem Fall immer das Handle des Browser-Tabs. Das führt dann dazu, dass man zwischen Tabs "hin- und herspringen" kann, um dem Benutzer z.B. etwas vorzuführen, wobei man verschiedene Tabs braucht. - Unter Windows 10 funktioniert der Code leider nicht mehr


Markus
  Mit Zitat antworten Zitat