C# .NET - SendKeys、SendInput、SendMessage、InputInjector 和 Cursor.Position 之间的区别

标签 c# .net uwp

我正在学习和构建我的第一个 UWP 测试应用,需要一种模拟方法:

  • 相对鼠标移动
  • 绝对鼠标定位
  • 键盘输入(不一定是按键/释放)
  • 微调 x&y 滚动(这样我就可以滚动任意数量)

我遇到过以下执行此操作的方法,但无法弄清楚哪些是现代的/最适合 UWP 应用程序或一般最适合我的目的:

  • SendKeys(某种类型的 SendInput 的 C# 包装器?)
  • SendInput(用于模拟事件的 win32 API,但它是否最适合 UWP?)
  • SendMessage(用于直接输入焦点应用程序?)
  • InputInjector(一种更现代但有限的模拟输入方式,不能绝对定位光标?)
  • Cursor.Position(光标移动和定位的函数)

有很多方法可以解决这个问题,我不完全确定其中哪些最受支持或推荐用于 UWP 应用程序,或者产生最好的结果。

这个项目的目的是能够通过我的手机进行交互来控制我的电脑(移动鼠标、输入)。例如,我的手机变成了触控板,或者我可以在手机的软键盘上输入,然后它会输入我的电脑。 PC 在本地网络上托管服务器,手机将输入数据包发送到该服务器。服务器接收这些输入数据包,并执行它们(这是我需要能够模拟键盘/鼠标事件的地方)。与 Remote Mouse 非常相似.

所以我的问题是:

  • 这些方法有什么区别? (比如 Windows 窗体或 Win32??)
  • 哪个最适合 UWP 应用/我的需求?
  • 是否有更好的(未列出)解决方案?

这是我第一次了解这些东西(C#、.NET、Windows 开发),所以所有信息都非常有帮助。

感谢您的帮助!
丹:D

编辑

进一步的研究表明InputInjector在 UWP 引用下,SendKeysCursor.Position都在 .NET 引用下。这是否意味着 InputInjector 是最理想的?

最佳答案

经过更多研究,我发现 InjectedInput是唯一包含在 UWP API 中的。

需要说明的是,在开发 Windows 应用程序时,您必须在 Visual Studio 中选择一种“类型”来使用,可以是 WPF、Windows 窗体、Win32 或 UWP。 UWP 是唯一(大部分)可以上传到 Microsoft Store 的。

这意味着我只能在 UWP API 中使用方法,在这种情况下,WinRT 是 UWP 的一部分,InjectedInput 是 WinRT 的一部分。

它支持使用 "Absolute" 选项的绝对鼠标定位,使用 "Move" 选项的相对鼠标移动,以及使用 "Wheel"< 的滚动“HWheel” 选项用于 InjectedInputMouseOptions旁边InjectedInputMouseInfo .键盘输入可以用 InjectedInputKeyOptions 完成旁边InjectedInputKeyboardInfo .

使用“Option”变体类修改输入的效果(比如选择要改变的选项),然后使用InputInjector使用其 TryCreate() 方法实例化它,以及相关的 InjectMouseInputInjectKeyboardInput 来执行输入注入(inject)。

This示例代码及其相关 blog post非常适合理解基本用法,直接进入正题。

关于C# .NET - SendKeys、SendInput、SendMessage、InputInjector 和 Cursor.Position 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63099794/

相关文章:

c# - 什么时候变得矫枉过正?

c# - 求源码.NET图像处理 "lasso"选择器

c# - 缩放内容以适应 UWP WebView

c# - UWP 上的 Accelerometer.Shaken 事件不起作用,有什么解决方案吗?

C# 匿名方法不会运行。未设置对象引用

windows - XAML控件库中的控件样本变为圆角。为什么以及如何?

c# - UI 自动化 - 为另一个应用程序的 TextBox 设置文本

c# - 当属性确实存在时,EntityEntry.Property() 抛出 InvalidOperationException

c# - 委托(delegate)操作不接受 3 个参数

c# - 如何消除 WebBrowser 闪烁?