我正在尝试编写一个应用程序,可以选择外部应用程序中文本框中的所有文本,将其复制到剪贴板,以编程方式对字符串执行更改,然后将修改后的字符串发送回外部应用程序。我没有编写外部应用程序,也没有访问其代码,也无法与开发人员联系并让他们进行更改。外部应用程序基于客户端 - 服务器,我只能与客户端的用户界面进行交互。
我遇到的问题是我可以轻松地将键盘命令发送到应用程序以发送或删除文本,但我无法选择所有文本。使用键盘快捷键Ctrl-A,Ctrl-Shift-Home,Ctrl-Shift-End等不起作用。三次单击文本框也不起作用。
但是,我可以右键单击文本框并弹出上下文菜单,然后选择“全选”命令。我想知道是否有办法将上下文菜单命令发送到应用程序而不必显示上下文菜单。
我希望这两个应用程序看起来尽可能无缝地与用户一起工作。有没有人有任何可行的建议?
答案 0 :(得分:1)
回答您的具体问题:
我想知道是否有办法将上下文菜单命令发送到应用程序而不必显示上下文菜单。
单击菜单项时,它会向菜单的父窗口发出WM_COMMAND
消息。您可以使用Spy ++之类的工具来监视此类消息,并查看将哪个命令ID发送到哪个窗口,然后您可以编写应用程序以将相同的消息直接发送到同一窗口。无需显示实际菜单本身。
然而,在这种特殊情况下,这是过度的。如果您拥有所需编辑控件的HWND,则可以发送WM_GETTEXT
和WM_SETTEXT
消息,或者使用.NET的UIAutomation接口来获取/设置控件。直接发短信。无论哪种方式,都不需要选择文本(您可以使用EM_SETSEL
)或涉及剪贴板。