当我尝试在Windows Vista / 7登录屏幕上使用SetCursorPos
时,会返回true
,这首先让我觉得它正在运行。但是,当我致电GetCursorPos
时,它会给我:
-858993460,-858993460
有什么想法?这是一个“安全功能”还是我错误地使用它?该代码在非登录(即普通)桌面上正常工作。
答案 0 :(得分:4)
来自the MSDN:
调用GetCursorPos时,输入桌面必须是当前桌面。调用OpenInputDesktop以确定当前桌面是否为输入桌面。如果不是,请使用OpenInputDesktop返回的HDESK调用SetThreadDesktop切换到该桌面。
This page(我在上面引用了上面的引文)询问了“如果桌面被锁定,GetCursorPos无法正常工作”的问题,请提供以下信息:
桌面锁定时无法获取此信息。虽然 桌面被锁定,安全子系统接管,桌面就是 禁区。
此时,你必须挂钩O / S(人们已经完成了它 通过替换GINA.dll,但您无法在托管代码中执行此操作,并且在此之上 那个,你不能在Vista中做,因为它有不同的模型)。
桌面锁定时,您将不得不使用光标 如果您使用托管代码,请输入信息。
答案 1 :(得分:4)
在登录屏幕和安全窗口中,您无法发送鼠标或键盘事件。这是Windows的安全措施,以防止来自不同程序的未经授权的访问。
答案 2 :(得分:1)
替代解决方案:使用mouse_event
( 在登录界面工作)而不是SetCursorPos
是可能的(但非常棘手) 。我现在没有时间发布代码,但如果被问到我可能会更新此答案......