我有一种情况,我需要捕获另一个窗口的窗口状态更改(它不属于我的应用程序,我没有编写它。我认为它是用 C++ 编写的)。
实际上,我正在使用一个单独的线程,在该线程中我不断执行 GetWindowState 并在此值更改时触发自定义事件(我有窗口的句柄),但我想知道是否有更好的方法
谢谢,
PS如果可以以任何方式有用,我正在使用winform
我有一种情况,我需要捕获另一个窗口的窗口状态更改(它不属于我的应用程序,我没有编写它。我认为它是用 C++ 编写的)。
实际上,我正在使用一个单独的线程,在该线程中我不断执行 GetWindowState 并在此值更改时触发自定义事件(我有窗口的句柄),但我想知道是否有更好的方法
谢谢,
PS如果可以以任何方式有用,我正在使用winform
//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。