C# 为什么不推荐使用鼠标事件?

C# 为什么不推荐使用鼠标事件?,c#,windows,mouseevent,C#,Windows,Mouseevent,我目前正在遵循一个简单的自动点击应用程序指南。我使用的指南利用了鼠标事件 我所看到的每一个地方都说鼠标事件已经被弃用了并且使用发送输入更好,但是我还没有找到一个实际的原因来解释为什么应该使用一个而不是另一个 即使是关于状态的文档也“使用SendInput” 我的大部分经验都是用java编写的,我非常熟悉thread.stop()被弃用的情况,因为它很危险。我在寻找同样类型的解释 一个鼠标事件会让你想到一个有鼠标的设备,而不是所有的设备都有鼠标 所以,当你想到任何可以处理触摸手势的设备时,比如手机

我目前正在遵循一个简单的自动点击应用程序指南。我使用的指南利用了
鼠标事件

我所看到的每一个地方都说
鼠标事件
已经被弃用了并且使用
发送输入
更好,但是我还没有找到一个实际的原因来解释为什么应该使用一个而不是另一个

即使是关于状态的文档也“使用SendInput”


我的大部分经验都是用java编写的,我非常熟悉thread.stop()被弃用的情况,因为它很危险。我在寻找同样类型的解释

一个鼠标事件会让你想到一个有鼠标的设备,而不是所有的设备都有鼠标

所以,当你想到任何可以处理触摸手势的设备时,比如手机和平板电脑,最好有一个代表它们的类;它还可能让开发人员一直在考虑它需要处理或发送的所有其他类型的输入,以便在尽可能多的设备上工作

VOID WINAPI mouse_event(
  _In_  DWORD dwFlags,
  _In_  DWORD dx,
  _In_  DWORD dy,
  _In_  DWORD dwData,
  _In_  ULONG_PTR dwExtraInfo
);
这是mouse_event()的声明。在您完成一些winapi编程之后,这个函数的错误就显而易见了。它没有任何方式表示失败。keybd_event()函数也有同样的问题。例如,您可以为dwFlags传递垃圾值,如果没有任何方法来找出原因,它将无法工作

几乎所有winapi函数都有返回值,BOOL或HANDLE是典型的。它让函数报告失败。通常在下一步调用GetLastError()以找出哪里出了问题


就像SendInput()一样。

SendInput
更一般,文档更完整,尽管我不喜欢一些函数被称为
弃用的
,例如
GetScrollPos
函数,如果我们只需要获得滚动条的位置,使用它将非常有用和简单,但是他们说这是为了过时,我们应该使用
GetScrollInfo
GetScrollInfo
SCROLLINFO
结构有点复杂。@KingKing那么这是否意味着鼠标事件和SendInput以相同的方式模拟鼠标输入?我想是的,它们在鼠标输入中具有相同的功能,但
SendInput
也可以处理键盘输入,这就是为什么我说
SendInput
更一般。我认为
SendInput
=
mouse\u event
+
keybd\u event
+(可能更多)。看起来你是win32方面的专家,你能预测
mouse\u event
(以及其他所谓的过时函数)可以使用/声明/从dll导入多长时间吗?谢谢。它永远不会消失,太多的老节目依赖它。一个很好的机会是放弃x64。他们没有。我想不出,向后兼容性在Windows中是神圣的。编写以无法诊断的方式失败的程序仍然是受支持的:)我没有想到会这样想。用这种方式描述SendInput听起来更自然。我忘了在过去的14年里,用户输入发生了多大的变化。