如何覆盖第三方应用程序的关闭按钮,使其最小化而非关闭?

5

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

  • 我可以用C#编写这样的东西吗?还是需要使用C ++?
  • 我如何编写此类挂钩?我需要运行进程还是驱动程序/ DLL /服务就足够了?

据我所知,我认为需要执行以下操作,但我不知道具体如何实现:

使用WH_GETMESSAGE钩子来覆盖WM_CLOSE以将Windows状态设置为WS_MINIMIZE。


2
-1 - Cheers and hth. - Alf
2
Alf的评论只是噪音,请忽略它。 - Tamara Wijsman
1
我同意Alf的观点。原帖从未说明他想要修改现有的已编译应用程序的行为。我自己假设他需要代码来覆盖关闭按钮,我本来会建议处理FormClosing事件。 "Hooking"并不意味着他没有应用程序的代码需要修改。 - BeemerGuy
1
@Beemer:如果我自己写应用程序,我不会使用钩子,而且我也说过“特定的”应用程序和“一个”应用程序。与其再添加另一个噪音评论,如果你不喜欢当前形式的问题,你可以自由改进它...即使你仍然将其解释为两个问题,那么至少可以给出一个一般性的答案,而不是有意嘲弄。我从来没有说过这是关于我的应用程序的。 - Tamara Wijsman
8
各位,他在问能否使用C#或C++...如果他有自己的应用程序,他就不会问要使用哪种语言了,对吧?此外,他还在问是否需要编写dll或单独的进程...看来很明显不是他自己的应用程序。即使您觉得不清楚,请要求原帖发布者进行编辑,不要投反对票-我认为这只是粗鲁的行为。 - data
显示剩余6条评论
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#)和本机挂钩库。 我建议你去看一下...

现在这很有帮助,很惊奇地看到有为.NET编写的库可以让人们这样做。所以,如果我理解正确:我需要编写一个加载器,并附加一个DLL钩子来启动应用程序? - Tamara Wijsman
2
是的。您可以编写一个exe,将您的钩子dll(托管或非托管)注入到目标应用程序中并启动它。EasyHook有完全可用的示例供您开始使用 :) - Achintya Sharma

4

对于C#,这可以非常简单地完成:

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

当你需要应用程序关闭时,你可以将 realClose 设置为true(例如,不是用户按下关闭按钮时,而是他使用 文件 -> 退出 或类似方式)。


-4

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


1
@TomWij:请编辑您的问题,提供这些要求。没有人能够心灵感应,我们无法猜测您没有说的内容。这在技术解决方案上确实有很大的区别(尽管我写下并且你可能下降了:“不要那样做”的正确解决方案)。 - Cheers and hth. - Alf
2
“对于特定的应用程序”和“钩子”已经在问题中了,不需要猜测……只是你。 - Tamara Wijsman
1
@TomWij:关于问题的提示已经在问题中了:我和其他能够帮助你的人都不是心灵感应者。当你说你不确定但可能的解决方案是“类似于”钩子时,我们不知道你是否在猜测可能的解决方案,或者其他什么。你试图暗示问题的事实让人感到惊讶。直接说出来会更容易些。 - Cheers and hth. - Alf
1
如果你不理解上面的句子,那为什么要引用它呢?这只是你自己的问题。 - Tamara Wijsman
4
我不同意,这对于那些通常需要在后台运行的程序(如uTorrent、Thunderbird等)来说非常方便。 - Ohad Schneider
显示剩余5条评论

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