Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';无法使SendInput()正常工作_C#_Visual Studio 2013_Mouse_Pinvoke_Sendinput - Fatal编程技术网

C# Can';无法使SendInput()正常工作

C# Can';无法使SendInput()正常工作,c#,visual-studio-2013,mouse,pinvoke,sendinput,C#,Visual Studio 2013,Mouse,Pinvoke,Sendinput,我有点绝望。我已经试了几个小时了,但是我就是无法让SendInput()工作。老实说,我甚至不能让它被认出来。它总是说: Error 1 The type or namespace name 'INPUT' could not be found (are you missing a using directive or an assembly reference?) 我就是不知道该用哪个库。关于这个包含的信息几乎是零,我能找到的只是C++,或者在我尝试使用< > 时根本不存在。请帮忙

我有点绝望。我已经试了几个小时了,但是我就是无法让
SendInput()
工作。老实说,我甚至不能让它被认出来。它总是说:

Error   1   The type or namespace name 'INPUT' could not be found (are you missing a using directive or an assembly reference?)
我就是不知道该用哪个库。关于这个包含的信息几乎是零,我能找到的只是C++,或者在我尝试使用< <代码> > <代码>时根本不存在。请帮忙

我想让我的程序做鼠标点击。。。这是代码,这是我找到并试图开始工作的许多版本之一。 在此版本中,程序也找不到
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);

您缺少
输入
结构。它不是来自
System.Windows.Input
,如果您是这么想的(由于使用
而猜测)

您可以找到必要的C#和VB.NET结构

您的
SendInputEventType
实际上只是一个枚举或一个带有常量的类

可以更新代码以使用此名称,也可以重命名此枚举以匹配代码。这取决于你


下面是一个很好的答案,它提供了一个使用已定义的结构实现
SendInput
的示例:

签出此链接:为什么需要此链接?SendKeys有什么问题?还是UI自动化?很可能你解决问题的方法不对。哦,谢谢你,太好了!在更多地使用不同的版本和结构之后,我成功地让它工作了(我必须添加一些更多的内容才能让sendInput工作!)最后,这就是我要做的:@Zampano sendInput是解决您问题的错误方法。
internal enum INPUT_TYPE : uint 
{
      INPUT_MOUSE = 0,
      INPUT_KEYBOARD = 1,
      INPUT_HARDWARE = 2
}