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


  許多程序都可以把自身的窗體設為最前顯示狀態,這個可以參考博客c#讓窗體永在最前 調用windows api 將窗體設為topmost。那么如何判斷桌面上的一個窗體是否為最前顯示狀態呢,不光是自己的程序,還包括其它程序。我們可以通過調用Windows Api的GetWindowLong方法判斷。

  GetWindowLong是一個Windows API函數。該函數獲得有關指定窗口的信息,函數也獲得在額外窗口內存中指定偏移位地址的32位度整型值。

  函數原型:LONG GetWindowLong(HWND hWnd,int nlndex);

  參數說明:

    hWnd:窗口句柄及間接給出的窗口所屬的窗口類。

    nIndex:指定要獲得值的大於等於0的值的偏移量。有效值的范圍從0到額外窗口內存空間的字節數一4例如,若指定了12位或多於12位的額外類存儲空間,則應設為第三個32位整數的索引位8。要獲得任意其他值,指定下列值之一:

      GWL_EXSTYLE(-20):獲得擴展窗口風格。

      GWL_HINSTANCE(-6):獲得應用實例的句柄。

      GWL_HWNDPARENT(-8):如果父窗口存在,獲得父窗口句柄。

      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;
    }
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM