2011-03-24 28 views
0

我試圖訪問窗口的程序元素,其中我只有二進制文件和安裝的東西。C/C++鉤訪問窗口的程序元素

例如,我想以自動方式單擊特定列表框中的某個項目。我只想訪問程序的一個窗口的一個列表框,但這會幫助我創建一個非常好的宏(列表框中充滿了「展開」,它很長,並且動態)。

我想過使用像Autohotkey這樣的宏,但很快就認爲這是一個壞主意。

我甚至不知道如何調用這個,但我試圖尋找「鉤」相關的東西,沒有成功。

PS:我在使用代碼塊的64位Windows 7系統上。讓我知道是否有更好的IDE,比如VS,因爲我也可以使用它。

編輯

好了,我抓住了使用WinSpy ++窗口的信息,但我真的不知道該怎麼辦。我試圖獲得子窗口的句柄,但是失敗了。
我很喜歡這個。我想起了一個重要的細節,我需要得到列表框元素的名稱和他們的位置(第一,第二,第三),這有可能嗎?

EDIT 2(我在哪裏)
好吧,這裏是我到目前爲止:我抓到了主窗口的句柄,但不能得到任何孩子的手柄。我的谷歌搜索出現了一個「GetDlgItem」函數,但沒有奏效。有任何想法嗎?

回答

2

您可能可以使用Spy ++爲窗口(列表框控件)找到特定的類和/或標題,然後通過FindWindow()對其進行定位。

如果沒有,您將不得不找到應用程序的主窗口,並遍歷其子項,找到子項的子項,直到找到列表框窗口。

一旦你終於有了窗口句柄,你可以將PostMessage()WM_CLICK消息給它。

+0

是否可以訪問列表框項目?我想以他們的名字和職位爲例。 – 2011-03-24 03:31:04

+0

發送一個LB_GETCOUNT以獲得該數量,然後:for(i = 0; i 2011-03-24 12:36:03

+0

好吧,這裏是我到目前爲止:我抓住主窗口句柄,但不能得到任何孩子的句柄。我的谷歌搜索出現了一個「GetDlgItem」函數,但沒有奏效。任何想法? – 2011-03-24 17:54:47

1

鉤是你想要的。

首先,你的鉤子回調函數應該駐留在一個DLL中,以便Window可以將你的代碼注入到其他程序的進程空間中。其次,你應該使用SetWindowsHookEx()API註冊一些事件,比如鼠標移動/點擊事件。

然後你可以完全訪問列表框。

提示:您可以使用一個名爲的小工具MS Spy ++來獲取列表框的ID或名稱。

+0

是否可以像這樣訪問列表框元素?獲取他們的名字和職位(第一,第二,第三)。 順便說一句,我用WinSpy ++獲取你提到的信息,現在我試圖找到你的提示信息,因爲我是一個總的談到這個問題。 – 2011-03-24 03:35:52

+0

@WFF_Angel是的。這就是Spy ++的工作原理。 – iCoder 2011-03-25 04:10:16