5

実際のマウスを使用せずに、Windows アプリケーションでクリックを実行したい (最小化できるようにするため)。ボットの振る舞いによく似ています。

どうすればいいですか?

4

5 に答える 5

4

タイマーを使用するか、キーの押下を処理し、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";
    }

}

}

于 2016-10-28T14:18:59.373 に答える
4

あなたが探している機能は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 マウス イベントのサンプルを検索すると、たくさん見つかると思います。

于 2013-02-28T22:26:23.590 に答える
2
[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);
}

これはhttp://social.msdn.microsoft.com/forums/en-US/winforms/thread/86dcf918-0e48-40c2-88ae-0a09797db1ab/で見つけました。

于 2013-02-28T21:49:32.663 に答える
1

使用しているマシンの解像度が必要です。System.Windows.Forms.Screenここでクラスを使用してください:SO

次に、マウスをその場所に移動する必要があります。それを回避するには、実行中のプログラムにフックして、最小化するイベントを送信する必要があります。

そのDLLをプログラムに挿入する必要があるため、このようなものをC#で動作させるのは難しいでしょう。Cのような低水準言語が役立つ場合があります。

ここに簡単な説明/質問があります

于 2013-02-28T21:53:09.630 に答える
0

ウィンドウオートメーションを使用して、ウィンドウ内の最小化ボタンを見つけてクリックを実行できます。簡単でよく使っていると思います。ここに、概念全体を理解するためのリンクがあります。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff486375(v=vs.85).aspx

于 2016-02-11T15:46:51.633 に答える