'Sends an appbar message to the system.
'给你一段代码吧Const ABS_AUTOHIDE = &H1
Const ABS_ONTOP = &H2
Const ABM_GETSTATE = &H4
Const ABM_GETTASKBARPOS = &H5
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 '  message specific
End Type
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Sub Form_Paint()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    Dim ABD As APPBARDATA, Ret As Long
    'Get the taskbar's position
    SHAppBarMessage ABM_GETTASKBARPOS, ABD
    'Get the taskbar's state
    Ret = SHAppBarMessage(ABM_GETSTATE, ABD)
    If (Ret And ABS_AUTOHIDE) Then Me.Print "Autohide option is on"
    If (Ret And ABS_ONTOP) Then Me.Print "Always on top option is on"
    Me.Print "Taskbar coordinates: (" + Trim(Str(ABD.rc.Left)) + "," + Trim(Str(ABD.rc.Top)) + ")-(" + Trim(Str(ABD.rc.Right)) + "," + Trim(Str(ABD.rc.Bottom)) + ")"
End Sub

解决方案 »

  1.   

    '.Bas
    Public Const ABM_NEW = &H0
    Public Const ABM_REMOVE = &H1
    Public Const ABM_QUERYPOS = &H2
    Public Const ABM_SETPOS = &H3
    Public Const ABM_GETSTATE = &H4
    Public Const ABM_GETTASKBARPOS = &H5
    Public Const ABM_ACTIVATE = &H6
    Public Const ABM_GETAUTOHIDEBAR = &H7
    Public Const ABM_SETAUTOHIDEBAR = &H8
    Public Const ABM_WINDOWPOSCHANGED = &H9Public Const ABN_STATECHANGE = &H0
    Public Const ABN_POSCHANGED = &H1
    Public Const ABN_FULLSCREENAPP = &H2
    Public Const ABN_WINDOWARRANGE = &H3Public Const ABS_AUTOHIDE = &H1
    Public Const ABS_ALWAYSONTOP = &H2Public Const ABE_LEFT = 0
    Public Const ABE_TOP = 1
    Public Const ABE_RIGHT = 2
    Public Const ABE_BOTTOM = 3Type RECT
      Left As Long
      Top As Long
      Right As Long
      Bottom As Long
    End TypeType APPBARDATA
      cbSize As Long
      hwnd As Long
      uCallbackMessage As Long
      uEdge As Long
      rc As RECT
      lParam As Long      'message specific
    End TypeDeclare Function SHAppBarMessage Lib "shell32" _
        (ByVal dwMessage As Long, _
         pData As APPBARDATA) As Long 
    '----------------------------------------------
    ' Form
    'To a form containing a command button (Command1) and a text box (Text1). Set the textbox to multiline and the scrollbars to 2 - Vertical, and add the following codeOption ExplicitPrivate Sub Command1_Click()  Dim rc As RECT
      Dim ABD As APPBARDATA
      Dim state As Long
      Dim position As Integer
      Dim hWndAppBar As Long
      Dim msg As String
        
     'initialize the APPBARDATA structure
      ABD.cbSize = Len(ABD)
          
     'get the appbar state  
      state = SHAppBarMessage(ABM_GETSTATE, ABD)
        
     'prepare the appropriate message based on the returned state
      msg = "SHAppBarMessage ABM_GETSTATE return value is " & state & ":" & vbCrLf & vbCrLf
      
      Select Case state
          Case False
                msg = msg & "  - Auto Hide= False, Always on Top = False." & vbCrLf
                msg = msg & "  - User allows apps cover the taskbar." & vbCrLf
                msg = msg & "  - The taskbar must be manually invoked with maximized apps."
          
          Case ABS_ALWAYSONTOP
                msg = msg & "  - Always on Top = True." & vbCrLf
                msg = msg & "  - User wants the taskbar on-screen at all times." & vbCrLf
                msg = msg & "  - The available screen is reduced by the taskbar size."
          
          Case Else
                msg = msg & "  - Auto Hide = True." & vbCrLf
                msg = msg & "  - The taskbar appears on a mousemove." & vbCrLf
                msg = msg & "  - There are taskbar(s) positioned on the "
               
               'see which edge has a taskbar
                For position = ABE_LEFT To ABE_BOTTOM
                  
                   ABD.uEdge = position
                   hWndAppBar = SHAppBarMessage(ABM_GETAUTOHIDEBAR, ABD)
                  
                   If hWndAppBar > 0 Then
                  
                     Select Case position
                        Case ABE_LEFT:   msg = msg & "LEFT "
                        Case ABE_TOP:    msg = msg & "TOP "
                        Case ABE_RIGHT:  msg = msg & "RIGHT "
                        Case ABE_BOTTOM: msg = msg & "BOTTOM "
                     End Select
                    
                   End If
                
                Next 
            
        End Select
        
       'display the results
        Text1.Text = msg
          
    End Sub
      

  2.   

    感谢楼上2位,
    不过,我的问题是新register一个appBar失败,我找不出原因
      

  3.   

    如果有一个AppBar已经注册成为ABE_TOP,你的注册就会出错
      

  4.   

    我又看了一下MSDN,如果你用ABM_NEW消息的话,如果窗体已经注册了,那么函数就会返回false
      

  5.   

    我的屏幕上没有注册过新的appbar,昨天都是成功register,今天不知怎么搞得?
      

  6.   

    而且我用了一个别人的程序就可以注册的,不过它写的复杂,用subclass来做的,我只打算做个简单点的