スタートボタンの設定
実のところ、このセクションのタイトルは誤解を招くものかもしれません。スタートボタンには実は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のようになります。

これの唯一の問題点は、ウィンドウ内に収まる文字数までしか入力できないことです。
