【问题标题】:How to programmatically click the mouse in another program when this code DOESN'T work当此代码不起作用时,如何以编程方式在另一个程序中单击鼠标
【发布时间】:2014-05-08 00:08:35
【问题描述】:

我是自动化的忠实拥护者,所以每当我有机会尝试自动化必须重复的任务时。以下代码通常允许我在屏幕上的任何位置(以及在任何可能的应用程序中)单击鼠标:

Public Declare Auto Function SetCursorPos Lib "User32.dll" (ByVal X As Integer, ByVal Y As Integer) As Long

Public Declare Auto Function GetCursorPos Lib "User32.dll" (ByRef lpPoint As Point) As Long

Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down

Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down

Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up

Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down

Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up

这通常没有问题。我已经在一系列应用程序中使用它,效果很好。但是,我现在正在尝试对似乎完全忽略鼠标和键盘命令的应用程序进行一些鼠标单击(和击键发送)。一旦鼠标移动到程序覆盖的屏幕区域,它就不会移动、单击等,但是我手动将鼠标移开,它会继续该过程,就好像它一直在正常工作一样。

那么有没有其他方法可以以编程方式控制鼠标,以一种与我手动移动鼠标无法区分的方式模拟鼠标?

【问题讨论】:

    标签: vb.net automation mouse uipi


    【解决方案1】:

    您使用的是什么版本的 Windows?

    如果您使用的是 Vista+,目标应用程序是否以提升的权限运行?

    如果是,您的应用程序是否也在以提升的权限运行?

    如果没有,请参阅:UIPI

    较新版本的 Windows 主动禁止具有较低权限的应用程序向具有较高权限的应用程序发送消息。有几种方法可以解决这个问题,或者让您的应用程序以提升的权限运行,或者通过将uiAccess 设置为true 的including an application manifest。在后一种情况下,应用程序必须经过验证码签名并且必须从受信任的位置(即:Program Files 目录等)执行。

    否则,如果不引入新的硬件驱动程序,就无法在低级别模拟鼠标活动。硬件驱动程序在Ring-0 中运行,并且要完全模拟真实的鼠标活动(不仅仅是“假”消息),您需要在此级别进行。

    【讨论】:

    • 感谢您的帮助。这看起来像答案。我正在尝试更改应用程序清单,但是在将 uiAccess 更改为 true 后安装并运行应用程序,应用程序无法运行。很可能是因为我无法安装到受信任的位置。有关如何安装到受信任位置的任何建议?
    • @FraserOfSmeg 如果您将uiAccess=true 添加到您的清单中,您还必须对应用程序进行身份验证签名。为这项服务付费(即:Verisign 等)很昂贵,但您也可以自行签名,但需要注意的是您必须手动分发证书(而不是从受信任的第三方获得)。请参阅:msdn.microsoft.com/en-us/library/ms537364%28v=vs.85%29.aspx 至于将您的应用程序放入Program Files,请阅读有关为您的软件包制作安装程序的信息:support.microsoft.com/kb/307353(等...搜索会有所帮助)。
    • @FraserOfSmeg ...显然,以管理员身份运行程序是最简单的解决方案。也许不是最好的解决方案,但肯定是最简单的。
    • 只是一个快速更新:我现在已经完全正常工作了。我只需要花一些时间学习使用安装程序,以便将其安装到程序文件中。再次感谢!
    • 既然你肯定知道你在说什么,我会把你链接到我的相关新问题:stackoverflow.com/questions/22810290/…
    猜你喜欢
    • 2012-05-08
    • 2019-05-14
    • 1970-01-01
    • 2020-07-27
    • 2023-04-01
    • 2015-11-20
    • 2020-06-14
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多