我想避免多次执行我的应用程序,并在下次启动应用程序时将焦点设置在已经运行的实例上。
我通过使用互斥体使应用程序成为单例,效果很好。但当我把它放在前面时遇到了一个问题。此代码取自这些 SO 答案:
https://stackoverflow.com/a/7358286/2505186
https://stackoverflow.com/a/2315093/2505186
SetForegroundWindow(hWnd);
ShowWindow(hWnd, SW_RESTORE);
一开始它总是无法将窗口置于前面。一段时间后,我发现它确实可以工作,但并不完全。唯一出现在前面的是这个小符号:
这是 Teamviewer 的叠加图标(我使用的是版本 8)。只有这个图标而不是我的应用程序被带到前面:
当我在 Teamviewer 上注销时,我的应用程序的焦点将按预期工作。 :-)
为什么 Teamviewer 登录后无法使用?
我需要执行哪些功能才能使其与 Teamviewer 一起使用?
我测试了 Sysinternals ProcessExplorer 的“置于前台”功能...它正在工作。所以他们必须使用能够克服这个问题的函数。
最佳答案
此按钮由 TeamViewer 在其他应用程序窗口中绘制。您可以在 TeamViewer 选项中禁用它:
选项 -> 高级 -> 计算机和联系人的高级设置 -> QuickConnect 按钮 -> 配置... -> 禁用“显示 QuickConnect 按钮”
关于当 Teamviewer 登录时,c# set focus on running application 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165791/