0

別のウィンドウのウィンドウ状態の変更をキャプチャする必要がある状況があります (アプリケーションが所有しておらず、作成していません。C++ で作成されていると思います)。

実際には、GetWindowState を常に実行し、この値が変更されたときにカスタム イベントを発生させる別のスレッドを使用しています (ウィンドウのハンドルを持っています) が、より良い方法があるかどうかを知りたいです。

ありがとう、

PS何らかの方法で役立つ場合は、winformを使用しています

4

2 に答える 2

2
//use this in a timer or hook the window
//this would be the easier way
using System;
using System.Runtime.InteropServices;

public static class WindowState
{
    [DllImport("user32")]
    private static extern int IsWindowEnabled(int hWnd);

    [DllImport("user32")]
    private static extern int IsWindowVisible(int hWnd);

    [DllImport("user32")]
    private static extern int IsZoomed(int hWnd);

    [DllImport("user32")]
    private static extern int IsIconic(int hWnd);

    public static bool IsMaximized(int hWnd) 
    {
        if (IsZoomed(hWnd) == 0)
            return false;
        else
            return true;
    }

    public static bool IsMinimized(int hWnd)
    {
        if (IsIconic(hWnd) == 0)
            return false;
        else
            return true;
    }

    public static bool IsEnabled(int hWnd)
    {
        if (IsWindowEnabled(hWnd) == 0)
            return false;
        else
            return true;
    }

    public static bool IsVisible(int hWnd)
    {
        if (IsWindowVisible(hWnd) == 0)
            return false;
        else
            return true;
    }

}
于 2011-06-17T06:03:28.190 に答える
1

WNDPROC をフックして、メッセージをインターセプトできます。ターゲット プロセスに DLL を挿入するか、デバッグ特権でプロセスを開くか、グローバル フックを WH_CALLWNDPROC に設定することができます。

于 2011-06-17T01:01:52.293 に答える