![]() |
Focus auf externen prozess setzen
wie der name bereits andeuten lässt, würde ich gerne in meiner applikation einer anderen den fokus/die eingabe geben und frage mich ob es so richtig ist bzw wie es richtig gemacht wird.
hier ist mein momentaner code
Delphi-Quellcode:
function Foobar(const TargetWindow: HWND = 0): Boolean;
var OldFocus: HWND; TargetThreadID: Cardinal; begin Result := False; OldFocus := GetFocus; if (TargetWindow = 0) then Exit; TargetThreadID := GetWindowThreadProcessId(TargetWindow, nil); AttachThreadInput(GetCurrentThreadId, TargetThreadID, True); SetFocus(TargetThreadID); // hier wird mehr code ausgeführt während der andere prozess den fokus hat Result := (SetFocus(OldFocus) <> 0); end; |
AW: Focus auf externen prozess setzen
Zitat:
ThreadID (nichtmal ein ThreadHandle) <> WindowHandle Wieso kommt niemand auf die Idee mal die absolut irrsinnige Idee die Rückgabewerte zu prüfen, wenn er wissen will, ob was ging, bzw. richtig war? Falls das Letzte
Delphi-Quellcode:
erfolgreich wäre, dann war alles vorher sinnlos.
SetFocus(OldFocus)
Wenn, dann eher so
Delphi-Quellcode:
.
Result := GetFocus = TargetWindow;
Und man könnte auch mal die Hilfe lesen? Zitat:
Dein Programm hat aktuell (vor Aufruf) den Fokus? Wenn nicht, dann wird's eh nichts. (außer du nutzt noch ein XP oder älter)
Delphi-Quellcode:
procedure Foobar(TargetWindow: HWND = 0);
var TargetThreadID: Cardinal; begin if TargetWindow = 0 then raise Exception.Create('Foobar: invalid HWND'): //Exit(False); TargetThreadID := GetWindowThreadProcessId(TargetWindow, nil); if not AttachThreadInput(GetCurrentThreadId, TargetThreadID, True) then RaiseLastOSError; if SetFocus(TargetWindow) = 0 then RaiseLastOSError; end; Ich würde es ja eher mit SetForegroundWindow oder SetActiveWindow/GetActiveWindow und eventuell noch BringWindowToTop versuchen. |
AW: Focus auf externen prozess setzen
Ja das mit SetFocus() da hatte ich vorschnell getippt, bei mir war es bereits kurz nachdem ich es gepostet hatte gefixed.
Vielen Dank das Du Dir die Zeit genommen hast. Ich werde nun alles nochmal durchlesen und mich bessern! Ja, mein Programm hat zu beginn den Fokus, man muss einen Knopf drücken dann soll eine andere Anwendung den Fokus erhalten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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