実際のマウスを使用せずに、Windows アプリケーションでクリックを実行したい (最小化できるようにするため)。ボットの振る舞いによく似ています。
どうすればいいですか?
タイマーを使用するか、キーの押下を処理し、user32.dll ファイルを使用して、タイマーの目盛りまたはキーの押下関数でマウス クリックをシミュレートすることができます (タイマー間隔を処理できるようにフォームの形状にすることをお勧めします...):
using System;
using System.Windows.Forms;
namespace Clicker
{
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
private const int MOUSEEVENT_LEFTDOWN = 0x02;
private const int MOUSEEVENT_LEFTUP = 0x04;
private const int MOUSEEVENT_MIDDLEDOWN = 0x20;
private const int MOUSEEVENT_MIDDLEUP = 0x40;
private const int MOUSEEVENT_RIGHTDOWN = 0x08;
private const int MOUSEEVENT_RIGHTUP = 0x10;
private int count = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
label2.Text = "Timer is on";
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
label2.Text = "Timer is off";
}
private void timer1_Tick(object sender, EventArgs e)
{
mouse_event(MOUSEEVENT_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENT_LEFTUP, 0, 0, 0, 0);
count++;
label3.Text = count + " amount of clicks";
}
}
}
あなたが探している機能はPostMessage
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(int hWnd, uint Msg, int wParam, int lParam);
詳しくは codeprojectを参照してください。また、キーストロークを送信するデモ プロジェクトをダウンロードできます。
このメソッドは、使用するプロセス ハンドル (hWnd) に基づいて、プログラムに関連付けられた入力キューにメッセージを直接ポストします。
この関数を使用して、次のようにボタン イベントを投稿することで、マウス クリックを送信することもできます。
PostMessage(hWnd, WM_LBUTTONDBLCLK, 0, l);
これらのボタン イベントの詳細については、MSDN を参照してください。
インターネットで PostMessage マウス イベントのサンプルを検索すると、たくさん見つかると思います。
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;
public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
public const int MOUSEEVENTF_RIGHTUP = 0x10;
public void MouseClick()
{
int x = 100;
int y = 100;
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
使用しているマシンの解像度が必要です。System.Windows.Forms.Screen
ここでクラスを使用してください:SO
次に、マウスをその場所に移動する必要があります。それを回避するには、実行中のプログラムにフックして、最小化するイベントを送信する必要があります。
そのDLLをプログラムに挿入する必要があるため、このようなものをC#で動作させるのは難しいでしょう。Cのような低水準言語が役立つ場合があります。
ウィンドウオートメーションを使用して、ウィンドウ内の最小化ボタンを見つけてクリックを実行できます。簡単でよく使っていると思います。ここに、概念全体を理解するためのリンクがあります。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff486375(v=vs.85).aspx