文档章节

如何使用系统级热键捕捉当前窗口保存为 png 图片 - 回复 "巅枫" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 297
阅读 12
收藏 0

问题来源: http://www.cnblogs.com/del/archive/2009/02/16/1392049.html#2011187

程序运行后, F8 可保存 bmp, F9 可保存 png; 测试保存目录在 C:\temp

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses pngimage; //png 支持

var
  HotKeyId: array[0..1] of Integer; //热键列表

//捕捉当前窗口, 保存为 bmp 或 png
procedure GetPicture(png: Boolean = false);
var
  r: TRect;
  bmp: TBitmap;
begin
  GetWindowRect(GetForegroundWindow, r);
  bmp := TBitmap.Create;
  bmp.SetSize(r.Right - r.Left, r.Bottom - r.Top);
  BitBlt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, GetDC(0), r.Left, r.Top, SRCCOPY);
  if png then
    TPngImage(bmp).SaveToFile('c:\temp\001.png')
  else
    bmp.SaveToFile('c:\temp\001.bmp');
  bmp.Free;
end;

//注册系统热键 F8、F9
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := Low(HotKeyId) to High(HotKeyId) do
    HotKeyId[i] := GlobalAddAtom(PChar(IntToStr(i)));
  RegisterHotKey(Handle,HotKeyId[0],0,VK_F8); //F8
  RegisterHotKey(Handle,HotKeyId[1],0,VK_F9); //F9
end;

//处理系统热键
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = HotKeyId[0] then GetPicture;       //存 bmp
  if Msg.HotKey = HotKeyId[1] then GetPicture(true); //存 png
end;

//销毁系统热键
procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i := Low(HotKeyId) to High(HotKeyId) do
  begin
    UnRegisterHotKey(handle,HotKeyId[i]);
    GlobalDeleteAtom(HotKeyId[i]);
  end;
end;

end.

本文转载自:http://www.cnblogs.com/del/archive/2011/01/15/1936233.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
红蜻蜓抓图精灵(RdfSnap)2017绿色版64位下载

红蜻蜓抓图精灵2107的英文名为RdfSnap,是一款完全免费的专业级屏幕捕捉软件,它拥有长网页滚屏捕捉、定时自动截、图捕捉图像预览、图像编辑、延迟捕捉、捕捉层叠菜单、水印添加、外接图片编辑...

weixin_42030895
05/10
0
0
如何使用 Eclipse 给 Android 模拟器截屏

如果你是一个Android开发者,想要对你的应用程序进行截屏,用来完成文档,或把它提交到谷歌市场。如今的智能手机都很容易做到,如三星Galaxy系列的Android手机就有屏幕快照。但有些时候,我们...

迷途d书童
2012/09/06
3.9K
15
如何在MyEclipse中编辑图片

获取快速图像预览 MyEclipse中提供了一个视图选项允许您浏览图片文件夹(通过在Package Explorer),不用在一个单独的图像编辑器中打开它们来显示图像。图像预览选项提供了基本的放大/缩小图...

百mumu
2016/06/15
232
0
obs-studio源码分析(一):窗口、显示器(桌面)捕捉

windows下窗口、桌面捕捉有多种方式。如下: 1:使用GDI函数或者Windows Media API函数 2:使用DirectX技术 3:使用api hook技术(如D3D游戏捕捉) 4:使用图形驱动技术 obs的窗口、桌面捕捉...

balijinyi
05/11
0
0
Windows中系统范围热键的实现方法

在Windows环境下运行的程序,大多数都支持热键,热键一般被人们称为快捷键,例如:大多数Windows程序都支持“复制”和“粘贴”操作,它们的快捷键一般是:“Ctrl+C”和“Ctrl+V”;在“记事本...

余二五
2017/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day150-2018-11-17-英语流利阅读-待学习

歪果仁也疯狂:海外版抖音的征途 毛西 2018-11-17 1.今日导读 海外版抖音 TikTok 于 2017 年 5 月上线海外,至今覆盖全球 150 多个国家和地区,月活跃用户数已突破 5 亿。然而,“出海”的抖...

飞鱼说编程
今天
10
0
分布式学习最佳实践:从分布式系统的特征开始(附思维导图)

什么是分布式系统 回到顶部   分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法...

dragon_tech
今天
4
0
TOKEN设计

TOKEN设计 Api_Token 首先需要知道API是什么? API(Application Programming Interface)即应用程序接口。你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接口。而我们在...

DrChenXX
今天
3
0
浅谈“李氏代换”——从纪念金庸和斯坦李说起

李氏代换(LSP)简介 李氏代换是软件设计的一个原则,又名依赖倒转原则或依赖倒置原则,其衍生原则有接口分离原则等。该原则由Barbara Liskov于1988年提出。 该原则指出,程序中高级别的元素...

SamYjy
今天
36
0
JavaScript实现在线websocket WSS测试工具 -toolfk程序员工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T...

toolfk
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部