
一、GetLastActivePopup 函数详解
函数基本信息
GetLastActivePopup 是一个 Windows API 函数,声明在 Windows.pas 单元中。
函数原型
pascal
function GetLastActivePopup(hWnd: HWND): HWND; stdcall;
主要作用
该函数用于获取指定窗口所属应用程序中最后一个活动的弹出窗口句柄。
参数说明
- hWnd: 主窗口句柄,函数将搜索该窗口的所有弹出窗口
返回值
- 返回最后一个活动的弹出窗口句柄
- 如果没有弹出窗口或发生错误,返回
0
工作原理
- 搜索指定窗口的所有弹出窗口(包括模态对话框、菜单等)
- 识别其中最后一个被激活的窗口
- 返回该窗口的句柄
典型使用场景
1. 检查应用程序是否有打开的对话框
pascal
var
hPopup: HWND;
begin
hPopup := GetLastActivePopup(Application.MainForm.Handle);
if hPopup <> 0 then
begin
ShowMessage('应用程序有打开的对话框');
// 可以在这里激活或关闭该对话框
SetForegroundWindow(hPopup);
end;
end;
2. 应用程序激活时的处理
pascal
procedure TMainForm.FormActivate(Sender: TObject);
var
hPopup: HWND;
begin
hPopup := GetLastActivePopup(Handle);
// 如果有弹出窗口,激活它
if hPopup <> 0 then
begin
SetForegroundWindow(hPopup);
end;
end;
3. 关闭应用程序前的清理
pascal
function TMainForm.CloseQuery: Boolean;
var
hPopup: HWND;
begin
Result := True;
hPopup := GetLastActivePopup(Handle);
if hPopup <> 0 then
begin
// 关闭所有弹出窗口
SendMessage(hPopup, WM_CLOSE, 0, 0);
// 等待窗口关闭
Sleep(100);
end;
end;
注意事项
- 弹出窗口定义:包括对话框、消息框、菜单、下拉列表等
- 窗口层级:只搜索指定窗口的直接弹出窗口,不包括子窗口
- 线程安全:该函数是线程安全的
- 跨平台:仅适用于 Windows 平台
与其他函数的区别
| 函数 | 作用 |
|---|---|
GetLastActivePopup | 获取最后活动的弹出窗口 |
GetForegroundWindow | 获取当前前台窗口 |
GetActiveWindow | 获取调用线程的活动窗口 |
EnumWindows | 枚举所有顶层窗口 |
闪烁任务栏替代方案
pascal
procedure FlashTaskbar(hWnd: HWND);
begin
FlashWindow(hWnd, True);
end;

1116

被折叠的 条评论
为什么被折叠?



