在外部应用程序中执行上下文菜单命令

Execute Context Menu Command in External Application

我正在尝试编写一个应用程序,它可以 select 外部应用程序中文本框中的所有文本,将其复制到剪贴板,以编程方式对字符串执行更改,然后将修改后的字符串发送回外用。我没有编写外部应用程序,无法访问其代码,也无力联系开发人员并让他们进行更改。外部应用程序是基于客户端-服务器的,我只能与客户端的用户界面进行交互。

我遇到的问题 运行 是我可以轻松地向应用程序发送键盘命令以发送或删除文本,但我不能 select 所有文本。使用键盘快捷键 Ctrl-A、Ctrl-Shift-Home、Ctrl-Shift-End 等不起作用。三击文本框也不起作用。

但是,我可以右键单击文本框并调出上下文菜单,然后 select 命令 "Select All"。我想知道是否有一种方法可以在不显示上下文菜单的情况下将上下文菜单命令发送到应用程序。

我希望这两个应用程序在用户看来尽可能无缝地工作。有人有任何可行的建议吗?

回答您的具体问题:

I am wondering if there is a way to send the context menu command to the application without having to have the context menu appear.

单击菜单项时,它会向菜单的父级 window 发出 WM_COMMAND 消息。您可以使用像 Spy++ 这样的工具来监视此类消息并查看哪个命令 ID 被发送到哪个 window,然后您可以编写您的应用程序以将相同的消息直接发送到相同的 window。无需显示实际菜单本身。

但是,在这种特殊情况下,这有点过分了。如果您拥有所需编辑控件的 HWND,则可以将其 WM_GETTEXTWM_SETTEXT 消息发送给它,或者使用 .NET 的 UIAutomation 接口直接发送到 get/set 控件的文本。无论哪种方式,都不需要 select 文本(您可以为此使用 EM_SETSEL)或涉及剪贴板。