2008-12-17 51 views

回答

8

檢出ManagedSpy,提供源代碼。 (link

+0

很好的鏈接!看起來ManagedSpyLib可能用於監視其他託管應用程序 - 它是否適用於非託管應用程序?在那種情況下,他可能想看看Spy ++。 – HanClinto 2008-12-17 16:44:31

0

「你也許能夠使用System.Diagnostics.Process.GetProcessesByName(」 PROCNAME「)和 檢索主窗口辦理,從那裏你可以使用WIN32 API來 獲得文本框的手柄用於顯示你想要的文字 用文本框的句柄可以得到或設置內容我是 沒有win32 API的專家,但有一點研究我已經能夠 完成類似的任務 Hope這有助於「

取自這裏:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic1657.aspx

16

你可能想看看WM_GETTEXT message。這可能是used to read text from other windows--它是Windows API的一個陳舊部分,如果你使用C#,則需要爲它調用p /。

查看this page瞭解如何在C#中執行此操作的示例。

基本上,你首先FindControlEx()來獲得你想要的窗口的句柄(通過標題)。

其次,您使用EnumChildWindows()遞歸枚舉該窗口上的控件,以查找窗口的所有子控件以及所有這些子項的子項,直到獲得目標窗體的完整映射。

下面是來自谷歌的答案的Theta-ga's excellent explanation選定部分:

要在任何文本框或列表框控件的內容,我們需要的是它的窗口句柄。如果你已經獲得窗口句柄,然後移動到解釋的第2部分。

第1部分:獲取控制手柄

  • 要獲得一個控件的句柄,我們首先得到它的父窗口句柄?我們可以通過使用Win32 FindControlEx()方法來做到這一點。該方法接受窗口標題(如'計算器')和/或其類名稱,並返回其句柄。
  • 一旦我們有了父窗口句柄,我們可以調用Win32 EnumChildWindows方法。這個方法需要一個回調方法,它調用它爲指定的父對象找到的每個子控件的句柄。例如,如果我們使用Calculator窗口的句柄調用此方法,它將使用文本框控件的句柄調用回調方法,然後再次使用Calculator窗口中每個按鈕的句柄,依此類推。
  • 由於我們只關注文本框控件的句柄,所以我們可以在回調方法中檢查窗口的類。 Win32方法GetClassName()可用於此。這個方法需要一個窗口句柄,併爲我們提供一個包含類名稱的字符串。所以一個文本框屬於?編輯?類,ListBox類的列表框等等。一旦你確定你有正確的控制手柄,你可以閱讀它的內容。

第2部分:讀取控制的內容

  • 可以通過使用Win32的SendMessage()函數,並用它來傳遞一個控制的內容讀將WM_GETTEXT消息發送給目標控件。這會給你控件的文本內容。此方法可用於文本框,按鈕或靜態控件。
  • 但是,如果您嘗試讀取列表框的內容,上述方法將失敗。要獲取列表框的內容,我們需要首先使用SendMessage()和LB_GETCOUNT消息來獲取列表項的數量。然後,我們需要爲列表中的每個項目調用帶有LB_GETTEXT消息的SendMessage()。
+0

感謝這個有用的信息。快速的問題,如果我有矩形座標(即x,y,寬度,高度) - 我有興趣從那個矩形抓取文本,不一定是像文本框/區域一樣的窗體控件。你知道這是可能的嗎? – zenocon 2017-11-14 20:29:37

0

screenscraperstudio.com

它創建了 「你刮對話」 的VB代碼。

我還沒有購買它,所以我可能是錯的,但它的唯一途徑(短期使用間諜++消息其它躲避上面滾動自己的...)