gpt4 book ai didi

c++ - 恢复另一个应用程序的最小化窗口 (C++ WinAPI)

转载 作者:太空宇宙 更新时间:2023-11-04 13:50:30 29 4
gpt4 key购买 nike

我正在开发一个启动 .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_RESTORESHOW 事件时发生。 SetForegroundWindow() 没有问题。

有没有其他人以前遇到过这个问题?

最佳答案

我过去遇到过类似的问题,我使用 Get/SetWindowPlacement() 解决了这些问题:

// Ensure that the given window is not minimized.
// If it is minimized, restore it to its normal state.
void EnsureNotMinimized(HWND hWnd)
{
WINDOWPLACEMENT placement;
placement.length = sizeof(placement);

if(!GetWindowPlacement(hWnd, &placement))
return;

BOOL minimized = (placement.showCmd & SW_SHOWMINIMIZED) != 0;
if(!minimized)
return;

placement.showCmd = SW_SHOWNORMAL;
SetWindowPlacement(hWnd, &placement);
}

但是,我只将它用于属于我自己的应用程序的窗口。我不知道安全性是否允许它被外人使用。

关于c++ - 恢复另一个应用程序的最小化窗口 (C++ WinAPI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618301/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com