VBからタスクバーの「常に手前に表示」を解除もしくは設定するには
どうすればいいでしょうか?
SHAppBarMessage APIを使います。VB6であれば、こんな感じですかね。
# 同じ関数で[自動的に隠す]設定も扱えるので、一緒に書いておきますね。
Option Explicit
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type AppBarData
cbSize As Long
hWnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End Type
Private Const ABM_SETSTATE As Long = &HA&
Private Const ABM_GETSTATE As Long = &H4&
Private Const ABS_AUTOHIDE As Long = &H1&
Private Const ABS_ALWAYSONTOP As Long = &H2&
Private Declare Function SHAppBarMessage Lib "shell32.dll" _
(ByVal dwMessage As Long, pData As AppBarData) As Long
Public Property Get TaskbarTopMost() As Boolean
Dim pabd As AppBarData
pabd.cbSize = Len(pabd)
TaskbarTopMost = CBool(ABS_ALWAYSONTOP And SHAppBarMessage(ABM_GETSTATE, pabd))
End Property
Public Property Let TaskbarTopMost(ByVal fAlwaysTopMost As Boolean)
Dim pabd As AppBarData
pabd.cbSize = Len(pabd)
pabd.hWnd = Me.hWnd
'pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) Xor ABS_ALWAYSONTOP
If fAlwaysTopMost Then
pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) Or ABS_ALWAYSONTOP
Else
pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) And Not ABS_ALWAYSONTOP
End If
SHAppBarMessage ABM_SETSTATE, pabd
End Property
Public Property Get TaskbarAutoHide() As Boolean
Dim pabd As AppBarData
pabd.cbSize = Len(pabd)
TaskbarAutoHide = CBool(ABS_AUTOHIDE And SHAppBarMessage(ABM_GETSTATE, pabd))
End Property
Public Property Let TaskbarAutoHide(ByVal fAutoHide As Boolean)
Dim pabd As AppBarData
pabd.cbSize = Len(pabd)
pabd.hWnd = Me.hWnd
'pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) Xor ABS_AUTOHIDE
If fAutoHide Then
pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) Or ABS_AUTOHIDE
Else
pabd.lParam = SHAppBarMessage(ABM_GETSTATE, pabd) And Not ABS_AUTOHIDE
End If
SHAppBarMessage ABM_SETSTATE, pabd
End Property
Private Sub Check1_Click()
TaskbarTopMost = CBool(Me.Check1.Value = vbChecked)
End Sub
Private Sub Check2_Click()
TaskbarAutoHide = CBool(Me.Check2.Value = vbChecked)
End Sub
Private Sub Form_Load()
Me.Check1.Caption = "タスクバーを常に手前に表示"
Me.Check1.Value = IIf(TaskbarTopMost, vbChecked, vbUnchecked)
Me.Check2.Caption = "タスクバーを自動的に隠す"
Me.Check2.Value = IIf(TaskbarAutoHide, vbChecked, vbUnchecked)
End Sub
出来ません・・・。ちなみに私はWin2000です。
ABM_SETSTATEは、仕様上は
》 Windows NT/2000: Requires Windows NT 3.51 or later.
という事になっているのが、実際にはXP/2003でしか動作しないそうです。
(XPが登場する前は、ABM_SETSTATE定数自体が未定義だった気がする……)
以前その件で掲示板で話題になり、結局WindowsXPしか有効にならず、
ダイアログを操作するようにされたようです。
No.357 の投稿が参考になるかも。
#タスクバーを表示・非表示にするのでは、だめですよね!
ツイート | ![]() |