2011-07-21 51 views
0

我想捕捉窗口顯示的所有內容。另一方面,如果該窗口實際上沒有在屏幕上顯示任何內容,那將是非常好的。怎麼樣?該過程將調用繪圖函數,我的函數將掛鉤並將其繪製到其他位置(例如位圖文件)並返回而不實際繪製在屏幕上。我知道,在Windows NT體系結構中,每個線程都有一個系統調用表,您可以將單個線程的系統調用表(或者只是在開始時設置它)更改爲您的函數。通過只改變繪製API(GDI?)(我不知道如果應用程序使用DirectX渲染,但我可能會有辦法),我覺得我可以做到這一點。我可以嗎?如果應用程序使用DirectX渲染,應該怎麼做?有沒有辦法在windows下掛鉤整個繪圖函數?

由於提前,

阿里帆

+0

它是指您編寫的應用程序中的窗口還是指向「任何現有應用程序」中的窗口?在第一種情況下,你根本不需要掛鉤。在第二種情況下,至少可以說是一項艱鉅的任務。 – Damon

+0

第二種情況 –

+1

在這種情況下,要做的最少侵入性和最不具攻擊性的事情就是編寫自己的gdi32包裝器DLL,它可以導出與原始函數相同的函數並可選地轉發函數(類似於像GLIntercept這樣的工具的工作方式) 。然後,您可以在自己的DC中重複繪製命令。或者,您可以嘗試注入代碼,在其他應用程序中創建自己的DC,並用此替換正常的代碼,然後再讀取進程內存,但是meh ...祝您好運。篡改系統調用表......再次祝你好運。 – Damon

回答

0

最後我只掛鉤的CreateDC相似的功能,使得它總是創建內存設備上下文,並讓所有其他職能借鑑內存DC。

相關問題