2011-02-02 16 views
1

Monoを使用して、現在Windowsで動作するC#プログラム(現在はWPFですが、WindowsフォームまたはSilverlightに変更してMonoが動作するようにします) Macで動く私が最初にできるようにする必要があり、これはMac上で動作するためにはマウスでMac OSをクリックして実行中のOSアプリケーションを検出します

[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); 

:私はマウスがクリックされたときに検出し、また、マウスをクリックして、そのようなネイティブWindowsコードを使用

プログラムがMacまたはWindowsで実行されているかどうかを検出し、マウスがクリックされたかどうかを検出する、またはマウスをクリックするための適切なコードを実行します。何かのように:どのようにMac上でマウスをクリックしてください

  1. 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つの質問がありますか? (mouse_eventに相当)

  2. Macでのマウスクリックをどのように検出しますか? (GetAsyncKeyStateに相当)
  3. アプリケーションが実行されているオペレーティングシステムをどのように検出しますか?

答えて

3

オペレーティングシステムの検出は簡単ですが、プラットフォーム検出コードhereがあります。

他の2つはより硬いです。 AppleのネイティブのCarbonまたはCocoa APIを見て、あなたが望むことをやり遂げ、次にそれらのAPIをP/Invokeする方法を理解する必要があります。 FWIW、私はそれが実際に公開APIでマウスを制御することが可能かどうかはわかりません。 some of this stuffを行う方法を説明するサイトがいくつかあるようです。

開始位置は、HIGetMousePosition(Carbon)または[NSEvent mouseLocation](Cocoa)です。多くの高レベルCarbon APIは推奨されていませんが、Cocoaで使用されている低レベルC APIのコアを形成しています。 OTOH CocoaはP/Invokeよりも複雑なObjective-Cとの相互作用を意味しますが、MonoMacにはこれを簡単にするAPIがいくつかあります。

関連する問題