5

我想在 Windows 应用程序中单击,而不使用真正的鼠标(所以我可以最小化它)。就像机器人的行为一样。

我该怎么做?

4

5 回答 5

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上找到。

我敢肯定,如果您在 Internet 上搜索 PostMessage 鼠标事件的示例,您会发现很多

于 2013-02-28T22:26:23.590 回答
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 回答
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

然后,您需要将鼠标移动到该位置,或者避免该位置,您可能需要挂钩到正在运行的程序,并向其发送一个使其最小化的事件。

很难让这样的东西与 C# 一起使用,因为您需要将该 DLL 注入程序中。像 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 回答