매개변수로 받은 비트맵에 커서를 그려넣는 함수
 
procedure DrawCursorImage(aBitmap: TBitmap);
var
  MyCursor: TIcon;
  dwCurrentThreadID: Cardinal;
  dwThreadID: Cardinal;
begin
  // 커서가 있는 윈도우 Thread에 현재 Thread 를 붙임
  dwThreadID:=GetWindowThreadProcessID(WindowFromPoint(Mouse.CursorPos));
  dwCurrentThreadID:=GetCurrentThreadID;
  AttachThreadInput(dwCurrentThreadID, dwThreadID, True);
 
  MyCursor:=TIcon.Create;
  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);
    // 붙였던 Thread 를 뗌
    AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
  end;
end;
 
 
 
 
 
 
 
위의 함수를 이용하여 커서이미지를 포함한 전체화면 캡쳐
 
procedure TForm1.Button1Click(Sender: TObject);
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;





Posted by bloodguy
,