我想使用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个问题:
答案 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可以使它更容易。