2010-03-01 94 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. 可选将图像数据写入文件。