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 回答