매개변수로 받은 비트맵에 커서를 그려넣는 함수
procedure DrawCursorImage(aBitmap: TBitmap);
var
MyCursor: TIcon;
dwCurrentThreadID: Cardinal;
dwThreadID: Cardinal;
begin
var
MyCursor: TIcon;
dwCurrentThreadID: Cardinal;
dwThreadID: Cardinal;
begin
// 커서가 있는 윈도우 Thread에 현재 Thread 를 붙임
dwThreadID:=GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos));
dwCurrentThreadID:=GetCurrentThreadID;
AttachThreadInput(dwCurrentThreadID, dwThreadID, True);
dwThreadID:=GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos));
dwCurrentThreadID:=GetCurrentThreadID;
AttachThreadInput(dwCurrentThreadID, dwThreadID, True);
MyCursor:=TIcon.Create;
try
try
// 커서를 얻어와서 매개변수로 받은 비트맵에 그림
MyCursor.Handle:=GetCursor;
DrawIconEx(aBitmap.Canvas.Handle, Mouse.CursorPos.X, Mouse.CursorPos.Y,
MyCursor.Handle, 32, 32, 0, 0, DI_NORMAL);
finally
FreeAndNil(MyCursor);
MyCursor.Handle:=GetCursor;
DrawIconEx(aBitmap.Canvas.Handle, Mouse.CursorPos.X, Mouse.CursorPos.Y,
MyCursor.Handle, 32, 32, 0, 0, DI_NORMAL);
finally
FreeAndNil(MyCursor);
// 붙였던 Thread 를 뗌
AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
end;
end;
AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
end;
end;
위의 함수를 이용하여 커서이미지를 포함한 전체화면 캡쳐
procedure TForm1.Button1Click(Sender: TObject);
var
btmScreen: TBitmap;
DC: HDC;
var
btmScreen: TBitmap;
DC: HDC;
begin
btmScreen:=TBitmap.Create;
DC:=GetDC(0);
try
btmScreen.Width:=Screen.Width;
btmScreen.Height:=Screen.Height;
Bitblt(btmScreen.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
DrawCursorImage(btmScreen);
Image1.Picture.Bitmap.Assign(btmScreen);
finally
FreeAndNil(btmScreen);
ReleaseDC(0, DC);
end;
end;
btmScreen:=TBitmap.Create;
DC:=GetDC(0);
try
btmScreen.Width:=Screen.Width;
btmScreen.Height:=Screen.Height;
Bitblt(btmScreen.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
DrawCursorImage(btmScreen);
Image1.Picture.Bitmap.Assign(btmScreen);
finally
FreeAndNil(btmScreen);
ReleaseDC(0, DC);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] TImageList 를 이용해 TImage 에 그리기, TImage 에 글자 쓰기 (0) | 2009.04.18 |
---|---|
[Delphi] 현재 IMM 상태 (한글/영문) 체크, 변경 (0) | 2009.04.18 |
[Delphi] Indy10 TCP - 구조체 데이터 주고받기 (0) | 2009.04.18 |
[Delphi] WM_COPYDATA 로 통신하기 (0) | 2009.04.18 |
[Delphi] Indy10 - TIdTCPServer 를 이용해 원하는 클라이언트에 원하는 타이밍에 Send 하기 (0) | 2009.04.18 |