您的位置:首页 > 其它

如何使用系统级热键捕捉当前窗口保存为 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: