Zamknięcie komunikatu MessageBox

0

Mam w programiku pewien wątek, który jest wyzwalany z Timera lub manualnie z przycisku. Jeśli ową procedurę uruchomi się z przycisku pojawia się komunikat informujący użytkownika co ma wykonać by wątek wykonała swoją pracę. Chodzi o to, żeby w opcji automatycznego uruchamiania owego wątku zamknąć okno komunikatu Application.MessageBox jeśli został on wywołany manualnie spod przycisku.

Jeśli ktoś wie jak zamknąć okno komunikatu Application.MessageBox prosze o informację

0

Spróbuj tak:

var
  hWnd: THandle;
begin
  hWnd:= 0; //zaczynamy od początku (czyli od pulpitu)
  hWnd:= FindWindowEx(hWnd, 0, '#32770', nil); //czy jest jakieś okno dialogowe
  while (hWnd <> 0) do
  begin
    if GetParent(hWnd) = Application.Handle then //czy to MessageBox tej aplikacji 
    begin
      SendMessage(hWnd, WM_CLOSE, 0, 0); //jeżeli tak to go zamknij
      break; //przerwij pętlę
    end;
    hWnd:= FindWindowEx(hWnd, 0, '#32770', nil); //szukamy dalej
  end;
end;
0

Dziękuję za szybką odpowiedź na moją prośbe. Niestety podana procedurka, wywołana spod Timerka, która uruchamia dalszy ciąg kodu i zdarzeń nie zamyka wyswietlonego już komunikatu MessageBox :(

0

...
hWnd:= FindWindowEx(hWnd, 0, '#32770', nil); //szukamy dalej

nic dziwnego ze nie dziala, bo to szuka messageboxa wewnatrz messageboxa :)

podpowiem, GetWindow(0,GW_HWNDFIRST), a potem GW_HWNDNEXT

0
nav napisał(a)

...
hWnd:= FindWindowEx(hWnd, 0, '#32770', nil); //szukamy dalej

nic dziwnego ze nie dziala, bo to szuka messageboxa wewnatrz messageboxa :)

podpowiem, GetWindow(0,GW_HWNDFIRST), a potem GW_HWNDNEXT

No tak cos mi sie pomieszało :-/ Ale pętla jest potrzebna tylko gdy w tym momencie wyświetlone jest więcej okien komunikatów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1