我的应用程序中有线程,该线程在创建该事件的每个事件中在另一个应用程序中显示标题为“ Test”的消息框,在此线程结束时,我想关闭所有这些消息。
我试图创建这样的循环
while FindWindow(Nil,PChar('Test')) <> 0 do
begin
Sleep(5); //if i remove the sleep the application will hanging and froze.
SendMessage(FindWindow(Nil,PChar('Test')), WM_CLOSE, 0, 0); // close the window message
end;
但是此循环仅在我手动关闭最后一条消息时有效
注意:消息框来自另一个应用程序,而不是在同一应用程序中具有此线程。
最佳答案
尝试以下方法:
var
Wnd: HWND;
begin
Wnd := FindWindow(Nil, 'Test');
while Wnd <> 0 do
begin
PostMessage(Wnd, WM_CLOSE, 0, 0);
Wnd := FindWindowEx(0, Wnd, Nil, 'Test');
end;
end;
要么:
function CloseTestWnd(Wnd: HWND; Param: LPARAM): BOOL; stdcall;
var
szText: array[0..5] of Char;
begin
if GetWindowText(Wnd, szText, Length(szText)) > 0 then
if StrComp(szText, 'Test') = 0 then
PostMessage(Wnd, WM_CLOSE, 0, 0);
Result := True;
end;
begin
EnumWindows(@CloseTestWnd, 0);
end;
关于delphi - 如何关闭所有具有相同标题的窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25420731/