Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определение глобального типа курсора мыши в операционной системе Windows для различных языков программирования

Delphi , Синтаксис , Справочник по API-функциям

Определение глобального типа курсора мыши в операционной системе Windows

Вопрос пользователя заключается в поиске способа определения глобального типа курсора мыши в операционной системе Windows, который был бы доступен даже вне контекста приложения или в случае, если приложение не имеет окон. Решение должно быть применимо для языков программирования C#, Delphi и чистого WinAPI.

Решение проблемы

Для получения информации о глобальном курсоре мыши в Windows, можно использовать функцию GetCursorInfo, которая предоставляет информацию о текущем курсоре. В Delphi эта функция может быть вызвана следующим образом:

uses
  Winapi.Windows;

var
  CursorInfo: TCursorInfo;
begin
  CursorInfo.cbSize := SizeOf(TCursorInfo);
  if GetCursorInfo(CursorInfo) then
    // Здесь можно обработать информацию о курсоре
end;

Обратите внимание, что GetCursorInfo возвращает только дескриптор курсора, и для определения типа курсора необходимо иметь кэш дескрипторов системных курсов, созданный при старте приложения. Пример такого кэша и функции для определения типа курсора приведен ниже:

const
  HighCursor = 13;
  // ... список констант OEMCursors и CursorNames ...

type
  TForm1 = class(TForm)
    // ... компоненты формы ...
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    // ... другие методы ...
  private
    FCursorHandles: array [0..HighCursor] of HCURSOR;
    // ... другие приватные поля ...
  public
  end;

implementation

// ... инициализация кэша дескрипторов при старте формы ...

procedure TForm1.Timer1Timer(Sender: TObject);
var
  CursorInfo: TCursorInfo;
begin
  CursorInfo.cbSize := SizeOf(CursorInfo);
  if GetCursorInfo(CursorInfo) then
    Label1.Caption := GetCursorName(CursorInfo.hCursor)
  else
    Label1.Caption := 'Fail: ' + SysErrorMessage(GetLastError);
end;

function TForm1.GetCursorName(Cursor: HCURSOR): string;
begin
  // ... функция для определения названия курсора по его дескриптору ...
end;

Функция GetCursorName ищет в кэше дескриптор, соответствующий текущему глобальному курсору, и возвращает его название из предварительно заданного массива.

Альтернативный ответ на C

Для получения информации о том, является ли глобальный курсор часовым (hourglass), можно использовать следующий код на C#:

private static bool IsWaitCursor()
{
    var h = Cursors.WaitCursor.Handle;

    CURSORINFO pci;
    pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
    if(!GetCursorInfo(out pci))
        throw new Win32Exception(Marshal.GetLastWin32Error());

    return pci.hCursor == h;
}

Используя эту информацию, можно расширить функционал для проверки других типов курсора по аналогии с проверкой на часовой курсор.

Заключение

Получение глобального типа курсора мыши в Windows является задачей, требующей использования функций WinAPI, таких как GetCursorInfo. Для использования этой информации в приложениях на Delphi и C# необходимо создать кэш дескрипторов системных курсора и реализовать функцию для сопоставления дескриптора с типом курсора.

Создано по материалам из источника по ссылке.

Пользователь интересуется способами определения глобального типа курсора мыши в операционной системе Windows для использования в приложениях на C#, Delphi и чистом WinAPI.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 18:51:53/0.0051369667053223/1