【问题标题】:How can I override the close button on a third-party application so that it minimizes instead? [closed]如何覆盖第三方应用程序上的关闭按钮,使其最小化? [关闭]
【发布时间】:2010-10-16 00:18:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • -1 表示未指定/误导性问题。 OP 已通过 cmets 澄清,这是关于修改他没有(大概)拥有源代码的应用程序的行为。
  • 如果我愿意写一个钩子,为什么还需要源代码?
  • 阿尔夫的评论纯属杂音,请无视。
  • 我同意阿尔夫的观点。 OP 从未说过他想修改现有的已编译应用程序的行为。我,我自己,假设他想要代码来覆盖我将建议处理 FormClosing 事件的关闭按钮。 “挂钩”并不意味着他没有要修改的应用程序的代码。
  • 嘿,伙计们。他在问他可以使用 C# 还是 C++……如果他有自己的应用程序,他就不会问使用哪种语言了,不是吗?还有,他在问他是否需要写一个dll或单独的进程......来吧,很明显这不是他的应用程序。即使您认为不清楚,也请 OP 编辑​​他的帖子,不要投反对票 - 这只是恕我直言。

标签: c# c++ hook minimize


【解决方案1】:

您可以在 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#)和本机挂钩库。 我建议你看看它...

【讨论】:

  • 现在这很有帮助,令人惊讶的是,有一些为 .NET 编写的库允许这样做。所以,如果我理解正确:我将不得不编写一个加载程序来启动应用程序并附加一个 DLL 挂钩?
  • 是的。您可以编写一个 exe,将您的挂钩 dll(托管或非托管)注入目标应用程序并启动它。 EasyHook 有完整的示例可以帮助您入门 :)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • @TomWij:请编辑您的问题以提供这些要求。心灵感应者和其他可能帮助你的人都不是心灵感应者,我们猜不出你没有说什么。它确实对技术解决方案产生了巨大的影响(尽管 Right(TM) 解决方案正如我所写的那样,并且可能你投反对票:“不要那样做”)。
    • “对于特定的应用程序”和“挂钩”已经在问题中。无需猜测......只有你。
    • @TomWij:问题中已经有提示:我和其他可以帮助你的人都不是心灵感应者。当你说你不知道确切但也许一个解决方案可能是“类似于”一个钩子时,我们不知道你是否在疯狂地猜测一个可能的解决方案,或者什么。您试图暗示有关该问题的某些内容令人惊讶。直接说出来要容易得多。
    • 如果你不明白上面的句子,那为什么要引用它呢?只有你。
    • 我不同意,这对于您通常希望保留在后台的程序(uTorrent、Thunderbird 等)来说非常方便
    猜你喜欢
    • 2012-12-17
    • 2011-11-06
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多