【问题标题】:GUITHREADINFO::flags are always zeroGUITHREADINFO::flags 总是为零
【发布时间】:2017-05-14 03:40:37
【问题描述】:

我正在尝试检测是否为主窗口打开了菜单, 类似:

GUITHREADINFO gtinf = { sizeof(GUITHREADINFO) };

GetGUIThreadInfo(0, &gtinf);
if (gtinf.flags & GUI_INMENUMODE || gtinf.flags & GUI_POPUPMENUMODE)
{
    //...
}

gtinf.flags 始终为零,即使菜单明显打开。 只有 hwndActivehwndFocus 设置正确。 有什么问题?

【问题讨论】:

  • 如果您正在查找特定线程的信息,请不要将0 作为 idThread 参数传递。假设您要检索调用线程的信息,请改为传递 GetCurrentThreadId 的返回值。
  • @IInspectable 文档中没有任何内容表明必须使用特定的线程 ID 来填充标志。传递 0 只是检索有关前台线程的信息,因此如果要返回任何标志,仍应填充标志。
  • @olpchk 你确定函数实际上返回非零吗?前台应用是否使用标准菜单?
  • @RemyLebeau:当然可以通过将0 传递给idThread 参数来查询有关前台线程的GUI 线程信息。但是,OP 正在询问 “主窗口”,即特定线程(可能是也可能不是前台线程)。在这里传递0 是一个错误。
  • 原来app使用非标准机制来显示菜单,因此gui线程不知道。谢谢大家

标签: c user-interface winapi


【解决方案1】:

原来应用程序使用非标准机制来显示菜单,因此 gui 线程不知道。 – olpchk

【讨论】:

    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多