我开发了一个c#应用程序,它使用bitblt捕获屏幕,并使用对keybd_event和mouse_event的调用发送键盘和鼠标事件。
据微软称,我需要修改app.manifest: requestedExecutionLevel level =“highestAvailable”uiAccess =“true”
签署应用程序并将其放在受信任的位置(程序文件)。
我已经完成了所有这些操作,以使应用程序在Vista下的高级权限下运行,但是当UAC对话框出现时,它不会捕获这些屏幕,键盘和鼠标事件也不会到达UAC对话框。
我猜UAC在不同的桌面上运行?如果是这样,我将如何捕捉到它?以及如何检测桌面何时切换到c#中的UAC对话框?或者我错过了一步?
答案 0 :(得分:2)
UAC在安全桌面上运行,只允许在该上下文中运行在系统帐户上运行的受信任进程。
这是为了防止你想要实现的目标 - 处理欺骗或捕获用户输入。
答案 1 :(得分:1)
你做不到。 UAC桌面是安全的,因为它不允许任何人访问它。 要检测桌面切换事件,我会尝试使用SENS或WTSRegisterSessionNotification。但它看起来并不乐观。