先using下面這個

using  System.Runtime.InteropServices;

然後呢,在Class裡宣告這些

[DllImport("SHELL32", CallingConvention = CallingConvention.StdCall)]
static extern uint SHAppBarMessage(int dwMessage, ref APPBARDATA pData);

private int ABM_SETSTATE = 10;

private int ABM_GETSTATE = 4;

      [StructLayout(LayoutKind.Sequential)]
      struct RECT
      {
          public int left;
          public int top;
          public int right;
          public int bottom;
      }


      [StructLayout(LayoutKind.Sequential)]
      struct APPBARDATA
      {
                public int cbSize;
                  public IntPtr hWnd;
                  public int uCallbackMessage;
                  public int uEdge;
                  public RECT rc;
                  public int lParam;     
      }

 

好了

接著在隨便一個函式裡開始準備呼叫

APPBARDATA abd = new APPBARDATA();

abd.lParam = 2;

上面那個2的數字可以自己換成0或1或2或3

0 表示 "將工具列顯示於最上層" 未勾選,"自動隱藏工具列" 未勾選
1 表示 "將工具列顯示於最上層" 未勾選,"自動隱藏工具列" 有勾選
2 表示 "將工具列顯示於最上層" 有勾選,"自動隱藏工具列" 未勾選
3 表示 "將工具列顯示於最上層" 有勾選,"自動隱藏工具列" 有勾選

將工具列顯示於最上層的意思就是AlwaysOnTop的意思~~

最後開始呼叫

SHAppBarMessage(ABM_SETSTATE, ref abd);

寫到這邊就可以去控制TaskBar的AlwaysOnTop的屬性Enabled或是Disabled了

如果要取得現在工作列的狀態是怎樣的話

就用

 MessageBox.Show(SHAppBarMessage(ABM_GETSTATE, ref abd).ToString());

這邊就會秀出狀態是0或1或2或3

 

以上我在XP測試是可以的,其他作業系統我就不確定搂~.~

 

 

 

welkingunther 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • 詢問者
  • 感謝大大無私教導

    已經OK拉

    太感激拉^^V
  • 不客氣^^
    恭喜你成功
    哈哈~

    welkingunther 於 2009/08/20 11:56 回覆