嘿,我真的被我的项目困住了......我需要知道任何打开的窗口何时被最小化/恢复并在我自己的应用程序中处理事件。有什么想法吗?
编辑: Musigenesis 是对的,我确实想知道其他应用程序何时最小化/恢复
我认为您需要使用 SetWindowsHookEx Win32 API 函数(以及其他一些函数)。基本上,您将遍历操作系统中所有打开的窗口并挂钩它们的大小调整事件。
强制性评论:您确定需要这样做吗?虽然我认为这在理论上是可能的,但这听起来是一个非常糟糕的主意,并且与 Windows 中应用程序的行为方式背道而驰。
更新:我认为 Windows 中的“显示桌面”的工作方式有点像这样,只不过它会遍历所有打开的窗口,然后使用 SendMessage 将它们最小化(如果打开的话)(完全是我的猜测)。
更新2:这是一个艰难的任务,我很好奇如何做到这一点(我100%确定它是可能)。我会密切关注这个问题,如果没有人在接下来的一两天内给出答案,我会再次发布它并提供赏金(你可以这样做,但你需要有一些您自己的声誉点可以作为赏金提供)。
//For cases where you create the window such as:
protected Form gv_AO_frmControlWindow = null;
gv_AO_frmControlWindow = new Form();
* * * code to add buttons and such
// Add handler that is executed when window is minimized/maximized
gv_AO_frmControlWindow.Resize += new EventHandler(gv_AO_frmControlWindow_Resize);
gv_AO_frmControlWindow.ShowInTaskbar = false;
// Show window
gv_AO_frmControlWindow.showDiaglog.
// ****************************************************************
private void gv_AO_frmControlWindow_Resize(object sender, EventArgs e) {
if ( gv_AO_frmControlWindow.WindowState == FormWindowState.Minimized ) {
notifyIcon.Visible = true;
}
else {
notifyIcon.Visible = false;
}
return;
} // END OF gv_AO_frmControlWindow_Resize()
// ****************************************************************
private void notifyIcon_MouseClick(object sender, MouseEventArgs e) {
gv_AO_frmControlWindow.WindowState = FormWindowState.Normal;
return;
} // END OF notifyIcon_MouseClick()
//Assuming you wanted a system tray icon to maximize window:
private System.Windows.Forms.NotifyIcon notifyIcon = new NotifyIcon();
notifyIcon.Icon = new Icon( "C:\\SysTray.ico");
notifyIcon.Text = "MyWindow";
notifyIcon.MouseClick += new MouseEventHandler(this.notifyIcon_MouseClick);
//希望这有帮助。
// 达里尔·H·巴塞特