C #: захватить изменения состояния Windows другого приложения (я думаю, что написано на c / c ++) - PullRequest
0 голосов
/ 17 июня 2011

У меня есть ситуация, когда мне нужно записать изменения состояния окна другого окна (которое не принадлежит моему приложению, и я не написал его. Я думаю, что оно написано на C ++).

На самом деле я 'Я использую отдельный поток, в котором я постоянно выполняю GetWindowState и запускаю настраиваемые события при изменении этого значения (у меня есть дескриптор окна), но я хотел бы знать, если есть лучший метод

Спасибо,

PS Я использую winform, если это может быть полезно любым способом

Ответы [ 2 ]

2 голосов
/ 17 июня 2011
//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;
    }

}
1 голос
/ 17 июня 2011

Вы можете перехватить WNDPROC и перехватывать сообщения с этим. Вы можете либо внедрить DLL в целевой процесс, открыть процесс с привилегиями отладки или установить глобальный хук на WH_CALLWNDPROC.

...