5

サードパーティ製アプリケーションの閉じるボタンをオーバーライドして、代わりにアプリケーションが最小化されるようにしたいと考えています。ターゲット アプリケーションのソース コードがありません。

  • C#でそんなこと書けるの?または、C++ を使用する必要がありますか?
  • この種のフックを書くにはどうすればよいですか? 実行中のプロセスが必要ですか、それともドライバー/dll/サービスで十分ですか?

私が調査した限り、私はこのようなことをしなければならないと思いますが、正確にはわかりません:

WM_CLOSE をオーバーライドして Windows ステータスを WS_MINIMIZE に設定するための WH_GETMESSAGE フック。

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 に答える