c# 判斷窗體是否永在最前(TopMost),調用windows API

  許多程序均可以把自身的窗體設爲最前顯示狀態,這個能夠參考博客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;     }   }

相關文章
相關標籤/搜索