【发布时间】:2017-05-14 03:40:37
【问题描述】:
我正在尝试检测是否为主窗口打开了菜单, 类似:
GUITHREADINFO gtinf = { sizeof(GUITHREADINFO) };
GetGUIThreadInfo(0, >inf);
if (gtinf.flags & GUI_INMENUMODE || gtinf.flags & GUI_POPUPMENUMODE)
{
//...
}
但 gtinf.flags 始终为零,即使菜单明显打开。 只有 hwndActive 和 hwndFocus 设置正确。 有什么问题?
【问题讨论】:
-
如果您正在查找特定线程的信息,请不要将
0作为 idThread 参数传递。假设您要检索调用线程的信息,请改为传递 GetCurrentThreadId 的返回值。 -
@IInspectable 文档中没有任何内容表明必须使用特定的线程 ID 来填充标志。传递 0 只是检索有关前台线程的信息,因此如果要返回任何标志,仍应填充标志。
-
@olpchk 你确定函数实际上返回非零吗?前台应用是否使用标准菜单?
-
@RemyLebeau:当然可以通过将
0传递给idThread 参数来查询有关前台线程的GUI 线程信息。但是,OP 正在询问 “主窗口”,即特定线程(可能是也可能不是前台线程)。在这里传递0是一个错误。 -
原来app使用非标准机制来显示菜单,因此gui线程不知道。谢谢大家
标签: c user-interface winapi