1
0
mirror of synced 2024-12-20 19:35:58 +01:00
OpenTaiko/FDK19/コード/04.グラフィック/CTaskBar.cs
2021-09-21 00:16:38 +02:00

146 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.....任意のメッセージIDhWndの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 );
}
}