Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anderem Program den Fokus übergeben (https://www.delphipraxis.net/196997-anderem-program-den-fokus-uebergeben.html)

EWeiss 8. Jul 2018 04:24

AW: Anderem Program den Fokus übergeben
 
Ohne gewähr..
Nur getippt nicht getestet.

Delphi-Quellcode:
function GetFocusHandle: HWND;
var
  ForegroundHandle: HWND;
  PID: DWord;
  myThreadID: DWord;
begin

  // Meine ThreadID
  myThreadID := GetCurrentThreadId;
  // Hole das Handle vom Top Level Vordergrund Window
  ForegroundHandle := GetForegroundWindow;
  // Process ID vom Vordergrund Window einlesen
  PID := GetWindowThreadProcessId(ForegroundHandle, nil);
  // diesen Thread und den fremden Thread zusammen fügen
  AttachThreadInput(myThreadID, PID, true);
  // Das Focus Handle
  Result := GetFocus;
  // Threads von einander trennen in dem ich beim dritten wert false übergebe
  AttachThreadInput(myThreadID, PID, false);
end;
man könnte das ganze jetzt noch in einem Loop packen..

Delphi-Quellcode:
  doloop := not doloop;
  repeat
    FocusHwnd := GetFocusHandle;
    application.ProcessMessages;
    Label1.Caption := IntToStr(FocusHwnd);
    Sleep(10)
  until doloop = false;
Nun solltest du mit SetFocus(FocusHwnd) den alten Stand wieder zurück setzen können.
Du kannst aber auch eine Procedure erstellen und verwendest dann anstelle von
Delphi-Quellcode:
Result := GetFocus;

Delphi-Quellcode:
SetForegroundWindow(ForegroundHandle);


Es muss sich aber innerhalb der beiden AttachThreadInputs befinden.
Wenn es jetzt fehlschlägt als Beispiel bei Windows Explorer Ordnern dann kannst du das Parent ermitteln um an das Fensterhandle zu kommen.
Denn hier wird der Focus immer auf das DirectUIHWND gesetzt ist zumindest bei Win7 so.

Bin jetzt aber wirklich raus!
Muss an meinem transparenten TabControl weiterarbeiten. ;)

gruss

rinolduz 11. Jul 2018 18:35

AW: Anderem Program den Fokus übergeben
 
Danke ersteinmal für die ganzen Antworten!

Habe es inzwischen mit
Code:
GetWindowThreadProcessId
hinbekommen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 Uhr.
Seite 2 von 2     12   

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