![](/img/trans.png)
[英]what is the best way to detect the source of buffer overflow in c++ for windows?
[英]What is the best way to take screenshots of a Window with C++ in Windows?
在 Windows 下使用 C++ 截取正在運行的應用程序的屏幕截圖的最佳(最簡單)方法是什么?
您必須獲取窗口的設備上下文( GetWindowDC()
)並從中復制圖像( BitBlt()
)。 根據您對應用程序的了解,您將使用不同的方法來查找要傳遞給GetWindowDC()
窗口句柄。
GetDC(NULL)
+ BitBlt()
要捕獲半透明/alpha/分層窗口,您必須將CAPTUREBLT
標志傳遞給BitBlt
,如果這樣做,光標會閃爍,請閱讀此技術網文章以找出原因。
在 NT6+ 上,您或許可以使用Magnification API來做您想做的事。
在keybd_event函數文檔中,它聲明您可以使用它來截取屏幕截圖並將其保存到剪貼板。 例如:
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_SILENT, 0);
在我的版本(安裝在我的計算機上的 Visual Studio 2005 幫助)中,它指出您可以通過將第二個參數設置為 0 來截取整個桌面的屏幕截圖,或者通過將其設置為 1 來截取當前應用程序的屏幕截圖。
從剪貼板緩沖區中取出它作為練習留給讀者。
但是,在執行此操作之前我會仔細考慮,因為它會覆蓋剪貼板中已經存在的任何圖像數據。
這是一個示例代碼
你可以做CaptureAnImage(GetDesktopWindow());
進行屏幕截圖。
桌面是與用戶交互的“虛擬”設備。因此,它可能包含與隱私相關的信息。 我建議在可執行文件嘗試截取屏幕截圖時添加來自操作系統的安全檢查/警告提示,除非最終用戶明確表示他(她)知道發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.