0
我正在創建一個應用程序,可以從任何窗口上的選定矩形獲取文本。所以我通過鉤住ExtTextOut(A/W),TextOut(A/W),DrawText(A/W)apis來做到這一點。 我能夠從窗口中檢索文本,但在某些特殊情況下,我無法正確獲取文本。 當我試圖調試它時,我看到ExtTextOutW的HDC參數不能用於獲取HWND,因爲當我嘗試調用WindowFromDC(hdc)時,它返回NULL HWND。掛鉤ExtTextOutW沒有給出正確的信息文本
我試圖找出原因,然後我發現這個HDC是memoryDC,所以有什麼辦法從該內存DC獲取HWND。
所以請有人幫我從HDC得到實際的HWND。
首先,非常感謝您的回覆。 其實我已經試過BitBlt,但它也不符合我的要求。我不知道爲什麼,但被鉤住的BitBlt只被調用一次(對於主窗口)。 我想我或者做錯了什麼或者還有其他一些問題。我在想,應該調用每個子窗口的BitBlt,但事實並非如此。 請建議。 – vab711 2012-08-07 09:43:39
有像'StretchBlt()'這樣的'BitBlt()'的變種。你如何修補導入地址表?如果一個新的DLL被加載會怎麼樣?你發現並修補它嗎? (通過_patch_我的意思是_hook_)。 'BitBlt()'本身是不夠的,因爲文本已經被寫入。但結合文本輸出功能,它可能會提供您的答案。作爲測試,建議將參數打印到文本輸出函數和「BitBlt()」和朋友的日誌文件(或某處),並查看「HDC」是否匹配。 – hmjd 2012-08-07 09:48:22
感謝您的朋友提出您的建議。 我嘗試了一些BitBlt的變體,如:StretchBlt,StretchDIBits,並插入與日誌相關的代碼,但是沒有任何內容會打印在我的日誌文件中。這意味着沒有任何掛鉤函數(StretchBlt或StretchDIBits)被調用。 其實我是新來的,所以可能是我做錯了什麼。 – vab711 2012-08-07 10:47:19