从没有管理员权限的桌面应用程序访问 OSK(屏幕键盘)句柄
Access OSK(on screen keyboard) handle from desktop app without administrator rights
我有一个桌面 delphi 应用程序 运行 在 windows 7 和 8 上没有管理员权限。此应用程序需要发送 (SendInput) 鼠标事件(单击和移动) 到另一个 运行ning 应用程序。此应用程序的工作方式类似于远程 wifi 笔的驱动程序,可在桌面上控制鼠标。当焦点在 OSK(屏幕键盘上)上时,按下左键的鼠标移动不起作用,osk windows 不移动,所有其他应用程序在收到这些移动事件时移动。我可以得到 OSK 的句柄。
当我 运行 我的具有管理员权限(UAC)的应用程序一切正常时,OSK 在应用程序发送 mouve envets 时移动。
我认为这个问题与UAC有关。我找到了一种像这样 http://www.thewindowsclub.com/create-elevated-shortcut-run-programs-bypass-uac 绕过 UAC 的方法,但在某些环境中这不是一个好主意。
有没有地下途径绕过UAC的方法?或者我如何强制 OSK 响应我发送给他的所有鼠标事件。
这是 Osk.exe 中嵌入的清单片段:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>
</requestedPrivileges>
</security>
</trustInfo>
请注意它要求的 level
,asInvoker 不 要求 UAC 提升,仅 requireAdministrator 可以。换句话说,它以启动程序拥有的任何特权运行。您可以看出,启动时没有收到同意提示 Osk.exe
这里重要的是uiAccess
。将其设置为 true,程序会绕过 UIPI。 UAC 的鲜为人知的双胞胎,用户界面特权隔离通过禁止另一个进程将击键和鼠标点击插入提升的应用程序拥有的 window 来防止粉碎攻击。这样的进程仍然在高完整性模式下运行,这就是为什么你不能自己进入 Osk,但没有启用使 UAC 提升的应用程序危险的权限。
这并不罕见,大多数使用 UI 自动化或提供辅助功能的程序都需要能够执行此操作。与 Osk.exe 一样,它需要能够将击键插入任何应用程序。清楚你想做什么。
获取 uiAccess 不需要用户像 UAC 提升那样同意提示。操作系统必须"trust"你。 this MSDN article、"UIAccess for UI automation applications" 部分涵盖得很好。我在这里总结一下:
- 在应用程序清单中设置 uiAccess="true"
- 您的可执行文件必须具有有效的数字证书,即您从 Verisign 等供应商处购买的那种证书。
- 您的可执行文件必须存储在一个写访问被拒绝的目录中,在 c:\program files 或 c:\windows.
的子目录中
我有一个桌面 delphi 应用程序 运行 在 windows 7 和 8 上没有管理员权限。此应用程序需要发送 (SendInput) 鼠标事件(单击和移动) 到另一个 运行ning 应用程序。此应用程序的工作方式类似于远程 wifi 笔的驱动程序,可在桌面上控制鼠标。当焦点在 OSK(屏幕键盘上)上时,按下左键的鼠标移动不起作用,osk windows 不移动,所有其他应用程序在收到这些移动事件时移动。我可以得到 OSK 的句柄。 当我 运行 我的具有管理员权限(UAC)的应用程序一切正常时,OSK 在应用程序发送 mouve envets 时移动。 我认为这个问题与UAC有关。我找到了一种像这样 http://www.thewindowsclub.com/create-elevated-shortcut-run-programs-bypass-uac 绕过 UAC 的方法,但在某些环境中这不是一个好主意。 有没有地下途径绕过UAC的方法?或者我如何强制 OSK 响应我发送给他的所有鼠标事件。
这是 Osk.exe 中嵌入的清单片段:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true"/>
</requestedPrivileges>
</security>
</trustInfo>
请注意它要求的 level
,asInvoker 不 要求 UAC 提升,仅 requireAdministrator 可以。换句话说,它以启动程序拥有的任何特权运行。您可以看出,启动时没有收到同意提示 Osk.exe
这里重要的是uiAccess
。将其设置为 true,程序会绕过 UIPI。 UAC 的鲜为人知的双胞胎,用户界面特权隔离通过禁止另一个进程将击键和鼠标点击插入提升的应用程序拥有的 window 来防止粉碎攻击。这样的进程仍然在高完整性模式下运行,这就是为什么你不能自己进入 Osk,但没有启用使 UAC 提升的应用程序危险的权限。
这并不罕见,大多数使用 UI 自动化或提供辅助功能的程序都需要能够执行此操作。与 Osk.exe 一样,它需要能够将击键插入任何应用程序。清楚你想做什么。
获取 uiAccess 不需要用户像 UAC 提升那样同意提示。操作系统必须"trust"你。 this MSDN article、"UIAccess for UI automation applications" 部分涵盖得很好。我在这里总结一下:
- 在应用程序清单中设置 uiAccess="true"
- 您的可执行文件必须具有有效的数字证书,即您从 Verisign 等供应商处购买的那种证书。
- 您的可执行文件必须存储在一个写访问被拒绝的目录中,在 c:\program files 或 c:\windows. 的子目录中