2015-04-24 117 views
0

我想寫一個應用程序,可以選擇外部應用程序中的文本框中的所有文本,將其複製到剪貼板,以編程方式執行更改到字符串,然後發送修改過的字符串返回到外部應用程序。我沒有編寫外部應用程序,也無法訪問其代碼,也無法聯繫開發人員並讓他們進行更改。外部應用程序是基於客戶端 - 服務器的,我只能與客戶端的用戶界面交互。在外部應用程序執行上下文菜單命令

我遇到的問題是,我可以輕鬆地將鍵盤命令發送到應用程序以發送或刪除文本,但我無法選擇所有文本。使用鍵盤快捷鍵Ctrl-A,Ctrl-Shift-Home,Ctrl-Shift-End等不起作用。三次點擊文本框也不起作用。

但是,我可以右鍵單擊文本框並調出上下文菜單,然後選擇命令「全選」。我想知道是否有辦法將上下文菜單命令發送到應用程序,而不必顯示上下文菜單。

我希望這兩個應用程序看起來像用戶一樣儘可能無縫地工作。有沒有人有任何可能的工作建議?

+0

你正在努力。如果要自動化UI,請使用[UI自動化](https://msdn.microsoft.com/zh-cn/library/ms747327.aspx)。 – IInspectable

+0

我一定會考慮的!我沒有看到我的谷歌搜索中提到的這個類。一旦我有機會惹惱它,我會再次迴應。謝謝! –

+0

UI自動化對於簡單的任務可能會過度。您也可以使用「WM_GETTEXT」和「WM_SETTEXT」消息。無論哪種方式,都不需要涉及剪貼板,因此在取回文本之前不需要選擇文本(您可以使用'EM_SETSEL')。 –

回答

0

爲了回答您的具體問題:

我想知道是否有發送快捷菜單命令的應用程序,而無需具備上下文菜單中顯示的方式。

當單擊菜單項時,它會向菜單的父窗口發出WM_COMMAND消息。您可以使用像Spy ++這樣的工具來監視這些消息,並查看哪個命令ID被髮送到哪個窗口,然後您可以編寫應用程序將相同的消息直接發送到同一個窗口。無需顯示實際的菜單本身。

但是,在這種特殊情況下,這是矯枉過正。如果您具有所需編輯控件的HWND,則可以將其發送WM_GETTEXTWM_SETTEXT消息,或使用.NET的UIAutomation接口直接獲取/設置控件的文本。無論哪種方式,都不需要選擇文本(您可以使用EM_SETSEL)或涉及剪貼板。

相關問題