.NET(C#)窗口最小化事件

3

嘿,我在我的项目中遇到了麻烦...我需要知道任何打开的窗口何时被最小化/恢复,并在我的应用程序中处理该事件。有什么想法吗?

编辑: Musigenesis是正确的,我确实想知道其他应用程序何时被最小化/恢复。


我猜你想在其他正在运行的应用程序中响应这些事件,对吗?如果是这样,请稍微编辑一下你的问题,否则你会得到30个回答告诉你关于调整大小事件的事情。 - MusiGenesis
3个回答

6

我认为您需要使用SetWindowsHookEx Win32 API函数(以及其他一些函数)。 基本上,您将遍历操作系统中的所有打开窗口,并钩入其调整大小事件。

必要的评论:您确定需要这样做吗? 虽然我认为这在理论上是可能的,但听起来像一个非常糟糕的想法,并且与Windows应用程序应该表现出的方式相反。

更新:我认为Windows中的“显示桌面”类似于这种方式,只不过它遍历所有打开的窗口,然后使用SendMessage将它们最小化(我猜测)。

更新2:这是一个棘手的问题,我非常想知道如何完成(我百分之百确定它是可能的)。 我会关注这个问题,如果在接下来的一两天内没有人提供答案,我会再次发布并提供赏金(您也可以这样做,但需要自己拥有一些声望点数来提供赏金)。


我想要做的是一种虚拟桌面管理器(实际上是一种幻觉),在其中跟踪每个打开的窗口句柄,并在从一个桌面切换到另一个桌面时最小化/恢复相应的窗口。通过这种方法,我预见到在未来需要知道用户是否最小化/恢复了窗口,以避免出现冲突。 - Gabriel

2
假设您正在使用Windows窗体,您可以处理{{link1:OnSizeChanged事件}}并测试WindowState

0
//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);

希望这能帮到你。 Darryl H. Bassett

请记住,Stack Overflow 不仅仅是为了解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层的代码。对于我们社区中的初学者来说,这尤为重要,因为他们可能对语法不太熟悉。鉴于此,你能否编辑你的回答,包括解释你正在做什么以及为什么你认为这是最佳方法? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接