许多程序均可以把自身的窗体设为最前显示状态,这个能够参考博客c#让窗体永在最前 调用windows api 将窗体设为topmost。那么如何判断桌面上的一个窗体是否为最前显示状态呢,不光是本身的程序,还包括其它程序。咱们能够经过调用Windows Api的GetWindowLong方法判断。html
GetWindowLong是一个Windows API函数。该函数得到有关指定窗口的信息,函数也得到在额外窗口内存中指定偏移位地址的32位度整型值。c#
函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);windows
参数说明:api
hWnd:窗口句柄及间接给出的窗口所属的窗口类。函数
nIndex:指定要得到值的大于等于0的值的偏移量。有效值的范围从0到额外窗口内存空间的字节数一4例如,若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要得到任意其余值,指定下列值之一:post
GWL_EXSTYLE(-20):得到扩展窗口风格。spa
GWL_HINSTANCE(-6):得到应用实例的句柄。htm
GWL_HWNDPARENT(-8):若是父窗口存在,得到父窗口句柄。blog
GWL_ID(-12):得到窗口标识。索引
GWL_STYLE(-16):得到窗口风格。
GWL_USERDATA(-21):得到与窗口有关的32位值。每个窗口均有一个由建立该窗口的应用程序使用的32位值。
GWL_WNDPROC(-4):得到窗口过程的地址,或表明窗口过程的地址的句柄。必须使用CallWindowProc函数调用窗口过程。
返回值:若是函数成功,返回值是所需的32位值;若是函数失败,返回值是0。
代码以下:
public class CheckTopMost
{
private const int WS_EX_TOPMOST = 0x00000008;
[DllImport("user32.dll", SetLastError = true)]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
/// <summary> /// 判断窗口是否为TopMost /// </summary> /// <param name="hWnd"></param> /// <returns></returns> public static bool CheckIsTopMost(IntPtr hWnd) { int style = GetWindowLong(hWnd, WS_EX_TOPMOST); style = style & WS_EX_TOPMOST; if (style == WS_EX_TOPMOST) { return true; } return false; } }