【问题标题】:Mouse Click in Mac OS & Detect Which OS Application is Running in在 Mac OS 中单击鼠标并检测正在运行的 OS 应用程序
【发布时间】:2011-02-02 16:53:13
【问题描述】:

我想使用 Mono 来允许我目前在 Windows 中运行的 C# 程序(目前是 WPF,但将其更改为 Windows Forms 或 Silverlight 以便 Mono 可以运行)在 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. 如何检测您的应用程序在哪个操作系统中运行?

【问题讨论】:

    标签: c# macos mono monomac


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-18
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多