Как получить текущую иконку курсора мыши?

Delphi FAQ >> Графика

В некоторых случаях для получения идентификатора иконки курсора достаточно вызвать функцию WinApi GetCursor. Но в случае когда курсор находится не над окном нашей программы, сначала нужно подключиться к процессу-родителю окна, над которым сейчас курсор. Функция на Delphi GetCursorInfoWithIcon возвращает данные курсора вместе с идентификатором его иконки.

//получаем данные курсора вместе с идентификатором иконки курсора
function GetCursorInfoWithIcon: TCursorInfo;
var
  hWindow: HWND;
  pt: TPoint;
  dwThreadID, dwCurrentThreadID: DWORD;
begin
  //начальное значение идентификатор
  Result.hCursor := 0;
  ZeroMemory(@Result, SizeOf(Result));
  // Определяем, над каким окном сейчас находится курсор
  //получаем координаты курсора мыши
  if GetCursorPos(pt) then
  begin
    Result.ptScreenPos := pt;
    //определяем идентификатор окна под курсором
    hWindow := WindowFromPoint(pt);
    if IsWindow(hWindow) then
    begin
      // Получаем идентификатор потока процесса, который имеет это окно
      dwThreadID := GetWindowThreadProcessId(hWindow, nil);
      // сравниваем этот идентификатор с нашим
      dwCurrentThreadID := GetCurrentThreadId;
      // если курсор не над нашим окном, то подключаемся к потоку-владельцу курсора
      if (dwCurrentThreadID <> dwThreadID) then
      begin
        if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
        begin
          // получаем идентификатор иконки курсора
          Result.hCursor := GetCursor;
          AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
        end;
      end
      else
      begin
        //если окно наше, то сразу получаем идентификатор иконки
        Result.hCursor := GetCursor;
      end;
    end;
  end;
end;

Пример использования:

var
CursorInfo: TCursorInfo;
begin
  CursorInfo := GetCursorInfoWithIcon;
  Image1.Picture.Icon.Handle := CursorInfo.hCursor;

  …


Раньше сателлитами называли сайты, помогающие продвижению основного. Теперь сателлит — это просто небольшой сайт, зачастую сделанный для продажи ссылок.