首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法让SendInput()工作

无法让SendInput()工作
EN

Stack Overflow用户
提问于 2015-02-03 22:07:17
回答 2查看 2K关注 0票数 2

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

代码语言:javascript
复制
Error   1   The type or namespace name 'INPUT' could not be found (are you missing a using directive or an assembly reference?)

我只是找不出该用哪个图书馆。关于包含什么内容,我几乎没有任何信息,我所能找到的只是C++,或者在我尝试using时根本不存在。请帮帮忙!

我在试着让我的程序做个口交.这是代码,它是我找到并试图开始工作的许多版本之一。在这个版本中,程序也找不到INPUTSendInputEventType

代码语言:javascript
复制
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()));
        } 
    }
}

如果有人能帮忙,我会很高兴的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-03 22:22:06

您缺少了INPUT结构。如果你这么想的话,它不是来自System.Windows.Input (由于using而猜测)。

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

您的SendInputEventType实际上只是一个枚举或一个具有常量的类。PInvoke也有这个定义。

代码语言:javascript
复制
internal enum INPUT_TYPE : uint 
{
      INPUT_MOUSE = 0,
      INPUT_KEYBOARD = 1,
      INPUT_HARDWARE = 2
}

您可以更新代码以使用此名称,也可以将此枚举重命名以与代码匹配。由你决定。

下面是一个很好的答案,其中有一个用定义的结构实现SendInput的示例:如何编程鼠标移动,点击,右击和按键等在winform和wpf?

票数 0
EN

Stack Overflow用户

发布于 2015-02-03 22:19:05

你不需要这样的东西吗

代码语言:javascript
复制
[DllImport("user32.dll")]
   internal static extern uint SendInput (uint nInputs,
      [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
      int cbSize);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28309687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档