delphi不用getdc如何屏幕截图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi不用getdc如何屏幕截图相关的知识,希望对你有一定的参考价值。

HyperSnap是个屏幕抓图工具,能抓取桌面程序。能以多种图形格式(包括:BMP, GIF, JPEG 等)保存并编辑图片。能够连续截图,用热键直接从屏幕上抓图。 参考技术A 向系统发PRINT SCREEN按键事件,然后剪贴板里翻数据

Delphi 截图的问题,有代码,请高手帮帮

本人小菜鸟.请大大们多指教
这个源码是截屏目的.但我想截指定的窗口,比如 计算器 窗口.我应该改哪里?谢谢
var
Fullscreen: Tbitmap;
FullscreenCanvas: TCanvas;
dc: HDC;
begin
Fullscreen := TBitmap.Create; //创建一个BITMAP来存放图象
Fullscreen.Width := 100;
Fullscreen.Height := 100;
DC := GetDC(0); //取得屏幕的 DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create; //创建一个CANVAS对象
FullscreenCanvas.Handle := DC;

Fullscreen.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free; //释放CANVAS对象
ReleaseDC(0, DC); //释放DC

image1.picture.Bitmap := fullscreen; //拷贝下的图象赋给IMAGE对象
image1.Width := fullscreen.Width;
image1.Height := fullscreen.Height;
fullscreen.free; //释放bitmap
form1.WindowState := wsNormal; //复原窗口状态
end;
谢谢各位回答的朋友.
分给第一个回答的朋友吧.用他的方法解决了.

参考技术A procedure TForm1.GetActiveWndImg;
var C: TCanvas; b: TBitmap; H: HDC; R: TRect; hand: THandle;
p: TPoint;
J: TJpegImage;
m, n: INTEGER;
name: array[0..255] of char;
begin
B := TBitmap.Create;
C := TCanvas.Create;
GetCurSorPos(P); //取得鼠标所在区域坐标
Hand := WindowFromPoint(P); //取得坐标所在窗体句柄
FillChar(name, SizeOf(name), #0); //
GetWindowText(Hand, name, 255); // 取得窗口标题
if name = '' then CopyMemory(@name, PCHAR(inttostr(hand)), Length(inttostr(hand)) + 1); //用句柄
if hand = 0 then exit;
H := GetWindowDC(Hand); //获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 返回值 Long
try
GetWindowRect(hand, R); //取得句柄对应窗体的矩形区域
B.Width := R.Right - R.Left;
B.Height := R.Bottom - R.Top;
C.Handle := H; //将描述表赋给画布的句柄,此时画布就代表整个屏幕了
B.Canvas.CopyRect(Rect(0, 0, B.Width, B.Height), C, Rect(0, 0, B.Width, B.Height));
//Image1.Picture.Bitmap.Assign(B);
finally
C.Free;
B.Free;
ReleaseDC(Hand, H); //释放设备上下文环境
end;
end;

以前写的一个类似软件 ,应该和你的问题相符,你可以参考一下。
参考技术B 先用 FindWindow找到窗口句柄,再用GetWindowRect获取窗口长宽大小信息
最后把这句改一下Fullscreen.Canvas.CopyRect
(Rect(0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect(0, 0, Screen.Width, Screen.Height));本回答被提问者采纳
参考技术C 不要单纯的学习控件等的使用,最好结合一个实例,我这里有一个现成的程序和数据库,数据库是SQL2000的,你如果需要,留下你的邮箱,我发给你。

以上是关于delphi不用getdc如何屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

delphi xe10 获取屏幕截图

BitBlt 屏幕截图在 Windows 10 上不起作用

MFC 屏幕截图(libjpeg bmp转jpg)

VC++截图编程:如何能完整地截图?要求是能够截取层级窗口的方法。

解决使用复制浏览器的屏幕截图出现黑色窗口的问题

Delphi控件继承类