[英]Can't get SendInput() to work
我有点绝望。 我已经尝试了几个小时,但是我无法使SendInput()
工作。 老实说,我什至无法得到认可。 它总是说:
Error 1 The type or namespace name 'INPUT' could not be found (are you missing a using directive or an assembly reference?)
而且我只是找不到要使用的库。 关于要包含的内容的信息几乎为零,我所能找到的全部是针对C ++的,或者当我尝试using
它时根本不存在。 请帮忙!
我正在尝试让我的程序执行mouseclick ...这是代码,它是我发现并尝试开始工作的众多版本之一。 在此版本中,该程序也找不到INPUT
和SendInputEventType
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace autoPlayer
{
class Win32
{
enum SystemMetric
{
SM_CXSCREEN = 0,
SM_CYSCREEN = 1,
}
[DllImport("user32.dll")]
static extern int GetSystemMetrics(SystemMetric smIndex);
int CalculateAbsoluteCoordinateX(int x)
{
return (x * 65536) / GetSystemMetrics(SystemMetric.SM_CXSCREEN);
}
int CalculateAbsoluteCoordinateY(int y)
{
return (y * 65536) / GetSystemMetrics(SystemMetric.SM_CYSCREEN);
}
public static void ClickLeftMouseButton(int x, int y)
{
INPUT mouseInput = new INPUT();
mouseInput.type = SendInputEventType.InputMouse;
mouseInput.mkhi.mi.dx = CalculateAbsoluteCoordinateX(x);
mouseInput.mkhi.mi.dy = CalculateAbsoluteCoordinateY(y);
mouseInput.mkhi.mi.mouseData = 0;
mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_ABSOLUTE;
SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));
mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN;
SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));
mouseInput.mkhi.mi.dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTUP;
SendInput(1, ref mouseInput, Marshal.SizeOf(new INPUT()));
}
}
}
如果有人可以帮助我,我将非常高兴!
您不需要这样的东西吗?
[DllImport("user32.dll")]
internal static extern uint SendInput (uint nInputs,
[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
int cbSize);
您缺少INPUT
结构。 如果您是这样想的话,它就不是来自System.Windows.Input
(由于using
猜测)。
您可以在此处找到必要的C#和VB.NET结构
您的SendInputEventType
实际上只是一个枚举或一个带有常量的类。 PInvoke也有定义 。
internal enum INPUT_TYPE : uint
{
INPUT_MOUSE = 0,
INPUT_KEYBOARD = 1,
INPUT_HARDWARE = 2
}
您可以更新代码以使用该名称,也可以重命名该枚举以匹配您的代码。 由你决定。
这是一个很好的答案,其中包含一个使用定义的结构实现SendInput
的示例: 如何以编程方式在Winform和WPF中进行鼠标移动,单击,右键单击和按键等操作?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.