我目前正在使用此代码来恢复最小化的窗口,当我尝试恢复在我自己的用户帐户下运行的窗口时,它可以完美运行。
ShowWindow(wHandle, SW_RESTORE);
当我尝试恢复在 SYSTEM 帐户下运行的窗口时出现问题。我发现它ShowWindow()
总是给我返回一个错误的值。此外,在我的清单中,我尝试将其设置为“需要管理员”和“作为调用者”,但它仍然产生相同的结果。
是否有另一个功能类似于ShowWindow()
并且能够恢复在 SYSTEM 帐户下运行的窗口?
我目前正在使用此代码来恢复最小化的窗口,当我尝试恢复在我自己的用户帐户下运行的窗口时,它可以完美运行。
ShowWindow(wHandle, SW_RESTORE);
当我尝试恢复在 SYSTEM 帐户下运行的窗口时出现问题。我发现它ShowWindow()
总是给我返回一个错误的值。此外,在我的清单中,我尝试将其设置为“需要管理员”和“作为调用者”,但它仍然产生相同的结果。
是否有另一个功能类似于ShowWindow()
并且能够恢复在 SYSTEM 帐户下运行的窗口?
您可以在用户应用程序中创建具有“本地系统”权限的线程。然后ShowWindow
在线程中执行你的。
一些步骤:
OpenProcessToken
并DuplicateTokenEx
创建本地系统令牌SetTokenInformation
更改令牌会话 ID 以匹配程序的服务调用DuplicateHandle
用于创建令牌句柄的服务调用SetThreadToken
使用接收到的句柄进行程序调用参考:以本地系统运行进程
对于@fpiette 的评论,Interacting with a User from a Service Indirectly显示了更多详细信息。