我有一个情况我需要捕捉的WindowState另一个窗口的变化(这是不是我的应用程序拥有的,我没有写的。我认为它是用C++编写的)。C#:捕获的WindowState其他应用程序的变化(在C/C写道++我认为)
其实我使用一个单独的线程在那里我经常做GetWindowState和火灾自定义事件时该值发生变化(我有窗口的句柄),但我想知道是否有更好的方法
谢谢,
PS 我使用的winform如果能以任何方式
我有一个情况我需要捕捉的WindowState另一个窗口的变化(这是不是我的应用程序拥有的,我没有写的。我认为它是用C++编写的)。C#:捕获的WindowState其他应用程序的变化(在C/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。
这两者都不能用C#来完成。 –
那么它不是一个问题,如果我必须写在C++,问题的东西,但是我想的太复杂了这样一个工具,我试图发展... –
@Hans,可以互操作使用(P /调用)用C#实现这样的事情。 – foxy
当然这假定你知道如何获得窗口的句柄。如果你不只是阅读Win32 API的教程。特别是FindWindow和FindWindowEx函数。 API间谍也很有用。检查我们的patorjk.com,他们有免费的API间谍。 – murktinez
我没有看到这里的时候,我问怎么** **捕捉变化的WindowState,没怎么检查它是更容易 –
如果在定时器使用这个类,保存窗口状态,每次计时器,然后执行你会知道窗口状态何时改变。这很简单。如果你试图阻止一个窗口的状态被改变,那是不一样的,而你需要更清楚一些。我公司可提供的代码要做到这一点,以及 – murktinez