2010-03-01 99 views
3
keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY, 0); 
keybd_event(VK_SNAPSHOT, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); 
HBITMAP h; 

OpenClipboard(NULL); 
h = (HBITMAP)GetClipboardData(CF_BITMAP); 
CloseClipboard(); 
... 

通常這個效果很好。 但如果前景窗口更改並鎖定剪貼板,則無法打開剪貼板。替代方法來捕獲屏幕? (C++,windows操作系統)

有沒有其他的方法來捕捉屏幕 - 也可以在後臺工作 - ?

感謝,

回答

3

一個簡單的方案來捕捉監視器1的屏幕,這使我受益匪淺,但不覆蓋所有角落情況:

  1. 獲取屏幕設備上下文。
  2. 創建與屏幕設備上下文兼容的設備上下文。
  3. 創建一個與屏幕分辨率一樣大的設備無關位圖(需要獲取像素數據)。
  4. 選擇設備無關位圖到兼容的設備上下文中。
  5. 將屏幕設備上下文位blit到兼容設備上下文上。
  6. 取消選擇與設備無關的位圖。
  7. 圖像數據現在位於設備無關位圖中。
  8. 可選將圖像數據寫入文件。