5

我想覆盖第三方应用程序上的关闭按钮,以便它导致应用程序被最小化。我没有目标应用程序的源代码。

  • 我可以用 C# 写这样的东西吗?还是我需要使用 C++?
  • 这种钩子怎么写?我需要一个正在运行的进程还是一个驱动程序/dll/服务就足够了?

就我的研究而言,我认为我必须做这样的事情,但我不知道具体如何:

一个 WH_GETMESSAGE 挂钩,用于覆盖 WM_CLOSE 以将 Windows 状态设置为 WS_MINIMIZE。

4

3 回答 3

12

您可以在 C++ 和 C# 中执行此操作。为此,您必须连接到应用程序消息循环并将 WM_CLOSE 消息覆盖为 WM_MINIMIZE。要挂接到任何正在运行的进程,您可以使用:

  1. Microsoft Detours(如果我没记错的话是商业的,不是免费的)(http://research.microsoft.com/en-us/projects/detours/)

  2. EasyHook(在 LGPL 下开源)(http://easyhook.codeplex.com/)

我使用过 EasyHook,我对结果非常满意。它为您提供了非常好的功能,例如使用附加的挂钩启动进程或将挂钩附加到已经运行的进程。此外,它还为您提供托管(C#)和本机挂钩库。我建议你看看它...

于 2010-10-16T00:48:08.797 回答
4

对于 C#,这可以通过非常简单的方式完成:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!realClose)
        {
            e.Cancel = true;
            this.WindowState = FormWindowState.Minimized;
        }
    }

当您确实希望应用程序关闭时(例如,不是当用户按下关闭按钮时,而是当他使用或类似的时候) ,您在哪里realClose设置为 true 的布尔值file -> exit

于 2010-10-16T12:39:49.997 回答
-4

不要那样做。禁用关闭按钮。提供一个最小化按钮。

于 2010-10-16T00:24:32.520 回答