- PR -

[C#] マウス操作をプログラム側から再現したい

1
投稿者投稿内容
こうすけ
会議室デビュー日: 2004/08/16
投稿数: 3
投稿日時: 2004-08-16 19:42
はじめまして。

マウス操作をプログラムで再現することは出来ますでしょうか。

(x,y)座標を指定すると、その場所をマウスでクリックしたような動作を行なうプログラムを書きたいのですが、
なにか方法をご存知でしたらお教え下さい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-16 23:08
SendInputかな?
未記入
会議室デビュー日: 2004/08/17
投稿数: 10
投稿日時: 2004-08-17 09:09
mouse_event?
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=mouse%5Fevent+P%2FInvoke
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-18 08:14
引用:

未記入さんの書き込み (2004-08-17 09:09) より:
mouse_event?
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&q=mouse%5Fevent+P%2FInvoke


http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_mouse_event.asp

Windows NT/2000/XPでは、SendInputを使ってください。
こうすけ
会議室デビュー日: 2004/08/16
投稿数: 3
投稿日時: 2004-08-19 17:43
皆様、返答ありがとうございます。
他の問題に取り組んでいて返信が遅くなってしまいました。
申し訳ございません。

質問した件ですが、mouse_eventを使って実装できました。
SetInputも調べてみたのですが、使い方がよくわからなくて・・。

ところで、
特定のウィンドウを基準とした(x,y)座標からマウス操作を再現することは可能でしょうか?
現在の実装では、ディスプレイ全体を基準とした(x,y)座標によるマウス操作の再現になっています。
基準とするウィンドウの位置や大きさを取得して、という方法がありそうな気もするのですが、どうすればよいでしょうか。

マウス操作の再現は以下のようなコードで実装しています。
---
using System.Runtime.InteropServices;

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;

[DllImport("user32.dll")]
private static extern void mouse_event(
UInt32 dwFlags,
UInt32 dx,
UInt32 dy,
UInt32 dwData,
IntPtr dwExtraInfo
);

System.Drawing.Point p = new System.Drawing.Point(x, y);
Cursor.Position = p;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, new System.IntPtr());
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, new System.IntPtr());
--
x,yの値は適当に自分で指定して、マウスをクリック
こうすけ
会議室デビュー日: 2004/08/16
投稿数: 3
投稿日時: 2004-08-19 18:45
調べてみてPointToScreenを使えば出来そうだということがわかったのですが、
例えば
pnt = pictureBox1.PointToScreen(p);
のよう使う時の pictureBox1 の部分が外部プログラムによるウィンドウの場合はどうしたらよいでしょうか?

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-19 19:43
System.Windows.Forms.Form.Controlsから対象のWindowを取得して、System.Windows.Forms.Form.Boundsで、座標が計算できる・・・と思います。
1

スキルアップ/キャリアアップ(JOB@IT)