识别活动的 iup 对话框

Identifying active iup dialog

我正在编写一个 lua 程序,它需要调用外部弹出窗口(我们称之为 Poppy),该弹出窗口由另一个活动程序(环境为 Windows 作为外部 library/API 提供).

波比有一个坏习惯;当被调用时,它会弹出,完成它的工作然后消失——留下当前的 Lua 对话框隐藏在 Poppy 的父程序后面。

调用 Poppy 后,dlg.BRINGFRONT="YES" 会将 iup 对话框 dlg 置于最前面。

是否有一种技术可以确定 dlg 应该是什么——即在调用外部 API 之前最顶层的 iup 对话框是什么?

我已经阅读了 iup 文档,但找不到执行此操作的方法。但是,由于我需要在大量实例中调用 Poppy,因此我想简化将当前对话框置于最前面的过程。

我这样调用 Poppy:

local res = Poppy('INDI')
dlg.BRINGFRONT="YES"
return res

在 Windows 中调用 Poppy 的代码中,您可以调用:

HWND dlg_handle = GetActiveWindow();

然后当Poppyreturns,调用:

SetForegroundWindow(dlg_handle);

我已经使用 Winapi library 和以下代码成功地做到了这一点:

winapi = require ("winapi")
currentwin = winapi.get_foreground_window()
--invoke Poppy here and wait for control to return
currentwin:set_foreground()