現在Windowsで動作しているC#プログラム(現在はWPFですが、Monoが動作するようにWindowsフォームまたはSilverlightに変更します)をMacで動作させるためにMonoを使用したいと思います。
ネイティブの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つの質問があります:
- Macでマウスをどのようにクリックしますか?(mouse_eventに相当)
- Macでのマウスクリックをどのように検出しますか?(GetAsyncKeyStateと同等)
- アプリケーションが実行されているオペレーティングシステムをどのように検出しますか?