2016-04-27 97 views
0

我從他們的窗口句柄(hwnd)屏幕捕獲應用程序窗口,並使用GetWindowDC獲取設備上下文,我可以使用它來捕獲整個窗口,頂級菜單和滾動條。如何獲取窗口,子菜單和上下文菜單的設備上下文?

HDC hdcWindow = GetWindowDC(hwnd); 
HDC hdcMemDC = CreateCompatibleDC(hdcWindow); // or hdcScreen 

當我打開一個子菜單例如記事本左上角的文件菜單,該菜單不被捕獲。它似乎並未包含在設備上下文中。有沒有一種方法可以獲取應用程序窗口中的所有設備上下文?

+1

您需要獲得顯示DC(GetDC(NULL)),然後BitBlt窗口矩形 –

+0

@AlexK。從技術上講,彈出菜單可以延伸到窗口矩形之外... –

+0

嗨,亞歷克斯,這工作得很好,謝謝。 – Anton

回答

0

GDI提供的顯示抽象並不知道任何由桌面組合執行的魔術 - 窗口DC代表顯示器上窗口的區域,並且如果窗口未顯示或被其他窗口遮擋,區域被裁剪出來並且不存在 - 您無法使用窗口DC對其進行濾波,並且在讀取它時您可能會變黑。因此,要從多個窗口中捕獲包含內容的屏幕區域 - 您需要使用屏幕而不是窗口DC。

+0

此答案如何解決問題中提出的問題? – IInspectable