【问题标题】:Determining (programmatically) who controls the mouse on a PC using C# or C++使用 C# 或 C++ 确定(以编程方式)谁控制 PC 上的鼠标
【发布时间】:2013-06-13 00:17:04
【问题描述】:

有没有办法以编程方式确定谁在控制 PC 上的鼠标(以及哪个鼠标)?我最近安装了 LogMeIn (logmein.com),想知道是否有可能 (1) 在程序中判断鼠标是被直接用户还是远程用户单击/移动,(2) 编写一个独立的仅显示鼠标事件(在任何应用程序上)以及鼠标事件是由本地用户还是远程用户生成的程序。我对 Win32 挂钩有点熟悉,但不认为它们可以提供此类信息。关于(1),这似乎是一个普遍的要求。 IE。 “仅允许用户在本地完成与密码更改相关的按钮按下......”或类似的东西。

次要的(实际上只是学术兴趣)是判断本地用户是使用鼠标还是触控板的问题。

【问题讨论】:

  • 根据您问题的最后一部分,我想您会使用类似的方法来检测计算机上的触摸板或鼠标或两者是否处于活动状态。 support.microsoft.com/kb/311272
  • 谢谢 CodeCamper,我去看看。最初浏览 DevCon 时,我不知道如何使用它来确定控制哪个鼠标。看起来您可以使用它列出所有鼠标设备。当然,我认为这不会有助于解决是否有人通过 LogMeIn 控制事物的问题(正如您所指出的)。谢谢!
  • 自发布以来,我在 stackoverflow 上找到了这个链接:stackoverflow.com/questions/12622312/… 接受的答案中声称只能(可靠地)通过创建自己的鼠标驱动程序来完成。听起来工作量很大!
  • 戴夫也许你可以根据运动的平滑度来不可靠地确定鼠标是否来自本地机器。我注意到使用 Teamviewer 时,鼠标在本地机器上有一种与标准平滑鼠标运动不同的标志性运动。因此,与具有更高运动分辨率的本地机器相比,这些位置可能会更新更多像素。只是一个想法。

标签: c# c++ windows mouse


【解决方案1】:

您可以挂钩您想要从中获取信息的窗口的设备 API,然后如果鼠标移动,则当用户移动鼠标时可能不会调用 api,但如果 logmein 这样做,那么它可能会调用一些类似 SetMousePointerPos C WinAPI。

【讨论】:

    【解决方案2】:

    自从发帖后,我发现了这篇基本上回答了问题的帖子。

    C# Get Mouse handle (GetRawInputDeviceInfo)

    对于那些想要使用 WPF 而不是 WinForms(如上例使用)的人,我想补充一点,请查看 ComponentDispatcher.ThreadFilterMessage(用于 WPF)或 IMessageFilter(Windows 窗体)。

    我根据上面的帖子编写了几个程序(一个基本上是上面的帖子,有一些小的补充,另一个是 WPF(与 WinForms 相对))。如果我能弄清楚 GitHub,我会发布所有代码并在此处添加评论。但是上面的帖子绝对可以满足您的所有需求。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多