利用PrintWindow截图的问题请教. ( 积分: 100 )

K

kingone

Unregistered / Unconfirmed
GUEST, unregistred user!
因为PrintWindow函数在XP下可以用来进行特殊截图,比如一个窗口即使被另一窗口所遮挡,也能被完全截出图来,所以引出了下面的问题,还请朋友们相助:
这是C#中一段代码,执行后可以正确对"计算器"界面进行截图
只要窗体的visable为true,即使它在屏幕的外面也可以抓到图。如果为false,就是一张黑图了,赫赫。

public static Bitmap GetWindow(IntPtr hWnd)
{
IntPtr hscrdc = GetWindowDC(hWnd);
Control control = Control.FromHandle(hWnd);
IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, control.Width, control.Height);
IntPtr hmemdc = CreateCompatibleDC(hscrdc);
SelectObject(hmemdc, hbitmap);
PrintWindow(hWnd, hmemdc, 0);
Bitmap bmp = Bitmap.FromHbitmap(hbitmap);
DeleteDC(hscrdc);//删除用过的对象
DeleteDC(hmemdc);//删除用过的对象
return bmp;
}
--------------------------------
[blue]我的问题,我将其转化成DELPHI代码后,对计算机截图为何只是一片空白[/blue]:
...
function PrintWindow(hwnd:HWND;hdcBlt:HWND;nFlags:word ):boolean;far;external 'user32.dll';
...
procedure TForm1.Button3Click(Sender: TObject);
var
Wind_hwnd,hscrdc, hbitmap, hmemdc: Integer;
Rect: TRect;
begin
Wind_hwnd := FindWindow('SciCalc', '计算器');
hscrdc := GetWindowDC(Wind_hwnd);
GetWindowRect(Wind_hwnd, Rect);
hbitmap := CreateCompatibleBitmap(hscrdc, Rect.Right-Rect.Left, Rect.Bottom-Rect.Top);
hmemdc := CreateCompatibleDC(hscrdc);
SelectObject(hmemdc, hbitmap);
PrintWindow(Wind_hwnd, hmemdc, 0);
Image1.Picture.Bitmap := TBitMap.Create;
Image1.Picture.Bitmap.Handle := hbitmap;
Image1.Picture.Bitmap.Canvas.Refresh;
DeleteDC(hscrdc);//删除用过的对象
DeleteDC(hmemdc);//删除用过的对象
DeleteObject(hbitmap);
end;
 
K

kingone

Unregistered / Unconfirmed
GUEST, unregistred user!
这个问题很难吗,找了不少资料就是没有解决,郁闷了....
 
Y

ysai

Unregistered / Unconfirmed
GUEST, unregistred user!
function PrintWindow(hwnd:HWND;hdcBlt:HWND;nFlags:word ):boolean;far;external 'user32.dll';
>>
function PrintWindow(hwnd:HWND;hdcBlt:HWND;nFlags:word ):boolean;stdcall;external 'user32.dll';

截图是对的,但用image显示不出来
if PrintWindow(Wind_hwnd, hmemdc, 0) then
begin
bmp := TBitMap.Create;
bmp.Handle := hbitmap;
bmp.SaveToFile('c:/a.bmp');
bmp.free;
end;
打开c:/a.bmp里的图是对的.
 
K

kingone

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢,针对计算器的问题已解决.但如果把计算器换成一个3D游戏的话,也只有一部分在桌面可视区域里,如何截完整的图?
 
J

jjg000

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你想花最少的钱学习流行的计算机技术,本人低价提供
计算机专业高清晰 视 频 教 程,所有教程由业内名家讲解,物超所值,
所有光盘4元/张,特快专递全国三天内到货.
联系方式:手 机:1 3 5 76145612(手机联系佳) Q Q:108410943
E-mail:ncncldjjg@126.com
1、Oracle9iOCP(Oracle认证专家DBA)视频教程(23CD)
2、SQL语言、数据挖掘、SQLServer2000视频教程(6CD)
3、计算机网络原理视频教程(4CD)
4、计算机实用组网技术视频教程(3CD)
5、MCSE(微软认证系统工程师)认证视频教程(11CD)
6、windows2003即学即会视频教程(6CD)
7、J2EE Web程序开发定向班/Java就业班视频教程
(java基础jsp核心技术UML设计)(13CD)
8、J2EE基础高级案例分析视频教程(9CD)
9、马士兵J2SE入门与精通(含坦克大战、BBS实例)视频教程(6CD)
10、java语言深入详解视频教程(12CD)
11、java技术从入门到精通视频教程(21CD)
12、javascript全接触视频教程(13CD)
13、各类网站源程序(9CD)
14、unix原理视频教程(3CD)
15、Linux软件开发工程师(C语言)视频教程(4CD)
16、Linux配置、管理、优化实战工程师视频教程(8CD)
17、Linux内核编程视频教程(11CD)
18、C语言详解视频教程(2CD)
19、VC++6.0(MFC)开发技术术详解视频教程(6CD)
20、ASP.NET中文视频教程(3CD)
21、洪恩C#入门多媒体教程(1CD)
22、XML技术视频教程(2CD)
23、操作系统视频教程(3CD)
24、网络技术基础视频教程(2CD)
25、数据结构视频教程(5CD)
26、清华大学计算机专业多媒体教程(数据结构、汇编、编译原理等)(13CD)
27、大学数学[离散数学线性代数概率与数理统计微积分]视频教程(22CD)
28、LearnKey Asp.Net (老外用英语讲课)(13CD)
29、LearnKey Asp.Net Webservice(老外用英语讲课)(5CD)
30、AppDev Asp.Net2.0 UsingC# (老外用英语讲课)(1CD)
31、APPDev .Net Framework(老外用英语讲课)(2CD)
32、林清安pro/e2001(野火版)视频教程(18CD)
33、深圳大学3D设计视频教程(4CD)
34、3DMAX建模视频教程(老外用英语讲课)(6CD)
35、3DMAX纹理与贴图材质灯光视频教程(老外用英语讲课)(5CD)
36、3DMAX格式500个常用模型库(4CD)
37、lightscape基础入门视频教程(2CD)
38、聚光制造(lightscape3.2入门与精通视频教程)(4CD)
39、coreldraw12中文版入门与精通swf格式视频教程(2CD)
 
顶部