using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Windows.Forms; using System.Runtime.InteropServices; namespace FDK { // referenced from http://dalmore.blog7.fc2.com/blog-entry-34.html public static class CTaskBar { public static void ShowTaskBar( bool bShowTaskBar ) { Int32 hWnd1 = FindWindow( "Shell_TrayWnd", null ); if( hWnd1 != 0 ) { //タスクバーの表示 if ( bShowTaskBar ) { ShowWindow( hWnd1, TASKBAR_SHOW ); //// タスクバーを常に表示 } else { ShowWindow( hWnd1, TASKBAR_HIDE ); } APPBARDATA pData = new APPBARDATA(); pData.cbSize = Marshal.SizeOf( pData ); pData.hWnd = (IntPtr)hWnd1; pData.lParam = (int)ABMsg.ABM_NEW; //REMOVEにするとオートハイドになる //タスクバーにメッセージ送信 SHAppBarMessage( ABMsg.ABM_SETSTATE, ref pData ); } Int32 hWnd2 = FindWindow( "Button", "スタート" ); if ( hWnd2 != 0 ) { //タスクバーの表示 if ( bShowTaskBar ) { ShowWindow( hWnd2, TASKBAR_SHOW ); //// タスクバーを常に表示 } else { ShowWindow( hWnd2, TASKBAR_HIDE ); } APPBARDATA pData = new APPBARDATA(); pData.cbSize = Marshal.SizeOf( pData ); pData.hWnd = (IntPtr) hWnd2; pData.lParam = (int) ABMsg.ABM_NEW; //REMOVEにするとオートハイドになる //タスクバーにメッセージ送信 SHAppBarMessage( ABMsg.ABM_SETSTATE, ref pData ); } } /// /// ABMsg 送るAppBarメッセージの識別子(以下のいずれか1つ) /// _ABM_ACTIVATE---AppBarがアクティブになった事をシステムに通知 /// _ABM_GETAUTOHIDEBAR---スクリーンの特定の端に関連付けられているオートハイドAppBarのハンドルを返す /// _ABM_GETSTATE---タスクバーがオートハイドか常に最前面のどちらの常態にあるかを返す /// _ABM_GETTASKBARPOS---タスクバーの使用領域を返す /// _ABM_NEW---新しいAppBarを登録し、システムが通知に使用するメッセージIDを指定する /// _ABM_QUERYPOS---AppBarのためのサイズとスクリーン位置を要求する /// _ABM_REMOVE---AppBarの登録を削除する /// _ABM_SETAUTOHIDEBAR---スクリーンの端にオートハイドAppBarを登録または削除する /// _ABM_SETPOS---AppBarのサイズとスクリーン座標を設定する /// _ABM_WINDOWPOSCHANGED---AppBarの位置が変更されたことをシステムに通知する /// pData: TAppBarData構造体(各フィールドはdwMessageに依存する) /// private enum ABMsg : int { ABM_NEW = 0, ABM_REMOVE = 1, ABM_QUERYPOS = 2, ABM_SETPOS = 3, ABM_GETSTATE = 4, ABM_GETTASKBARPOS = 5, ABM_ACTIVATE = 6, ABM_GETAUTOHIDEBAR = 7, ABM_SETAUTOHIDEBAR = 8, ABM_WINDOWPOSCHANGED = 9, ABM_SETSTATE = 10 } /// /// APPBARDATA SHAppBarMessage関数にて使用されるAppBarに関する構造体。 /// cbSize.....SizeOf(TAppBarData) /// hWnd.....AppBarのハンドル /// uCallbackMessage.....任意のメッセージID(hWndのAppBarにメッセージを通知する際(ABM_NEWメッセージを送る際)に使用) /// uEdge.....スクリーンの端を指定するフラグ(ABM_GETAUTOHIDEBAR、ABM_QUERYPOS、ABM_SETAUTOHIDEBAR、ABM_SETPOSメッセージを送る際に使用し、以下のいずれか1つ) /// _ABE_BOTTOM---下サイド /// _ABE_LEFT--- 左サイド /// _ABE_RIGHT---右サイド /// _ABE_TOP---上サイド /// rc.....AppBarやタスクバーのスクリーン座標での表示領域(ABM_GETTASKBARPOS、ABM_QUERYPOS、ABM_SETPOSメッセージを送る際に使用する) /// lParam.....メッセージ依存のパラメータ(ABM_SETAUTOHIDEBARメッセージと共に使用される) /// [StructLayout( LayoutKind.Sequential )] private struct APPBARDATA { public int cbSize; public IntPtr hWnd; public uint uCallbackMessage; public ABEdge uEdge; public RECT rc; public int lParam; } /// /// ABEdge /// private enum ABEdge : int { ABE_LEFT = 0, ABE_TOP = 1, ABE_RIGHT = 2, ABE_BOTTOM = 3 } /// /// RECT /// [StructLayout( LayoutKind.Sequential )] private struct RECT { public int left; public int top; public int right; public int bottom; } /// /// SHAppBarMessage /// /// /// /// [DllImport( "shell32.dll", CallingConvention = CallingConvention.StdCall )] private static extern int SHAppBarMessage( ABMsg dwMessage, ref APPBARDATA pData ); [DllImport("user32.dll", EntryPoint = "ShowWindow")] private static extern int ShowWindow(Int32 hWnd, int nCmdShow); private const int TASKBAR_HIDE = 0; private const int TASKBAR_SHOW = 5; [DllImport( "user32.dll", EntryPoint = "FindWindow" )] private static extern Int32 FindWindow( String lpClassName, String lpWindowName ); } }