2010-04-24 82 views
2

如果沒有其他理由說,學術練習能夠讀取寫入Windows應用程序表單的文本,該程序看起來是用非.NET語言編寫的,但用.NET術語來說,我認爲你會將該程序描述爲具有帶有標籤的表單,並且我想從該標籤中讀取文本。從Windows窗體中讀取文本

我相信我可以看到正在用User32!TextOut(和其他區域中的User32!DrawString)函數寫入屏幕的文本。但是,如果我不必鉤住該函數來獲取我正在查找的信息,而是直接從表單直接讀取它,那就太好了。

因此,給定一個窗口的句柄,是否可以使用類似的API或其他聰明的方法讀取已經寫入該窗口的文本,並使用類似TextOut和DrawString的函數?

或者我正在做這個錯誤的方式嗎?我是否應該勾住這個函數,並在每次調用中尋找文本並祈禱?

謝謝!

回答

0

如果文本存儲在標準方法上的控制,你可以使用SendMessage函數

Win32.SendMessage(controlHandle, Win32.WM_GETTEXTLENGTH, 0, null); 

如果控制是考慮到安全性寫的,文字是幾乎可以肯定不是存儲在可以是一個格式通過Windows API查詢。

我曾經使用一個名爲Snadboy Revelation的程序從程序中抓取忘記的密碼(只是顯示爲*****)。啓示錄使用相同的技術。但是,大多數現代軟件隱藏了密碼和類似字段的文本,所以這些日子沒有太多用處。

UPDATE:

找到source code爲Windows間諜應用程序。

+0

這聽起來很棒!我會給它一個! :)只是要確定:我可以通過在controlHandle上使用'DuplicateHandle'或類似的方法從另一個應用程序執行此操作,對吧? – omghai2u 2010-04-24 05:34:38

+0

@ omghai2u:你可以用另一個進程的窗口句柄來做到這一點。添加了一個指向Windows Spy應用程序源代碼的鏈接,該應用程序將具有一個實現。 – 2010-04-24 06:19:41