鼠标单击Mac OS&检测正在运行的OS应用程序

时间:2011-02-02 16:53:13

标签: c# macos mono monomac

我想使用Mono来允许我的C#程序(目前是WPF,但会将其更改为Windows窗体或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 个答案:

答案 0 :(得分:3)

检测操作系统很简单,您可以找到一些平台检测代码here

另外两个更难。您必须查看Apple的原生Carbon或Cocoa API,并找出如何做您想要的事情,然后P / Invoke这些API。 FWIW,我不知道是否可以用公共API控制鼠标。似乎有一些网站可以解释如何做some of this stuff

首先,通过HIGetMousePosition(碳)或[NSEvent mouseLocation](可可)似乎可以获得鼠标位置。尽管许多高级Carbon API已被弃用,但它仍然构成了Cocoa使用的低级C API的核心。可能很难弄清楚如何读取碳事件并从中提取信息,OTOH Cocoa意味着与Objective-C互操作,后者比P / Invoke更复杂 - 但是MonoMac有一些API可以使它更容易。