我有一个程序试图将自己安装在清单中Keyboard.IsKeyDown
的目标计算机上。
以下是有关该文件的文件:https://msdn.microsoft.com/en-us/library/windows/desktop/ee671610(v=vs.85).aspx
根据文档,这应该授予应用程序权限,以便在UAC提升的应用程序成为焦点时执行更多操作。
但是,只要管理应用程序成为焦点,false
就会为任何实际关闭的密钥返回uiAccess
。
这让我相信C:\Program Files\Shapeshifter
事实上并没有起作用。
这是我确定发生的事情:
uiAccess
)启动的。如何调试{{1}}并弄清楚它无效的原因?
答案 0 :(得分:3)
如何调试uiAccess
可调试的唯一真实内容是验证操作系统是否检测到您要求它。很容易做到你可能已经做过的事情:不要签署可执行文件。期望您现在无法再启动EXE。如果它确实启动,那么你知道UIPI没有被禁用的事实。
Keyboard.IsKeyDown返回false
这是预期的行为以及禁用UIPI无法解决的问题。此WPF属性使用引擎盖下的GetKeyState()。相当臭名昭着的功能,很多受害者和很少有用的答案。键盘状态和输入处理是按进程进行的(技术上是每个输入队列),只有在前台有窗口的进程才能看到按键。修复需要使用Raymond Chen喜欢讨厌的winapi函数,AttachThreadInput()。期望UIPI禁用它不再失败,错误5(也称拒绝访问)。
除了Raymond的担忧之外,很难正确使用,因为您需要跟踪前景中的哪个窗口。我不知道为什么你需要它,但肯定你喜欢SetWindowsHookEx()或RegisterHotKey(),也许是System.Windows.Automation命名空间支持的UI自动化。