繁体   English   中英

当子进程之一关闭时,如何确保我的进程获得焦点?

How can I ensure my process receive focus when one of its child process closes?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

一点背景

我们的应用程序(AppA)正在调用第三方应用程序(AppB)。 我们将AppB的窗口模拟为应用程序的模态。

pseudo
while AppB_Running
  If AppA_focused
    SetForeGroundWindow(AppB_Hwnd)
  HandleMessage
SetForegroundWindow(AppA_HWnd)

这项工作已经进行了多年,没有发生任何事件,也就是说,直到我们开始推出Windows 10为止。我们开始收到有关关闭AppB有时会引起关注的随机应用程序(AppC)的报告(实际上,考虑到用户的技术专长,报告更像是“关闭AppB杀死AppA”,但我离题了。 可以偶尔在开发机器上重现该行为(<5%)(但在调试时还没有...)

到目前为止,测试结果表明AppC是AppA之前关注的应用程序。

有什么方法可以确保当AppB关闭时AppA重新获得焦点吗?

额外注意事项

即使AppA仅失去对AppB的关注,也可以重现该问题。 (AppA启动后,AppC永远不会被关注)

1 个回复

虽然这不能直接回答我的原始问题,但确实可以提供有关此问题的更多见解,并且可能对其他人有用。

问题的一部分是对我们的监督。 更具体地说,我们获得AppB_HWnd的方式。 我们基本上选择了遇到的第一个顶级窗口。 在我们当前的测试案例中,该窗口恰好是不可见的窗口(“ MSCTFIME UI”)。 在不可见窗口上调用SetForegroundWindow似乎本身不会引起问题,Windows似乎只是将进程的可见窗口之一放在前面。 当所说的进程没有可见的窗口时,事情似乎出现了问题。 在我们的情况下,这通常发生在AppB主窗口关闭到流程结束之间。

所以...不要在不可见的窗口上调用SetForegroundWindow

至于为什么我们在Win7中没有任何麻烦呢? 也许第一个窗口总是可见的。 或者,也许SetForegroundWindow的行为在那时有所不同。

1 如何确保父进程在子进程之前执行scanf()?

我正在编写一个程序,该程序接受来自用户的两个整数值X和Y(用于赋值)作为输入。 棘手的部分是程序必须创建一个父级和子级,其中父级进程将读取X,而子级进程将读取Y(使用scanf )。 该程序的预期输出如下: 我遇到的问题是,子级会自动执行,而不是等到父级收到输入后才执行。 ...

2 确保父进程在子进程之前终止

如果在fork后的孩子中使用以下行: 确保父项在子项之前终止(就像父项终止时,子进程的父级成为init进程一样),那么我可能会遇到什么问题(如果有)? 这是确保孩子在父母身后终止的好方法吗? 还有什么其他方式? ...

3 当子进程退出并关闭管道时如何获得通知?

这是我先前的问题的后续措施: 假设我有一个Python程序,这叉子和高管与另一Python程序subprocess.Popen 。 我想在派生之前创建一个管道,并在孩子退出时关闭管道时得到通知。 当然,我不想同步等待管道。 它在Python中可行吗? ...

4 子进程之间的管道

我编写了一个C程序,它应该创建一定数量的子进程,每个子进程必须从一个字符串中更改1个字母。 从键盘读取字符串和子进程数。 我想用管道来做。 它应该像这样工作:父级更改一个字母,然后第一个子级获取父级修改的字符串并再更改一个字母。 第二个子进行第一个修改后的字符串(2个字母已经更改)并 ...

6 父进程和子进程之间的通信

我有一个充当父进程的类。 在运行期间,它将创建许多子进程并同时运行它们。 每个子进程基本上都是一个HTTP客户端,该客户端连接到服务并从中获取数据。 当前,如果子进程之一由于任何原因停止工作,则父进程将通过重新启动同一子进程来重新建立连接。 子进程的断开连接可能是由多种原因引起的 ...

7 管道上的子进程和父进程之间的难题

目前我正在学习如何在子进程和父进程之间使用管道,只需父进程写入管道,子进程就会从管道读取 当我多次运行时,发生了一些非常不寻常的事情,但我不知道,这是输出: 看起来孩子在while循环中进入下一次迭代,所以这就是为什么不仅一行输出,而且我已经关闭了管道的所有写端,它应该知道我只会读取一次,但 ...

2021-04-13 10:58:53 1 33   c
8 子进程在父进程之后启动

我有一个简单的代码来测试fork()函数。 它没有像我预期的那样工作。 我的期望是:父母的结果和孩子的结果交替出现。 有人可以解释这个并教我如何解决它吗? 谢谢! ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM