Q&A

  • 전역 핫키가 겜내에서 안 먹혀여...ㅡㅡ;
핫키를 사용해서 겜상의 스크린샷을 하는 기능을 만들었습니다.



(물론 여기서 구한 소스를 이용했지만..ㅡㅡ;)



전 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.

0  COMMENTS