[英]Can't get SendInput() to work
I'm kind of desperate. 我有点绝望。 I have been trying for hours now, but I just can't get
SendInput()
to work. 我已经尝试了几个小时,但是我无法使
SendInput()
工作。 To be honest, I can't even get it to be recognized. 老实说,我什至无法得到认可。 It always says:
它总是说:
Error 1 The type or namespace name 'INPUT' could not be found (are you missing a using directive or an assembly reference?)
And I just can't find out which libraries to use. 而且我只是找不到要使用的库。 There's almost zero information about what to include for this, all I can find is for C++ or is simply not existing when I try
using
it. 关于要包含的内容的信息几乎为零,我所能找到的全部是针对C ++的,或者当我尝试
using
它时根本不存在。 Please Help! 请帮忙!
I'm trying to make my program do a mouseclick... Here's the code, it's one of many versions I found and tried to get to work. 我正在尝试让我的程序执行mouseclick ...这是代码,它是我发现并尝试开始工作的众多版本之一。 In this version, the program also can't find
INPUT
and SendInputEventType
在此版本中,该程序也找不到
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()));
}
}
}
I would be so glad If anyone could help! 如果有人可以帮助我,我将非常高兴!
Don't you need something like this: 您不需要这样的东西吗?
[DllImport("user32.dll")]
internal static extern uint SendInput (uint nInputs,
[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
int cbSize);
You are missing the INPUT
structure. 您缺少
INPUT
结构。 It doesn't come from System.Windows.Input
if that's what you thought (guessing due to using
). 如果您是这样想的话,它就不是来自
System.Windows.Input
(由于using
猜测)。
You can find the necessary C# and VB.NET structures here 您可以在此处找到必要的C#和VB.NET结构
Your SendInputEventType
is really just going to be an enum or a class with constants. 您的
SendInputEventType
实际上只是一个枚举或一个带有常量的类。 PInvoke has that defined as well . PInvoke也有定义 。
internal enum INPUT_TYPE : uint
{
INPUT_MOUSE = 0,
INPUT_KEYBOARD = 1,
INPUT_HARDWARE = 2
}
You can update your code to use this name or rename this enum to match your code. 您可以更新代码以使用该名称,也可以重命名该枚举以匹配您的代码。 It's up to you.
由你决定。
Here is a great answer that has an example of implementing SendInput
with those structures defined: how to programatically mouse move,click,right click and keypress, etc. in winform and wpf? 这是一个很好的答案,其中包含一个使用定义的结构实现
SendInput
的示例: 如何以编程方式在Winform和WPF中进行鼠标移动,单击,右键单击和按键等操作?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.