PNotifyIconData;
begin
//
注册热键为Ctrl+Shift+A
RegisterHotKey(Form1.handle,0,MOD_SHIFT OR MOD_CONTROL,65);
//在任务栏上建立图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_ICONMESSAGE;
lpData.uID :=0;
lpData.szTip := '屏幕捕捉';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
lpData:PNotifyIconData;
begin
//退出时删除任务栏图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_ICONMESSAGE;
lpData.uID :=0;
lpData.szTip := '屏幕捕捉';
lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
//退出时注销窗口热键
UnRegisterHotKey(Form1.Handle,0);
if iBitmapValide then
begin
tmpBitmap.FreeImage;
tmpBitmap.Free;
iBitmapValide:=False;
end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: T
MouseButton;Shift: TShiftState; X, Y: Integer);
begin
//按下鼠标左键保存窗口图象
if (Button=mbLeft)then
with SavePic do
begin
DefaultExt := 'Bmp';
Execute;
if FileName<>'' then
tmpBitmap.SaveToFile(FileName);
end;
//保存完图象后删除位图
tmpBitmap.FreeImage;
tmpBitmap.Free;
iBitmapValide:=False;
Form1.Visible := False;
end;
end.
按F9键运行程序,将光标移动到任意窗口上按下热键Ctrl+Shift+A,则光标所在窗口被捕捉下来(同时被捕捉区域被红色边框框住作为标识)。在框内按下鼠标左键就可以保存位图图像。这个
程序也可以用来捕捉菜单。
同时程序也可以将图象发送到剪贴板中,只要将上面程序中Form1的OnMouseUp事件置换为下面的程序段就可以了(程序2):
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
MyFormat : Word;
AData : THandle;
APalette : HPALETTE;
begin
if (Button=mbLeft)then
//按下鼠标左键将tmpBitmap中的内容发送的剪贴板
begin
tmpBitmap.SaveToClipBoardFormat(MyFormat,AData,APalette);
Cli