Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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
C++ Qt需要将Qt应用程序带到从win32应用程序调用的前台_C++_Winapi_Qt - Fatal编程技术网

C++ Qt需要将Qt应用程序带到从win32应用程序调用的前台

C++ Qt需要将Qt应用程序带到从win32应用程序调用的前台,c++,winapi,qt,C++,Winapi,Qt,我有一个简单的win32应用程序,它使用createProcess方法调用Qt应用程序 问题是我喜欢把Qt应用程序带到前台 谁对此负责?父win32应用程序或Qt应用程序?获取Qt应用程序的窗口句柄并调用SetForegroundWindow 当前具有前景焦点的应用程序是唯一允许更改前景焦点的应用程序。您需要使用来行使这项权利 文件中的“备注”部分包含适用的限制列表: 系统限制哪些进程可以设置前台窗口。仅当以下条件之一为真时,进程才能设置前景窗口: 这个过程就是前景过程 该进程由前台进程启动

我有一个简单的win32应用程序,它使用createProcess方法调用Qt应用程序

问题是我喜欢把Qt应用程序带到前台


谁对此负责?父win32应用程序或Qt应用程序?

获取Qt应用程序的窗口句柄并调用SetForegroundWindow


当前具有前景焦点的应用程序是唯一允许更改前景焦点的应用程序。您需要使用来行使这项权利

文件中的“备注”部分包含适用的限制列表:

系统限制哪些进程可以设置前台窗口。仅当以下条件之一为真时,进程才能设置前景窗口:

  • 这个过程就是前景过程
  • 该进程由前台进程启动
  • 进程接收到最后一个输入事件
  • 没有前台进程
  • 正在调试前台进程
  • 前景未被锁定(请参见
    locksetforegroundindow
  • 前台锁定超时已过期(请参阅
    systemparameters sinfo
    中的
    SPI\u GETFOREGROUNDLOCKTIMEOUT
  • 没有激活的菜单
当用户使用另一个窗口时,应用程序不能将窗口强制置于前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户


真正的问题是你为什么要这么做。更改前台应用程序很可能会给您带来麻烦,可能是因为Windows对其设置了所有限制,也可能是因为您的用户。这是一种非常不利于用户的行为,这也是Windows近年来收紧对其限制的原因之一。

您可能希望从父进程执行此操作。最干净/最可靠的使用方法是从当前处于前台的进程调用它。

没有Qt方法吗?我的问题是:当用户按下“设置”按钮时,一个新窗口会打开,但如果他们不观察并再次按下“设置”按钮,则“设置”窗口将停留在后面,我想说“嘿,我在这里。这里,我为你弹出了前面的窗口”。一个解决方案是先设置为setVisibile(false),然后设置为setVisibile(true),但我不喜欢这个解决方案,它应该在前面弹出,而不需要再次关闭和打开它。我不能使用Windows API,因为应用程序是跨平台的,我不想阻止它。@Moraru:是的,这相对简单,因为设置窗口是由您自己的应用程序创建的。这里的问题是试图从其他应用程序(进程)激活windows。Windows试图阻止此操作,因为开发人员曾经严重滥用此操作。但是,如果您是响应用户启动的操作(单击,热键),则设置前台窗口是完全有效的操作这是用户期望发生的行为。设置前台窗口和更改前台应用程序之间有区别。