我想在 Windows 应用程序中单击,而不使用真正的鼠标(所以我可以最小化它)。就像机器人的行为一样。
我该怎么做?
我认为您正在寻找的功能是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 鼠标事件的示例,您会发现很多
您可以使用计时器,或处理按键,并在计时器滴答或按键功能中创建模拟鼠标点击,使用 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";
}
}
}
[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/找到了这个。
你需要它所在机器的分辨率,在System.Windows.Forms.Screen
这里使用类:SO
然后,您需要将鼠标移动到该位置,或者避免该位置,您可能需要挂钩到正在运行的程序,并向其发送一个使其最小化的事件。
很难让这样的东西与 C# 一起使用,因为您需要将该 DLL 注入程序中。像 C 这样的低级语言可能会有所帮助。
您可以使用窗口自动化在窗口中找到最小化按钮并执行单击。我发现它很容易并且经常使用。这是了解整个概念的链接。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff486375(v=vs.85).aspx