ソフト開発

Windowsの自動操作にチャレンジ!(その2) – マウスでクリックしてみよう

少し時間があきましたが、前回はマウスをVisual C#から動作させました。
今回は、移動した後、マウスでクリックをしたいと思います。

今回やること

前回、実験したサンプルプロジェクトに、マウスクリックを追加して、目的の場所に移動した後、マウスの左クリックをしてみたいと思います。
前回行ったマウスの移動より簡単ですが、Windows APIを使用します。

Windows API関数の定義

前回のマウスの移動は、.NETで用意されている関数でできましたが、クリックは、mouse_eventというWindows API関数を使用します。
まずは、Windows API関数の定義を行います。

Windows API関数は、Windowsシステムが提供しているDLL(ダイナミック・リンク・ライブラリ)に格納されています。
このDLLの中に様々な動作をするプログラムコードが入っています。
今回は、mouse_event関数が格納されている「user32.dll」(Windowsのユーザー・インターフェースを管理)を使用します。

定義は、DLLをインポートして関数を定義するだけです。
まずは、DLLのインポートができるように、先頭に名前空間を定義します。

   using System.Runtime.InteropServices;

続いて、クラスの先頭に、次のコードを記述します。

   /// <summary>
   /// マウス操作のためのAPI
   /// </summary>
   /// <param name=”dwFlags”></param>
   /// <param name=”dx”></param>
   /// <param name=”dy”></param>
   /// <param name=”cButtons”></param>
   /// <param name=”dwExtraInfo”></param>
   [DllImport(“USER32.dll”, CallingConvention = CallingConvention.StdCall)]
   static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
   private const int MOUSEEVENTF_LEFTDOWN = 0x2;
   private const int MOUSEEVENTF_LEFTUP = 0x4;
   private const int MOUSEEVENTF_RIGHTDOWN = 0x8;
   private const int MOUSEEVENTF_RIGHTUP = 0x10;
   private const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
   private const int MOUSEEVENTF_MIDDLEUP = 0x40;

これで、「mouse_event」が使用できるようになりました。

クリック動作

それでは、マウスで左クリックをしてみたいと思います。
API関数を呼び出すだけですので非常に簡単です。

次のコードを、前回のサンプルプログラムのマウス移動完了後に挿入してみてください。

   // マウスクリック
   mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
   System.Threading.Thread.Sleep(300);
   mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);

これは、最初の「mouse_event」でマウスの左ボタンを押します。(押したまま)
次に、押してから話すまでのウエイトを入れています。(300ms)
そして最後の「mouse_event」でマウスの左ボタンを離しています。

このように、クリックする動作も、ボタンを押して、待って、離すという連続動作になります。
マウスの右クリックの場合は、「MOUSEEVENTF_RIGHTDOWN」に変更すればOKです。

「MOUSEEVENTF_LEFTDOWN」では、マウスの左ボタンを押したままですので、その状態でマウスを動作すれば、ドラッグになります。
このように、動作の組み合わせで、様々な動作ができるようになります。

実際の動作

サンプルプログラムを実行して、フォームの最大化にマウスを持っていき、表示されている座標を入力しましょう。

そして、開始をクリックします。
すると、前回確認したときと同じようにマウスが移動しますが、その後、最大化の所でマウスクリックを行い、フォームが最大化すると思います。
これを応用すれば、マウス操作の自動化ツールが出来そうです。

今回は、マウスクリックですが、ダブルクリックなら2回連続で実行、ドラッグは前述のようにマウスボタンを押したまま移動するなど応用でいつものマウス操作が出来てしまいます。
皆さんも、マウスが自動で動作するのは面白いので試してみてください。

サンプル

今回のサンプルプロジェクトは、下記からダウンロードできます。
試してみてください!