有api可以得知当前任务栏所在的位置(比如靠上或左右等)以及此时任务栏的高度吗?万分感谢!

解决方案 »

  1.   

    用 FindWindow 或 FindWindowEx 获取任务栏句柄,然后用 GetWindowRect 获取窗口矩形区域信息。
      

  2.   

    Option ExplicitPrivate Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Const SWP_HIDEWINDOW = &H80
    Private Const SWP_SHOWWINDOW = &H40Private Sub Command1_Click()
        Dim hwnd As Long
        Dim TaskRect As RECT
        hwnd = FindWindow("Shell_traywnd", "") 'get the Window
        GetWindowRect hwnd, TaskRect
        MsgBox TaskRect.Top
    End Sub
      

  3.   

    再加上高度:
    trayheight=TaskRect.Top-TaskRect.Bottom
      

  4.   

    太好了,谢谢楼上Mister(菜青虫) 和Zezese(蓝酷云) 。
       我怎么给你们分数?
      

  5.   

    好像有个API函数,但是忘了。
      

  6.   

    SHAppBarMessage(ABM_GETTASKBARPOS, pabd)
      

  7.   

    用FindWindow("Shell_traywnd",“”)得到任务栏坐标(任务栏靠上),并且根据top & bottom计算出高度tmpheight,但是使用Me.top = tmpheight,却不能让窗口紧贴任务栏,是不是坐标单位不统一呢?
      

  8.   

    这个当然是的.你用得到的是一象素为单位的值,你只需要将之转换为你窗体所用的Scalemode的值即可
      

  9.   

    再加上Scalex和ScaleY函数吧
    例如Widht = Scalex(TaskRect.Right,3,1)
      

  10.   

    给你个思路:先得到桌面窗口的句柄,然后得到桌面的工作区域大小(得到的是不包含任务栏的大小的像素值,这个api函数我忘了,懒的翻书),获得分辨率,用的到的分辨率的宽减得到的工作区的宽用分辨率的高减分辨率的高,这样不管任务栏在上下或左右都可以知道,也知道它到底占多少个像素
      

  11.   

    还有个比较简单的方式,使用MS提供的SysInfo控件。