2009-08-03 27 views
7

我想創建一個程序或使用一個程序,將讀取另一個應用程序的內存值。有誰知道會做這個的應用程序/庫嗎?如何讀取Windows中打開的應用程序的值?

目標應用程序是this。我想從中讀取匯率值。

我是一名經驗豐富的c#程序員,但從未與Win32/user32 api合作過,我假設我必須處理這個問題才能解決這個問題。

任何幫助,讓我走在正確的方向非常感謝。

更新: 我設法使用Spy ++來獲得窗口句柄,所以我敢肯定我可以得到的價值一些如何。

回答

2

通常,應用程序在對話框中以一致的莊園,相同的ID,相同的順序等創建控件,因此以編程方式查找控件相當簡單。使用Spy ++找到控件的ID,然後您可以搜索應用程序創建的窗口以獲取所需的控件。不熟悉相關應用程序,我不能提供具體信息,但是如果Spy ++顯示您想要的值,則可能不難獲得代碼中的值。

顯示的值是什麼類型的控件?一旦擁有父窗口句柄和控件ID,您可能可以使用GetDlgItemText獲取該值?要獲得父窗口,請嘗試使用EnumWindows

+0

我無法達到期望的價值,但我能夠獲得所有不同匯率所在的貨櫃的處理。在容器中顯示的唯一控件是用於選擇值(批量大小)的組合框。 – 2009-08-04 17:43:18

1

您是否看過AutoITAutoHotKey? 這兩個開源選項都具有良好的文檔記錄功能,可以從應用程序窗口中讀取文本(並向其發送擊鍵或鼠標點擊)。

AutoIT非常易於使用且記錄完備。 一種從一個窗口的閱讀文本的例子是:

$text = WinGetText("title of window", "") 
MsgBox(0, "Text read was:", $text) 

這可被編譯成一個可執行文件。

0

可以使用原生Windows控件創建屏幕,如果是這種情況,你應該能夠看到使用Spy ++的控件。但有時控件是「手動」實現的,並且無法屏幕取消它們(例如,某些Java圖形工具包可直接與圖形一起播放,所以一天中的任何操作都沒有意義,或者甚至一些Office菜單都已實現而不使用菜單控制)。

Windows可訪問性API是一種屏幕取消值的可能方式;檢查窗口附帶的屏幕閱讀器「Narrator」是否能夠朗讀目標應用程序。

相關問題