c# - 将窗口置于前台的问题

标签 c# .net windows winapi

我有一个用户实际上并没有关闭的应用程序 - 而不是关闭整个应用程序,而是隐藏了主窗口。然后,当用户再次启动同一个应用程序时,第二个实例与第一个(已经运行的)实例通信,第一个实例尝试将主应用程序窗口带到前台。

问题是这大部分会成功,但有时会失败。我做了我的研究,似乎后台进程不能将它们的窗口带到前台,这有点合理。解决方案是从第二个实例调用 AllowSetForegroundWindow(它可以将窗口带到前台,因为用户已经启动它)并授予程序第一个实例的权限。

我的问题是:如何确保我的代码有效?我问这个是因为我没有找到一种方法来检查 AllowSetForegroundWindow 调用是否有任何效果。我不知道第一个实例什么时候无法设置前景窗口(因为它大部分工作并且很少不工作),所以我不知道如何检查一切是否正常。有什么想法吗?

最佳答案

AllowSetForegroundWindow() 有一个您可以检查的返回代码:

The function will fail if the calling process cannot set the foreground window.

当您的应用程序启动时,它应该能够设置前景窗口,因此 AllowSetForegroundWindow() 应该 成功,并且您的现有应用程序的实例应该能够出现在前面。

但是没有办法保证这会一直有效。您所能做的就是尽可能地实现文档化系统。在最坏的情况下,您现有的应用程序会在其他窗口后面打开,用户必须单击它才能将其置于最前面。

关于c# - 将窗口置于前台的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219476/

相关文章:

python - 太早提供输入会导致故障吗?

c# - Catch 只在一个异常后退出

c# - 在 C# 中使用 TaskDialogIndirect

.net - 使用 ODBC 和 C++ Net 将空 BLOB 插入 SQLite DB

c# - 根据下拉列表在 asp.net 中选择的选项从文件夹动态加载多个图像

css - Windows 10 缩放默认高于 100% 导致网站大小问题

c# - 逐字字符串文字中的新行

c# - 在控制台应用程序中处理来自不同项目的依赖项

c# - 除了 for 循环之外,还有另一种方法可以一次取 N 吗?

c++ - 在安装了 VS08 的旧 XP 中使用最新的 dll 函数