我想知道的是,如何爲封閉源代碼的GUI應用程序提供輸入,並且沒有任何公共API。通過另一個程序給GUI應用程序提供輸入
爲了更加簡明扼要,假設您打開紙牌並希望通過程序來播放紙牌。或者,甚至到基礎,你有一個按鈕的GUI應用程序,你想通過另一個程序點擊它。
我知道這個問題有點含糊,但這是最好的,我可以說它。請幫助我進行一些編輯或一些評論,以使其更具體。
我想知道的是,如何爲封閉源代碼的GUI應用程序提供輸入,並且沒有任何公共API。通過另一個程序給GUI應用程序提供輸入
爲了更加簡明扼要,假設您打開紙牌並希望通過程序來播放紙牌。或者,甚至到基礎,你有一個按鈕的GUI應用程序,你想通過另一個程序點擊它。
我知道這個問題有點含糊,但這是最好的,我可以說它。請幫助我進行一些編輯或一些評論,以使其更具體。
調查SendInput()
。它可以用來模擬鼠標移動和按鍵。
要使用其GUI定位Windows應用程序,您可以使用EnumWindows()
來找到具有特定標題的窗口。這將提供一個窗口句柄。爲了讓該窗口的焦點,您可以:
EnumWindows()
GetWindowRect()
獲得的窗口句柄使用來獲取窗口矩形SendInput()
並模擬鼠標點擊使用SendInput()
我已經這樣做了一次,而且它很難得到正確的。一旦你開始你的程序坐在你的手上:不要觸摸鼠標或鍵盤。
(我對如何做這樣的事在Linux上沒有知識)
假設它在Linux上的X11應用程序,你可以在過程連接到命名管道的一端,然後回顯X-輸入事件沿着管道的另一端。
調查['SendInput()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310%28v=vs.85%29.aspx)。它可以用來模擬鼠標移動和按鍵。 – hmjd
@hmjd謝謝。那正是我正在尋找的。請張貼答案接受你的答案。如果您也有關於如何在Linux中執行此操作的知識,請將其包含在您的答案中。此外,如何專注於特定的GUI應用程序(當某些擊鍵僅在應用程序處於焦點時纔有用)將會很有幫助。 – coredump