핫키를 사용해서 겜상의 스크린샷을 하는 기능을 만들었습니다.
(물론 여기서 구한 소스를 이용했지만..ㅡㅡ;)
전 2000에서 만들었는데 2000에선 겜내에서나 일반프로그램에서나
아무런 이상없이 작동을 했는데요.98의 경우는 일반프로그램에선
작동을 하는데 겜내에선 핫키가 안먹더군요..왜 그럴까여??
아래는 제가 사용한 핫키를 이용한 스크린샷 소스입니다..
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls,FileCtrl,Dib;
type
TMainForm = class(TForm)
btnClose: TButton;
DXDIB1: TDXDIB;
Memo1: TMemo;
procedure btnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
public
FAtom: TAtom;
bmp : TDib;
MainPalette : TRgbQuads;
procedure WMHotKey(var M: TMessage); message WM_HOTKEY;
procedure CaptureScreen;
procedure LoadPalette;
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
procedure TMainForm.WMHotKey(var M: TMessage);
begin
// if M.WParam = FAtom then begin
// if M.LParamHi = VK_PAUSE then begin
CaptureScreen;
// end;
// end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FAtom := GlobalAddAtom('TEST_SHOT');
RegisterHotKey(Handle, FAtom, 0, VK_PAUSE);
Bmp := Tdib.Create;
LoadPalette;
Bmp.ColorTable := MainPalette;
Bmp.UpdatePalette;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, FAtom);
GlobalDeleteAtom(FAtom);
bmp.free;
end;
procedure TMainForm.Loadpalette;
begin
MainPalette := Dxdib1.DIB.ColorTable;
end;
procedure TMainForm.CaptureScreen;
var
ScreenDC : HDC;
begin
Bmp.Height := Screen.Height;
Bmp.Width := Screen.Width;
ScreenDc := GetDC(0);
bitblt(bmp.canvas.handle,0,0,screen.width,screen.height,
screendc,0,0,srccopy);
ReleaseDC(0,ScreenDC);
Bmp.SaveToFile(ExtractFilePath(Application.ExeName)+''
+intToStr(GetTickcount)+'.bmp');
end;
procedure TMainForm.btnCloseClick(Sender: TObject);
begin
close;
end;
end.