Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ShowWindow不支持';窗口在系统帐户下运行时无法工作_Delphi_Winapi_Showwindow - Fatal编程技术网

Delphi ShowWindow不支持';窗口在系统帐户下运行时无法工作

Delphi ShowWindow不支持';窗口在系统帐户下运行时无法工作,delphi,winapi,showwindow,Delphi,Winapi,Showwindow,我目前正在使用这段代码来还原最小化的窗口,当我尝试还原在我自己的用户帐户下运行的窗口时,它可以完美地工作 ShowWindow(wHandle、SW\u还原); 当我尝试还原在系统帐户下运行的窗口时,问题就出现了。我发现ShowWindow()总是向我返回一个假值。此外,在我的清单中,我尝试将其设置为“Requires Administrator”和“As Invoker”,但仍然会产生相同的结果 是否还有另一个功能类似于ShowWindow(),能够还原在系统帐户下运行的窗口?您可以在用户应

我目前正在使用这段代码来还原最小化的窗口,当我尝试还原在我自己的用户帐户下运行的窗口时,它可以完美地工作

ShowWindow(wHandle、SW\u还原);
当我尝试还原在系统帐户下运行的窗口时,问题就出现了。我发现
ShowWindow()
总是向我返回一个假值。此外,在我的清单中,我尝试将其设置为“Requires Administrator”和“As Invoker”,但仍然会产生相同的结果


是否还有另一个功能类似于ShowWindow(),能够还原在系统帐户下运行的窗口?

您可以在用户应用程序中创建具有“本地系统”权限的线程。然后在线程中执行
ShowWindow

一些步骤:

  • 程序将会话ID发送到服务
  • 服务调用
    OpenProcessToken
    DuplicateTokenEx
    来创建 本地系统令牌
  • 服务调用
    SetTokenInformation
    将令牌会话ID更改为 匹配程序的
  • 服务调用
    DuplicateHandle
    来创建令牌的句柄
  • 服务向程序发送句柄
  • 程序使用收到的句柄调用SetThreadToken
  • 参考:


    对于@fpiette的评论,显示了更多细节。

    您可能不得不这样做,但在随机用户的桌面上以本地系统帐户运行GUI应用程序可能是您需要解决的真正问题。似乎没有令人信服的理由这么做。我实际上正在编写一个程序来帮助我调用一个外部应用程序,如果这个应用程序已经在运行,我想恢复窗口并将其提前。但我面临的问题是,外部应用程序倾向于在系统上运行,而不是在我自己的用户名上运行。在系统帐户下运行应用程序,它就会工作。设计这样一个解决方案的方法可能是编写一个在系统帐户下运行的Windows服务,并编写一个前端GUI应用程序,向该服务发送命令。@i可检测只有创建目标窗口的进程才能为自己调用
    ChangeWindowMessageFilter/Ex()
    。你不能为别人的窗户打电话。“在随机用户的桌面上以本地系统帐户运行GUI应用程序可能是您需要解决的真正问题”-同意。出于安全原因,低权限进程被阻止与高权限进程进行各种交互。