Co chcę zrobić, to sprawdzić, czy moja aplikacja ma fokus, ponieważ jeśli tak nie jest, wyskoczy okienko alertu tuż nad obszarem powiadomień, aby wyświetlić komunikat do użytkownika końcowego.Jak mogę sprawdzić, czy moja aplikacja jest aktywna?
Odpowiedz
Zadzwoń pod Windows.GetForegroundWindow()
, a następnie przekaż HWND
do funkcji Controls.FindControl()
. Zwróci wskaźnik zerowy TWinControl
, jeśli HWND
należy do twojego procesu. Na przykład:
if FindControl(GetForegroundWindow()) <> nil then
// has focus ...
else
// does not have focus ...
Jeśli aplikacja składa się z jednego formularza, a następnie
GetForegroundWindow = Handle
wystarczy. Powyższe wyrażenie jest prawdziwe wtedy i tylko wtedy, gdy formularz jest oknem pierwszego planu, tzn. Jeśli fokus klawiatury należy do formantu w tym formularzu (lub do samego formularza).
Jeśli aplikacja składa się z kilku formularzy, po prostu przeprowadź przez nie pętle i sprawdź, czy któryś z nich pasuje do GetForegroundWindow
.
Nieznaczne odchylenie od odpowiedzi Remys jest:
Var
Win: TWinControl;
Begin
Win := FindControl(GetForegroundWindow);
if Win <> nil then
// StringGrid1.Row :=5;
// StringGrid1.SetFocus;
skompilowany dla mnie ok, ale okazało się to niewiarygodne podczas debugowania The stringgrid.setfocus nazywa nawet gdy okno ISN” t focused, powodując błąd.
D2007 ma tę właściwość przydatnych
if Application.Active then
//