Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Получить дескриптор текущего курсора

01.01.2007
{ 
  The GetCursor() API is limited in that it does not, by default, return a handle to the current 
  cursor when that cursor is owned by another thread. This article demonstrates a way to retrieve 
  the current cursor regardless of what thread owns it. 
  For example, when you wish to include the image of the cursor in a screen capture. 
}
 
 
 function GetCursorHandle: HCURSOR;
 var
   hWindow: HWND;
   pt: TPoint;
   pIconInfo: TIconInfo;
   dwThreadID, dwCurrentThreadID: DWORD;
 begin
   // Find out which window owns the cursor 
  // Das zum Mauszeiger zugehцrige Fenster finden 
  GetCursorPos(pt);
   hWindow := WindowFromPoint(pt);
 
   // Get the thread ID for the cursor owner. 
  // Thread ID des Fensters ermitteln 
  dwThreadID := GetWindowThreadProcessId(hWindow, nil);
 
   // Get the thread ID for the current thread 
  // Thread ID fьr den aktuellen Thread ermitteln 
  dwCurrentThreadID := GetCurrentThreadId;
 
   // If the cursor owner is not us then we must attach to 
  // the other thread in so that we can use GetCursor() to 
  // return the correct hCursor 
 
  // Wenn der Mauszeiger zu einem anderen Thread gehцrt, mьssen wir 
  // an den anderen Thread anhдngen. 
 
  if (dwCurrentThreadID <> dwThreadID) then
   begin
     if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
     begin
       // Das Handle des Mauszeigers ermitteln 
      // Get the handle to the cursor 
      Result := GetCursor;
       AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
     end;
   end else
   begin
     Result := GetCursor;
   end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
   CurPosX, CurPoxY: Integer;
   MyCursor: TIcon;
   pIconInfo: TIconInfo;
 begin
   MyCursor := TIcon.Create;
   try
     MyCursor.Handle := GetCursorHandle;
     // Retrieves information about the specified cursor. 
    // Informationen ьber den Mauszeiger auslesen 
    GetIconInfo(MyCursor.Handle, pIconInfo);
     CurPosX := pIconInfo.xHotspot;
     CurPoxY := pIconInfo.yHotspot;
     // Draw the Cursor on the form 
    // Den Mauszeiger auf die Form zeichnen 
    Canvas.Draw(CurPoxY, CurPoxY, MyCursor);
   finally
     MyCursor.ReleaseHandle;
     MyCursor.Free;
   end;
 end;
 
 // Another Solution: 
// Andere Mцglichkeit: 
 
procedure TForm1.Timer1Timer(Sender: TObject);
 var
   CI: TCursorInfo;
 begin
   CI.cbSize := SizeOf(CI);
   GetCursorInfo(CI);
   Image1.Picture.Icon.Handle := CI.hCursor;
 end;