gpt4 book ai didi

c# - Keyboard.IsKeyDown 在 uiAccess=true 的 UAC 进程中为 false?

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:20 27 4
gpt4 key购买 nike

我有一个程序试图在 list 中使用 uiAccess=true 将自身安装到目标机器上。

这是相关文档:https://msdn.microsoft.com/en-us/library/windows/desktop/ee671610(v=vs.85).aspx

根据文档,当 UAC 提升的应用程序处于焦点时,这应该授予应用程序执行更多操作的权限。

但是,只要管理应用程序处于焦点状态,Keyboard.IsKeyDown 就会为实际上按下的任何键返回 false

这让我相信 uiAccess 实际上并没有起作用。

这是我确定正在发生的事情:

  • 根据 Comodo 的文档,我的程序使用代码签名证书进行了签名。它不是 EV 证书。
  • 程序从受 UAC 保护的路径(C:\Program Files\Shapeshifter)启动。

我如何调试 uiAccess 并找出它不工作的原因?

最佳答案

How can I debug uiAccess

唯一真正可调试的是验证操作系统是否检测到您要求它。非常容易做到并且您可能已经做过的事情:不要签署可执行文件。期望您现在无法再启动 EXE。如果它确实启动了,那么您就知道 UIPI 没有被禁用。

Keyboard.IsKeyDown returns false

这是预期的行为,禁用 UIPI 无法修复。此 WPF 属性在后台使用 GetKeyState()。 SO 的一个相当臭名昭著的功能有很多受害者和很少的可用答案。键盘状态和输入处理是每个进程(技术上是每个输入队列),只有在前台有窗口的进程才能看到按键。解决这个问题需要使用 Raymond Chen 讨厌的 winapi 函数 AttachThreadInput()。期望在禁用 UIPI 的情况下,它不再因错误 5(也称为访问被拒绝)而失败。

除了 Raymond 的担忧之外,很难正确使用,因为您需要跟踪前景中的窗口。我不知道您为什么需要它,但您肯定会喜欢 SetWindowsHookEx() 或 RegisterHotKey(),也许是 System.Windows.Automation 命名空间支持的 UI 自动化。

关于c# - Keyboard.IsKeyDown 在 uiAccess=true 的 UAC 进程中为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50245511/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com