如何以编程方式选择另一个应用程序中的上下文菜单项?

时间:2009-05-06 01:26:41

标签: delphi winapi contextmenu messages sendmessage

目标应用程序是用Delphi编写的(win32而不是.NET)并且是封闭源代码。

我想调用的动作叫做Copy,但是没有明显的键盘快捷键。 (Ctrl + Insert执行错误,Ctrl + C不执行任何操作)

我可以找到我的目标HWND并说服它打开上下文菜单(它响应WM_RBUTTONDOWN/UP而不是WM_CONTEXTMENU)。从菜单HWND我甚至可以通过MN_GETHMENU获取菜单句柄,找到我想要的菜单项。我只是不知道如何“选择”该项目的细节。菜单是“无模式”的,即无效。它的HWND不属于我,所以我不知道哪个隐藏的TPUtilWindow窗口是真正的所有者 - 否则我可能只是发送一个WM_COMMAND而不是弹出菜单,这将是更好的。

虽然我确信它可以促进各种各样的黑客攻击,但我不希望将代码注入目标进程。

接受任何语言的答案。

1 个答案:

答案 0 :(得分:8)

显然,您可以发送WM_RBUTTONDOWN/UP消息,然后它会响应。如果是,您还可以发送WM_KEYDOWN/UP条消息吗?只要您知道菜单的结构并且它没有改变,请尝试告诉应用程序有人按下向下箭头X次,然后按ENTER键。这对我来说似乎是最简单的解决方案......