Mam problem, gdyz nie wiem jak moge programowo zamknąć okno w windows (aktywne - ostatnio otwarte). Prosze o pomoc (najprostrze rozwiazanie) jestem bezradny. Musze pobrac handle okna?
pozdrawiam LochNess
Mam problem, gdyz nie wiem jak moge programowo zamknąć okno w windows (aktywne - ostatnio otwarte). Prosze o pomoc (najprostrze rozwiazanie) jestem bezradny. Musze pobrac handle okna?
pozdrawiam LochNess
musisz pobrac.
sendmessage(getactivewindow(),WM_QUIT,0,0);
GetActiveWindow zwraca uchwyt aktywnego okna utworzonego przez wątek wywołujący tę funkcję. Wywołując: sendmessage(getactivewindow,WM_QUIT,0,0); zamkniesz okno Twojego programu, a jeśli aktywne było okno główne - zamkniesz program.
Natomiast funkcja GetForegroundWindow zwraca uchwyt okna aktywnego w ogóle (okno, w którym użytkownik w danej chwili pracuje).
Niekiedy WM_QUIT nie wystarcza. Wówczas można dodatkowo wysłać WM_CLOSE, WM_DESTROY. Niekiedy i to nie wystarcza. W takiej sytuacji można próbować zakończyć cały proces, który utworzył dane okno (TerminateProcess).
procedure CloseForeWindow;
var
h: HWND;
begin
h := GetForegroundWindow;
if h <> 0 then
begin
SendMessage(h, WM_CLOSE, 0, 0);
if IsWindow(h) then
SendMessage(h, WM_QUIT, 0, 0);
if IsWindow(h) then
SendMessage(h, WM_DESTROY, 0, 0);
end;
end;
Dziekuje za pomoc.