はじめに
数日前、ある学生に尋ねられました。VB.NETプログラムからタスクバーを操作することは可能かどうかと。そこで私はその学生のためにこのサンプルアプリケーションを作成することにしました。この記事では、タスクバーの大部分の設定を操作できるアプリケーションの作成方法を示します。ここで扱う機能は次のとおりです。
- 時計を隠す
- タスクバーを固定する
- 同類のタスクバーボタンをグループ化する
- タスクバーの内容(アクティブなウィンドウのボタン)を隠す
- アクティブでないトレイアイコンを自動的に隠す
- タスクバーを自動的に隠す
- タスクバーを他のウィンドウの手前に表示する
- スタートボタンを無効にする
- スタートボタンのテキストを変更する
- タスクバーのプロパティを表示する
- デスクトップ機能を表示する
デザイン
今回は図1のようなフォームをデザインしました。ボタンの名前は自分にとって分かりやすいものに変更するとよいでしょう。
コーディング
コードウィンドウの冒頭に次のImportを追加してください。この記事全体でいくつかのレジストリ機能を使用するからです。
Imports Microsoft.win32 'Registry Functions Imports System.Runtime.InteropServices 'API functions
曖昧さを避けるため、私はすべてのAPIとそれらに関連する定数から始めることにしました。下記のコードをコードウィンドウに追加してください。
'Find External Window Private Declare Function FindWindow Lib "user32.dll" Alias _ "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Int32 'Find Child Window Of External Window Private Declare Function FindWindowEx Lib "user32.dll" Alias _ "FindWindowExA" (ByVal hWnd1 As Int32, _ ByVal hWnd2 As Int32, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Int32 'Show A Window Private Declare Function ShowWindow Lib "user32.dll" _ (ByVal hwnd As Int32, _ ByVal nCmdShow As Int32) As Int32 'Post Message To Window Private Declare Function PostMessage Lib "user32.dll" Alias _ "PostMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, _ ByVal wParam As Int32, _ ByVal lParam As Int32) As Int32 'Enable A Window Private Declare Function EnableWindow Lib "user32.dll" _ (ByVal hwnd As Int32, ByVal fEnable As Int32) As Int32 'SendMessage lParam = String Private Declare Function SendMessageSTRING Lib _ "user32.dll" Alias "SendMessageA" _ (ByVal hwnd As Int32, _ ByVal wMsg As Int32, _ ByVal wParam As Int32, _ ByVal lParam As String) As Int32 'Send Message & Wait Declare Auto Function SendMessageTimeout Lib "User32" ( _ ByVal hWnd As Integer, _ ByVal Msg As UInt32, _ ByVal wParam As Integer, _ ByVal lParam As Integer, _ ByVal fuFlags As UInt32, _ ByVal uTimeout As UInt32, _ ByRef lpdwResult As IntPtr _ ) As Long 'Normal SendMessage Private Declare Function SendMessage Lib "user32.dll" _ Alias "SendMessageA" _ (ByVal hwnd As Int32, _ ByVal wMsg As Int32, _ ByVal wParam As Int32, _ ByVal lParam As Int32) As Int32 'Get Handle To Desktop Private Declare Function GetDesktopWindow Lib "user32" () As IntPtr Private Const WM_WININICHANGE = &H1A 'INI File Update Private Const HWND_BROADCAST = &HFFFF& 'Send To All Private Const WM_SETTINGCHANGE = &H1A 'Setting Change Private Const SMTO_ABORTIFHUNG = &H2 'Stop If Hang Private Const WM_COMMAND As Int32 = &H111 'Send Command Private Const WM_USER As Int32 = &H400 'User Private Const WM_SETTEXT = &HC 'Change Text Private Const WM_GETTEXT = &HD 'Get Text
コメントを読めば、それぞれのAPIの機能がどのようなものか概ね分かるはずです。APIを初めてみる方には、この記事を読むようお勧めします。もちろん、本稿でも詳しい説明を行います。