ちょっとした理論。 多くの場合、プログラマーは標準のWindowsデスクトップインターフェイス要素にアクセスしたいと考えています。 初心者プログラマにとって、タスクバーと[スタート]ボタンがウィンドウであることを知るのは興味深いでしょう(実際、オペレーティングシステムの名前はここからです)。 したがって、必要なのは、目的のウィンドウへのハンドルを取得し、適切な関数を使用してこのウィンドウを非表示または表示することだけです。
ウィンドウハンドルを取得するには、クラス名を知る必要があります。
タスクバーの場合、これはShell_TrayWndクラスです
スタートボタン用-ボタン
通知エリア用-TrayNotifyWnd
システムクロック領域用-TrayClockWClass
このような困難な作業には、いくつかの機能すべてが必要になります。
[DllImport("user32.dll")] private static extern IntPtr FindWindow(string ClassName, string WindowName); [DllImport("user32.dll")] private static extern IntPtr FindWindowEx( IntPtr hwndParent, IntPtr hwndChildAfter, string className, string windowName); [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
次に、各要素に対して複数の変数を宣言します。
private IntPtr TaskbarHWnd; // private IntPtr StartButtonHWnd; // private IntPtr TrayNotifyHWnd; // private IntPtr ClockHwnd; //
準備が整いました。 タスクバー要素の非表示/表示を開始できます
タスクバー
タスクバーを非表示にするには、その記述子を見つけて、 ShowWindow関数を使用してウィンドウを非表示にする必要があります。
// . // TaskbarHWnd = FindWindow("Shell_TrayWnd", null); // / if (TaskbarHWnd != IntPtr.Zero) { ShowWindow(TaskbarHWnd, show ? SW_SHOW : SW_HIDE); } show = !show;
スタートボタン
STARTボタンは表示されたままで、以前のコードはタスクバーのみを非表示にすることに注意してください。 以前のWindows 98 / XPでは、[スタート]ボタンはタスクバーの一部であり、タスクバーと共に隠されていました(覚えているなら、実際には長方形のボタンでした)。 ボタン自体を非表示にするには、いくつかの関数を再度呼び出す必要があります。
StartButtonHWnd = FindWindow("Button", null); if (StartButtonHWnd != IntPtr.Zero) { //ShowWindow(StartButtonHWnd, show ? SW_SHOW : SW_HIDE); // Windows XP SetWindowPos(StartButtonHWnd, IntPtr.Zero, 0, 0, 0, 0, show ? SetWindowPosFlags.SWP_SHOWWINDOW : SetWindowPosFlags.SWP_HIDEWINDOW); }
ご覧のとおり、今回はボタンを非表示にするために、別の関数SetWindowPosを使用します。これは、 ShowWindowが以前のように非表示にならないためです。 もう一度クリックすると、[スタート]ボタンが画面に表示されないことに注意してください。 STARTがある場所にマウスポインターを移動する必要があり、ボタンが再び描画されます。 おそらく、画面にボタンを描画するように強制する関数を呼び出すことができますが、私はこれを気にしませんでした。 解決策を見つけたら、私に送ってください。
したがって、タスクバー自体に触れることなく、STARTボタンのみを非表示にできます。
通知エリア
通知領域は、タスクバーと同じ原則に従って非表示になります。
TaskbarHWnd = FindWindow("Shell_TrayWnd", null); TrayNotifyHWnd = FindWindowEx(TaskbarHWnd, IntPtr.Zero, "TrayNotifyWnd", null); // ShowWindow(TrayNotifyHWnd, show ? SW_HIDE : SW_SHOW); show = !show;
見る
前の例では、ウォッチとともに通知領域を非表示にしました。 通知領域に触れずに時計のみを非表示にするには、少し試す必要があります。 最初に通知領域ハンドルを見つけ、次にその子ウィンドウTrayClockWClassを見つけます
TaskbarHWnd = FindWindow("Shell_TrayWnd", null); TrayNotifyHWnd = FindWindowEx(TaskbarHWnd, IntPtr.Zero, "TrayNotifyWnd", null); // ClockHwnd = FindWindowEx(TrayNotifyHWnd, IntPtr.Zero, "TrayClockWClass", null); // ShowWindow(ClockHwnd, show ? SW_HIDE : SW_SHOW); show = !show;