Щелкните мышью в Mac OS и определите, в каком приложении ОС запущено

Я хочу использовать 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. Как определить, в какой операционной системе работает ваше приложение?

person Jack    schedule 02.02.2011    source источник


Ответы (1)


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

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

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

person Mikayla Hutchinson    schedule 02.02.2011