【发布时间】:2014-06-30 08:42:23
【问题描述】:
我正在开发一个启动 .NET Winforms 应用程序的 C++ 程序。
如果应用程序已经在运行,我想恢复窗口。我抓住 .NET 应用程序的窗口句柄并使用 SetForegroundWindow() 将其带到前面。
这在应用程序被最小化时有效。
我尝试了以下组合:
ShowWindow(windowHandle, SW_SHOW);
ShowWindow(windowHandle, SW_RESTORE);
和
SendMessage(windowHandle, WM_SYSCOMMAND, SC_RESTORE, 0);
但是,当执行此代码时,事件会卡住。在托盘中,我看到".NET-BroadcastEventWindow.2.0.0.0.378734a.0" 与我的 .NET 应用程序一起作为托盘中的第二个窗口出现,并且该应用程序永远不会正确恢复。
这仅在我尝试发送 SW/SC_RESTORE 或 SHOW 事件时发生。 SetForegroundWindow() 没有问题。
以前有没有其他人见过这个问题?
【问题讨论】:
-
Windows 已经实施了重要的措施来防止焦点窃取(无论是为了可用性 - 用户对自发的焦点变化感到恼火 - 以及为了安全 - 在登录框上弹出的聊天窗口中输入密码都会坏)。请参阅blogs.msdn.com/b/oldnewthing/archive/2009/02/20/9435239.aspx 了解更多信息。