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

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;

  …

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