C#: захватить изменения состояния Windows другого приложения (я думаю, что написано на c/ C++)
У меня есть ситуация, когда мне нужно захватить изменения состояния окна другого окна (которое не принадлежит моему приложению, и я его не написал. Я думаю, что оно написано на C++).
На самом деле я использую отдельный поток, где я постоянно делаю GetWindowState и запускаю пользовательские события, когда это значение изменяется (у меня есть дескриптор окна), но я хотел бы знать, есть ли лучший метод
Спасибо,
PS Я использую Winform, если может быть полезным в любом случае
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;
}
}
Вы можете подключить WNDPROC и перехватить сообщения с этим. Вы можете либо внедрить DLL в целевой процесс, открыть процесс с привилегиями отладки или установить глобальный хук на WH_CALLWNDPROC.