社区
GAME,图形处理/多媒体
帖子详情
程序抓图的问题
chinahuman
2008-10-15 04:32:38
得到一个程序的ProcessID和它的主窗体的HWND后,想对它进行抓图,无论它是最小化,还是被拖出屏幕外.不知道大家有啥好的方法没有?
...全文
165
12
打赏
收藏
程序抓图的问题
得到一个程序的ProcessID和它的主窗体的HWND后,想对它进行抓图,无论它是最小化,还是被拖出屏幕外.不知道大家有啥好的方法没有?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chinahuman
2008-10-19
打赏
举报
回复
我自己找到答案了,用printwindow这个API轻松搞定
mdejtod
2008-10-17
打赏
举报
回复
学习
lake_cx
2008-10-17
打赏
举报
回复
楼上,那屏幕会闪吧
MyCrooner
2008-10-17
打赏
举报
回复
窗口被遮住或部分出界,可以这样,记录窗口的当前位置,然后移到屏幕中间,发送到最前面显示,接着截屏。然后复原原来的位置。
chinahuman
2008-10-16
打赏
举报
回复
"但如果它是最小化,或是被拖出屏幕外,或者被其它窗口档住了,这个实现其实可能比较困难,目前我还没有解决。以前也有人提过这个问题,但一直没有被解决。"我碰到的问题也正是这样的.我把它放到虚拟桌面上去,结果这个虚拟桌如果激活,就能抓,如果不激活就抓不到.感觉是系统这样处理了,如果它不在可视区域里面,就不再去重绘它(节省GPU?).
无条件为你
2008-10-16
打赏
举报
回复
有主窗体的HWND,就可以对其抓图,这个很容易实现:
在窗体上放一个Image和Button控件,代码:
procedure ScreenShot(hWindow: HWND; bm: TBitmap);
var
Left, Top, Width, Height: Word;
R: TRect;
dc: HDC;
lpPal: PLOGPALETTE;
begin
if not IsWindow(hWindow) then Exit;
GetWindowRect(hWindow, R);
Left := R.Left;
Top := R.Top;
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
bm.Width := Width;
bm.Height := Height;
dc := GetDc(0);
if dc=0 then Exit;
if (GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE) then begin
GetMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
FillChar(lpPal^,SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)),#0);
lpPal^.palVersion := $300;
lpPal^.palNumEntries := GetSystemPaletteEntries(dc,0,256,lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then begin
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)));
end;
BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,Left,Top,SRCCOPY);
ReleaseDc(0, dc);
end;
procedure TForm1.Button1Click(Sender: TObject);
var b: TBitMap;
begin
b := TBitmap.Create;
ScreenShot(FindWindow(0,'计算器'), b);
Image1.Picture.Bitmap := b;
b.Free;
end;
但如果它是最小化,或是被拖出屏幕外,或者被其它窗口档住了,这个实现其实可能比较困难,目前我还没有解决。以前也有人提过这个问题,但一直没有被解决。
chinahuman
2008-10-16
打赏
举报
回复
比比较郁闷的问题,经过研究,只要这个程序不显示或是在显示区域外,它就不会重绘,也就没有办法通过DC来抓图,不知道还有没有其它的办法呢?比如说不让它绘到DC上给是绘到我指定的位置上?
hangzhou_hammer
2008-10-16
打赏
举报
回复
行不通的吧,有些窗体又不是时时的重绘,它如果只在屏幕范围内重绘的话;你这样是怎么也抓不到的吧
JPEXE
2008-10-15
打赏
举报
回复
Mark.
xxaabb
2008-10-15
打赏
举报
回复
只会拷贝屏幕
lake_cx
2008-10-15
打赏
举报
回复
我试过,没什么好办法
我尝试过Hook它的BeginPaint和EndPaint,但是没法让目标窗体在最小化或者屏幕之外重绘。
即使我拿窗体的WndProc直接调用,给他传WM_PAIT的消息也没用。
gjw310
2008-10-15
打赏
举报
回复
帮顶,学习
屏幕
抓图
小
程序
(完整及代码全)
7. 错误处理和调试:一个完整的
程序
需要考虑各种可能出现的
问题
,如权限不足、用户选择错误、内存不足等,并提供相应的错误处理机制。 8. 源代码阅读与学习:对于这个压缩包中的"屏幕
抓图
"文件,使用者可以通过阅读...
编写
抓图
程序
本文给出了设计一个
抓图
程序
的完整过程,对一个
抓图
程序
所应拥有的最基本的三大功能即:热键激活、屏幕
抓图
及存储所抓取的图形等功能的实现作了详细的介绍。
屏幕
抓图
程序
屏幕
抓图
程序
是一种用于捕获计算机屏幕上显示内容的软件工具,它可以截取全屏、活动窗口、特定区域或特定形状的图像。在IT行业中,屏幕
抓图
程序
的应用广泛,包括故障排查、教学演示、设计反馈、文档制作等多个场景。...
抓图
工具,实用小
程序
,实用顺手方便
抓图
实用小
程序
,只是分享搬运,自己用过,比较好使 有需要用到的朋友可以下载试试 截图方便,功能足够满足一般的操作
抓图
程序
JAVA版 用JAVA写的
抓图
程序
【标题】:“
抓图
程序
JAVA版 用JAVA写的
抓图
程序
” 这个项目是基于Java语言开发的一款
抓图
工具,主要用于从网页中批量抓取图片并保存到本地形成一个文件夹。在网页抓取领域,这样的工具非常实用,尤其是在处理包含...
GAME,图形处理/多媒体
1,185
社区成员
14,330
社区内容
发帖
与我相关
我的任务
GAME,图形处理/多媒体
Delphi GAME,图形处理/多媒体
复制链接
扫一扫
分享
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章