我想覆盖第三方应用程序上的关闭按钮,以便它导致应用程序被最小化。我没有目标应用程序的源代码。
- 我可以用 C# 写这样的东西吗?还是我需要使用 C++?
- 这种钩子怎么写?我需要一个正在运行的进程还是一个驱动程序/dll/服务就足够了?
就我的研究而言,我认为我必须做这样的事情,但我不知道具体如何:
一个 WH_GETMESSAGE 挂钩,用于覆盖 WM_CLOSE 以将 Windows 状态设置为 WS_MINIMIZE。
您可以在 C++ 和 C# 中执行此操作。为此,您必须连接到应用程序消息循环并将 WM_CLOSE 消息覆盖为 WM_MINIMIZE。要挂接到任何正在运行的进程,您可以使用:
Microsoft Detours(如果我没记错的话是商业的,不是免费的)(http://research.microsoft.com/en-us/projects/detours/)
EasyHook(在 LGPL 下开源)(http://easyhook.codeplex.com/)
我使用过 EasyHook,我对结果非常满意。它为您提供了非常好的功能,例如使用附加的挂钩启动进程或将挂钩附加到已经运行的进程。此外,它还为您提供托管(C#)和本机挂钩库。我建议你看看它...
对于 C#,这可以通过非常简单的方式完成:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!realClose)
{
e.Cancel = true;
this.WindowState = FormWindowState.Minimized;
}
}
当您确实希望应用程序关闭时(例如,不是当用户按下关闭按钮时,而是当他使用或类似的时候) ,您在哪里realClose
设置为 true 的布尔值file -> exit
不要那样做。禁用关闭按钮。提供一个最小化按钮。