Click
実際にクリックせずにプロセスをシミュレートすることは可能ですか?
Click
たとえば、マウスを動かさずに電卓を動かしたい。これは可能ですか?
かなり典型的なラベル、フィールド、およびボタン アプリケーション内のボタンをクリックしようとしているだけの場合は、コントロールに対して少しの P/Invoke を使用できFindWindow
ますSendMessage
。
Spy++ にまだ慣れていない場合は、今が始める時です。
これは、Visual Studio 2012 RC の次の場所にパッケージ化されていますC:\Program Files\Microsoft Visual Studio 11.0\Common7\Tools
。他のバージョンでも同様に見つかるはずです。
コンソール C# アプリケーションとしてこれを試してください:
class Program
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
private const uint BM_CLICK = 0x00F5;
static void Main(string[] args)
{
// Get the handle of the window
var windowHandle = FindWindow((string)null, "Form1");
// Get button handle
var buttonHandle = FindWindowEx(windowHandle, IntPtr.Zero, (string)null, "A Huge Button");
// Send click to the button
SendMessage(buttonHandle, BM_CLICK, 0, 0);
}
}
これにより、「Form1」というタイトルのウィンドウへのハンドルが取得されます。そのハンドルを使用して、ウィンドウ内のボタンへのハンドルを取得します。次に、有用なパラメーターを持たないタイプ「BM_CLICK」のメッセージをボタン コントロールに送信します。
テスト用の WinForms アプリをターゲットとして使用しました。1 つのボタンと、カウンターをインクリメントするためのコード ビハインド。
P/Invoke コンソール アプリケーションを実行すると、カウンターの増分が表示されます。ただし、ボタンのアニメーションは表示されません。
Spy++ Message Logger 関数を使用することもできます。BM_CLICK と、おそらく WM_LBUTTONDOWN/WM_LBUTTONUP (手動でクリックすると得られるもの) へのフィルターをお勧めします。
それが役立つことを願っています!