我有一些代码可以使用User32.SendMessage和TB_GETBUTTON消息从Windows任务栏中获取任务栏按钮及其文本的TBBUTTON结构(通过C# P/Invokes调用Win32 API)。但我正在尝试找出如何在获得按钮句柄后,抓取相关联的上下文菜单文本。有一些特定应用程序的状态信息在那里,我想要检索它。按钮文本可以帮助我获得其中一些内容,但我需要上下文菜单文本来完成它。
有什么想法吗?
有什么想法吗?
EnumWindows
函数。GetWindowLong
和GWL_EXSTYLE
检查扩展窗口样式,看看是否设置了WS_EX_APPWINDOW
位。这些窗口中的每一个都是应该显示在任务栏、Alt-Tab对话框等地方的窗口。
你说你正在获取任务栏按钮的文本 - 这可能是窗口的标题,而GetWindowText
是从另一个进程中获取窗口标题的规范(即:可能更可靠)的方法。
如果你真的想要弹出菜单,那么:
GetSystemMenu
获取窗口的系统菜单句柄。应用程序可以自定义此内容,因此如果您的应用程序正在这样做(这就是您想要弹出菜单的原因),请确保将false
传递给bRevert
参数。然后,您可以使用GetMenuItemCount
获取菜单项数目,并为每个菜单项调用GetMenuItemInfo
以获取有关每个菜单项的信息。将true
传递给fByPosition
参数,表示您正在按位置访问菜单(因为您知道计数,所以您获取的是项目0、1、2...计数-1)。
MENUITEMINFO
结构,该结构(我认为,我从未编写过此代码,因此我没有进行过测试)将通过fMask
成员中设置了MIIM_STRING
标志的dwTypeData
字段“告诉您与项目相关联的文本”。如果您真的想要有关窗口状态的信息,则可以使用诸如IsIconic
之类的方法查看它是否已最小化,再次使用GetWindowLong
获取其他信息等。我建议您就如何获取有关窗口的任何特定信息提出另一个SO问题以获取详细信息。
希望这可以帮助!