OSDN Git Service

Merge branch 'feature/37178_プロジェクトとソリューションファイルの英語化' into develop
[dtxmania/dtxmania.git] / FDK / コード / 04.グラフィック / CTaskBar.cs
diff --git a/FDK/コード/04.グラフィック/CTaskBar.cs b/FDK/コード/04.グラフィック/CTaskBar.cs
new file mode 100644 (file)
index 0000000..d221fa0
--- /dev/null
@@ -0,0 +1,145 @@
+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 );
+                       }
+               }
+
+               /// <summary>
+               /// 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に依存する)
+               /// </summary>
+               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
+               }
+
+               /// <summary>
+               /// 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メッセージと共に使用される)
+               /// </summary>
+               [StructLayout( LayoutKind.Sequential )]
+               private struct APPBARDATA
+               {
+                       public int cbSize;
+                       public IntPtr hWnd;
+                       public uint uCallbackMessage;
+                       public ABEdge uEdge;
+                       public RECT rc;
+                       public int lParam;
+               }
+               /// <summary>
+               /// ABEdge
+               /// </summary>
+               private enum ABEdge : int
+               {
+                       ABE_LEFT = 0,
+                       ABE_TOP = 1,
+                       ABE_RIGHT = 2,
+                       ABE_BOTTOM = 3
+               }
+               /// <summary>
+               /// RECT
+               /// </summary>
+               [StructLayout( LayoutKind.Sequential )]
+               private struct RECT
+               {
+                       public int left;
+                       public int top;
+                       public int right;
+                       public int bottom;
+               }
+               /// <summary>
+               /// SHAppBarMessage
+               /// </summary>
+               /// <param name="dwMessage"></param>
+               /// <param name="pData"></param>
+               /// <returns></returns>
+               [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 );
+       }
+}