【发布时间】:2018-10-09 14:58:21
【问题描述】:
我有一个 C# 应用程序,我正在从中启动一个单独的 win32 窗口。我正在将 Win32 api 调用编组到我的 C# 应用程序中,并试图从中控制 win32。我正在通过按下按钮来切换窗口,以便始终在所有窗口之上最大化或最小化。
它将显示为最大化,然后忽略第一次按下按钮以隐藏,然后当我再次按下按钮时它保持显示,然后在我第三次按下按钮时使用相同的代码最终隐藏。从现在开始,它的行为就如你所愿。我敢肯定,一定是某些 Windows 标志在首先经过最大化/最小化循环之前没有正确设置。
这里是窗口的生命周期:
创建最大化的窗口
答:
隐藏:
target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMINIMIZED);
显示:
target_hwnd = FindWindowHandleByCaption()
ShowWindow(target_hwnd, SW_SHOWMAXIMIZED);
转到 A:
我做错了什么?我一直在这几个小时尝试各种代码 sn-ps 无济于事。
提前致谢!
编辑:
解决了我的问题:
SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MINIMIZE, 0);
SendMessage(target_hwnd.ToInt32(), WM_SYSCOMMAND, SC_MAXIMIZE, 0);
而不是使用 ShowWindow。
【问题讨论】:
-
您可能在应用创建窗口或调用 showwindow 之前过早尝试将其最小化。 Process.WaitForInputIdle() 往往会有所帮助。请注意,将样式设置为 Hidden 的 ProcessStartInfo.WindowStyle 很少起作用,程序会尽量避免困住用户并强制他们使用任务管理器来终止应用程序。一项重要的恶意软件对策。