スタートボタンの設定
実のところ、このセクションのタイトルは誤解を招くものかもしれません。スタートボタンには実はWindows XPで設定できるプロパティはないのですが、スタートボタンを有効/無効にしたり、スタートボタンテキストのようなものを変更したりすることができます。
スタートボタンを有効/無効にする
やるべきことは、タスクバー内のスタートボタンのウィンドウへのハンドルを取得してから、EnableWindow
でTrue
(有効)またはFalse
(無効)を指定することによってスタートボタンウィンドウを有効/無効にすることです。
Private Sub btnStartButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnStartButton.Click Select Case btnStartButton.Text Case "Disable Start Button" Dim TaskBarWin As Long, StartButtonWin As Long 'Find TaskBar TaskBarWin = FindWindowEx(0, 0, "Shell_TrayWnd", Nothing) 'Find Start Button StartButtonWin = FindWindowEx(TaskBarWin, 0, "Button", Nothing) 'Disable Start Button EnableWindow(StartButtonWin, False) btnStartButton.Text = "Enable Start Button" Case "Enable Start Button" Dim TaskBarWin As Long, StartButtonWin As Long TaskBarWin = FindWindowEx(0, 0, "Shell_TrayWnd", Nothing) StartButtonWin = FindWindowEx(TaskBarWin, 0, "Button", Nothing) EnableWindow(StartButtonWin, True) 'Enable Start Button btnStartButton.Text = "Disable Start Button" End Select End Sub
スタートボタンテキストを変更する
もしかしたら、この記事の中で1番先に読まれるのはこのトピックかもしれません。
スタートボタンウィンドウ(ボタン)へのハンドルを取得したら、修正版のSendMessage APIを使って、このウィンドウに新しいテキストを送る必要があります。お使いのAPIをよく見ると、次の2つのものに気付くでしょう。
SendMessage
'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
SendMessageSTRING
'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
両者の実際の違いは、後者のlParam
パラメータが“文字列”であって、Int32
ではないという点だけです。このようになっている理由は、スタートボタンテキストとして数値メッセージではなく文字列メッセージを送るからです。
次のプロシージャをコードに追加してください。
Private Sub SetStartCaption(ByVal NewStr As String) Dim TaskBarWin As Long Dim StartWin As Long Dim StartText As String 'Find TaskBar TaskBarWin = FindWindow("Shell_TrayWnd", vbNullString) 'Find Start Button StartWin = FindWindowEx(TaskBarWin, 0&, "button", vbNullString) 'Set StartButton Text StartText = Microsoft.VisualBasic.Left(NewStr, 5) 'Send The Message SendMessageSTRING(StartWin, WM_SETTEXT, 256, StartText) Exit Sub 'Don't Do Anything Else End Sub
このプロシージャはスタートボタンのテキストを更新するためのものです。ハンドルを取得してから、スタートボタンウィンドウに文字列メッセージを送ります。送られる内容は、Change Start Button Text
ボタンのコードのInputBox
に何を入力するかで決まります。
Private Sub btnText_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnText.Click Select Case btnText.Text Case "Change Start Button Text" Dim NewText As String NewText = InputBox("Enter New Text") 'Get New Start Button Text SetStartCaption(NewText) btnText.Text = "Change Back Start Button Text" Case "Change Back Start Button Text" SetStartCaption("Start") 'Revert Back To "Start" btnText.Text = "Change Start Button Text" End Select End Sub
テキストを入力した後のスタートボタンの表示は、例えば図4のようになります。
これの唯一の問題点は、ウィンドウ内に収まる文字数までしか入力できないことです。