VBからタスクバーの「常に手前に表示」を解除もしくは設定するには?


ぶる3.14  2003-09-08 01:16:16  No: 79327

VBからタスクバーの「常に手前に表示」を解除もしくは設定するには
どうすればいいでしょうか?


魔界の仮面弁士  2003-09-08 07:22:10  No: 79328

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


ぶる3.14  2003-09-08 08:31:30  No: 79329

出来ません・・・。ちなみに私はWin2000です。


魔界の仮面弁士  2003-09-08 10:22:41  No: 79330

ABM_SETSTATEは、仕様上は
》 Windows NT/2000: Requires Windows NT 3.51 or later. 
という事になっているのが、実際にはXP/2003でしか動作しないそうです。
(XPが登場する前は、ABM_SETSTATE定数自体が未定義だった気がする……)


花ちゃん  2003-09-08 21:30:59  No: 79331

以前その件で掲示板で話題になり、結局WindowsXPしか有効にならず、
ダイアログを操作するようにされたようです。
  No.357 の投稿が参考になるかも。

  http://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&pastlog=0001&no=248&page=60&act=past#357

#タスクバーを表示・非表示にするのでは、だめですよね!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加