如何使用系统级热键捕捉当前窗口保存为 png 图片
2011-06-24 15:23
369 查看
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.
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.
相关文章推荐
- 如何使用系统级热键捕捉当前窗口保存为 png 图片 - 回复 "巅枫" 的问题
- 如何使用ps制作png图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- 如何使用js将canvas保存为图片文件,并且可以自定义文件名
- 网页图片格式PNG,JPG,GIF如何选择使用
- 教你如何使用libpng显示png图片
- selenium截取当前窗口,并保存为图片
- 如何使用GDI+装载图片对象(支持png图片)
- GDI+ - 使用PNG图片打造不规则窗口
- wxwidgets 界面编程如何使用 png 图片
- Silverlight实用窍门系列:50.InkPresenter涂鸦板的基本使用,以及将效果保存为Png图片【附带源码实例】
- Silverlight实用窍门系列:50.InkPresenter涂鸦板的基本使用,以及将效果保存为Png图片【附带源码实例】
- 教你如何使用libpng显示png图片
- 使用百度Ueditor编辑器的时候,如何才能获取图片的保存路径,即src的值,以便满足需求:将路径存入数据库
- 如何将当前布局用代码保存在png图像文件中?
- Qt中如何利用 png 图片来实现自定义形状的窗口
- 选着图片后可以编辑图片和如何使用摄像机获取图片并保存相册
- 使用分层窗口及透明png图片实现一个异形窗口