Щелчок мыши в Mac OS и определить, в каком приложении запущено приложение - PullRequest
1 голос
/ 02 февраля 2011

Я хочу использовать Mono, чтобы разрешить моей программе C # (в настоящее время WPF, но заменит ее на Windows Forms или Silverlight, чтобы Mono работал), которая в настоящее время работает в Windows, для работы на Mac.

Я использую собственный код Windows для определения нажатия мыши, а также для щелчка мыши, например:

[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
[DllImport("User32.dll")]
public static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);

Для того, чтобы это работало на Mac, мне необходимо сначала определить, запущена ли программа на Mac или в Windows, а затем запустить соответствующий код для определения, нажата ли мышь, или для нажатия кнопки. мышь. Что-то вроде:

if (runningInWindows())
{
    // Windows mouse click...
    System.Windows.Forms.Cursor.Position = new System.Drawing.Point(X, Y);
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

    // Or if I want to detect a mouse click...
    bool mouseClicked = GetAsyncKeyState(System.Windows.Forms.Keys.LButton) != 0;
}
else
{
    // Running on a Mac, so do Mac mouse click...
    // Or detect a mouse click on a Mac...
}

По сути, у меня есть 3 вопроса:

  1. Как вы щелкаете мышью на Mac? (эквивалент mouse_event)
  2. Как вы обнаруживаете щелчок мыши на Mac? (эквивалент GetAsyncKeyState)
  3. Как определить, в какой операционной системе работает ваше приложение?

1 Ответ

3 голосов
/ 03 февраля 2011

Обнаружение операционной системы легко, вы можете найти код обнаружения платформы здесь .

Остальные два сложнее.Вы должны взглянуть на API Apple Carbon или Cocoa и выяснить, как делать то, что вам нужно, а затем P / Invoke этих API.FWIW, я не знаю, возможно ли вообще управлять мышью с помощью публичного API.Похоже, что есть сайты, которые объясняют, как сделать некоторые из этих вещей .

Для начала, получение положения мыши кажется возможным с помощью HIGetMousePosition (Carbon) или[NSEvent mouseLocation] (какао).Хотя многие высокоуровневые API-интерфейсы Carbon устарели, они все еще составляют ядро ​​низкоуровневого C-API, используемого Cocoa.Может быть сложно понять, как читать события Carbon и извлекать из них информацию. OTOH Cocoa означает взаимодействие с Objective-C, которое сложнее, чем P / Invoke, но в MonoMac есть некоторые API, которые могут это упростить.

...