2010-10-11 55 views
1

我需要在另一個進程中看到單擊的控件的組件類型,這意味着被編程的類的名稱。我需要這種類型,以便對點擊的控件作出反應,然後執行一些自動化任務。 現在我正在做以下事情: 1.我從Win32的FindWindow()找到進程的主窗口句柄。 2.然後,我從Win32中調用EnumChildWindows(),並獲取主窗口句柄的所有子項的窗口句柄。 3.現在變得棘手。當我調用GetClassName()時,它會返回WindowsForms10.STATIC.app [...],因爲我試圖讀取的控件是自定義的。從窗口句柄中獲取自定義.NET類的組件類型

如何從EnumChildWindows()中使用窗口句柄獲取單擊的控件的類型?我正在努力做甚麼? 我一直在研究使用從Win32的SendMessage()到進程,但似乎沒有系統定義的消息可以幫助。

回答

1

恐怕這是不可能的。句柄只是指Windows需要的窗口的內部數據。沒有可用的信息。

你可以得到類名,但它既不標準也不唯一。大部分不是基本功能控件(如按鈕,列表等)的控件都是從一個非常原始的控件派生而來的,即「靜態」。但是,又沒有關於可用的高級別WinForms控件的信息。

這導致了這樣一個事實,即使你知道這個類型,你也不能只是施放指針/句柄,因爲它後面沒有數據。

你能以某種方式重述你的問題嗎?也許使用遠程過程調用?沒有高級別的WinForms對象,它是否工作?諸如使用普通的Win32 API單擊,移動或重命名工作。

+0

非常感謝您的快速回答。我一直在Win32 API中閱讀很多,但沒有運氣。 :(我需要查看頂級類,以便我可以預測用戶想要做什麼,我不需要進一步與控件交互,我已經編寫了一個Hook來讀取應用程序中鼠標的位置。然後,我需要做的是讀取哪個組件類型被單擊,由於屬性設置不正確,Casting到AutomationElement也沒有幫助,我看到ManagedSpyLib可以讀取組件類型,但它尚未被編譯。 NET 4.0所以我需要自己編程 – prettyCode 2010-10-11 10:42:14

+0

如果你找到一個有用的答案,你可以點擊向上箭頭,如果它回答你的問題,請點擊箭頭下面的綠色選中標記。 – msteiger 2010-10-11 11:57:11