SetCursorPos和GetCursorPos无法在登录界面工作?

时间:2009-12-26 19:31:11

标签: c++ winapi

当我尝试在Windows Vista / 7登录屏幕上使用SetCursorPos时,会返回true,这首先让我觉得它正在运行。但是,当我致电GetCursorPos时,它会给我:

-858993460,-858993460

有什么想法?这是一个“安全功能”还是我错误地使用它?该代码在非登录(即普通)桌面上正常工作。

3 个答案:

答案 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是可能的(但非常棘手) 。我现在没有时间发布代码,但如果被问到我可能会更新此答案......