2010-02-14 82 views

回答

5

我写了一个程序(不幸现在丢失了)在几年前做了这样的事情。

通过为屏幕创建DC,创建兼容的位图,然后使用BitBlt将屏幕内容复制到位图中,可以检索桌面图像。然后使用GetDIBits以已知格式从此位图中获取像素。

此链接并不完全是这样,但它演示了原理,尽管使用MFC。我找不到一个具体的Win32的例子:

http://www.flounder.com/screencapture.htm

对于毁灭性的效果,最好使用Direct3D或OpenGL。 (更多细节取决于您。)使用之前保存的位图数据创建纹理。

通过与OpenGL或D3D相关联的窗口,创建一个无边框窗口,填充整个屏幕并且不进行绘画或背景擦除。这将防止从桌面图像切换到用于绘制的桌面图像副本时出现闪烁。

(如果使用D3D,你还会发现GetMonitorInfo结合有用与IDirect3D9::GetAdapterMonitor和朋友,你需要为每个监视器一个单独的设备,因此,你需要知道的桌面对应的哪一部分到那个设备。)