如何在程序初始化的时候设置 WINDOWS任务栏自动隐藏?就象在任务栏那点鼠标右键,然后在“总在最前” 和“自动隐藏”两项目都打上勾的效果?我要的不是下面这段代码达到的效果,它只是将栏目完全不可显示,但它实际还是占在原来的位置,程序还是无法全屏显示,而且鼠标放到任务栏处任务栏也不显示,非常不友好,有哪位老大知道,谢谢啦---------------------------------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function ShowWindow Lib "user32" Alias "ShowWindow" _
  (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Public Const SW_SHOW = 5
Public Const SW_HIDE = 0
Private hwnd5 as Longhwnd5 = FindWindow("Shell_traywnd","")
Call ShowWindow(hwnd5, SW_HIDE) '隐藏任务栏
Call ShowWindow(hwnd5, SW_SHOW) '显示任务栏
---------------------------------------------------------------------

解决方案 »

  1.   

    VB中实现可自动弹出/隐藏的任务栏 
      摘要:WIN95的任务栏具有自动隐藏功能,当用户的鼠标移到屏幕的最下面时,它自动出现,用户将鼠标移走后它自动隐藏,减少了屏幕空间的占用,东方快车等软件也采用了这种功能。这个功能看起来很神秘,其实要实现这个功能并不太复杂,我们完全可以在自己的程序加入这个功能,本文举例说明如何在VB中实现这个功能。
    正文:
      大家对WIN95任务栏的自动隐藏功能都比较熟悉,当用户的鼠标移到屏幕的最下面时,它自动出现,用户将鼠标移走后它自动隐藏,减少了屏幕空间的占用,东方快车等软件也采用了这种功能。这个功能看起来很神秘,其实要实现这个功能并不太复杂,我们完全可以在自己的程序加入这个功能,下面说明如何在VB中实现这个功能。
      实现这个功能的思路如下:用一个窗体作为任务栏,利用WINDOWS的API函数SHAppBarMessage发送消息来控制任务栏,用户可利用此函数将任务栏随意放置在屏幕上下左右四个边的其中一个边上。首先将任务栏移到屏幕的顶端(这里将任务栏放置在屏幕的最顶部,其他边一样)之外,使任务栏的下边界和屏幕的最顶部重合(这样才能到接收鼠标信息),当用户将鼠标移到屏幕最顶部时,利用MouseMove事件获得鼠标移动到任务栏的信息后,将任务栏下移出来,这就是自动弹出,使其
    上边界与屏幕顶部重合。在这里需要一个定时器控件,用它来随时检测鼠标是否已离开任务栏,如果鼠标已离开则将任务栏移走,这就是隐藏。实现这个功能还需要一些API函数,如设定工具栏为矩形的SetRect,获取屏幕设定的GetSystemMetrics,设定窗口位置的SetWindowPos,获得光标位置的GetCursorPos函数等,这些API函数都可以从API帮助文件中直接复制得到。
    下面举例说明实现方法。
      本例设计任务栏的隐藏和出现采用滑动的方法,这也是目前的一些软件常用的技巧,如OFFICE中可以使菜单滑动下拉。在窗体中添加一个定时器 tmrHide,一个命令按钮Command1。添加一新模块用来声明所用的API函数及它们用到类型及常数(这些可从API说明文件中复制):MODULE1.BASOption ExplicitType POINTAPI
    x As Long
    y As Long
    End TypeType 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 
    End Type
    Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage _
    As Long, pData As APPBARDATA) As Long
    Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, _ 
    ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) _ 
    As Long
    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 Long
    Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPublic Const WM_MOUSEMOVE = &H200
    Public Const WM_ACTIVATE = &H6
    Public Const WM_WINDOWPOSCHANGED = &H47Public Const ABE_TOP = 1
    Public Const ABM_ACTIVATE = &H6
    Public Const ABM_NEW = &H0
    Public Const ABM_QUERYPOS = &H2
    Public Const ABM_REMOVE = &H1
    Public Const ABM_SETAUTOHIDEBAR = &H8
    Public Const ABM_SETPOS = &H3
    Public Const ABM_WINDOWPOSCHANGED = &H9
    Public Const ABN_FULLSCREENAPP = &H2
    Public Const ABN_POSCHANGED = &H1
    Public Const ABN_STATECHANGE = &H0
    Public Const ABN_WINDOWARRANGE = &H3Public Const SM_CXSCREEN = 0
    Public Const SM_CYSCREEN = 1Public Const HWND_TOP = 0
    Public Const HWND_TOPMOST = -1Public Const SWP_NOACTIVATE = &H10
    Public Const SWP_SHOWWINDOW = &H40将下面代码放到窗体的声明部分:
    Option ExplicitDim BarData As APPBARDATA
    Dim bAutoHide As Boolean
    Dim bAnimate As Boolean
    '单击任务栏上的命令按钮退出
    '注意这里不要简单地用UNLOAD语句结束程序,必须首先将任务栏移走,否则桌面将不能
    '恢复原状
    Private Sub Command1_Click()
    If BarData.hwnd <> 0 Then SHAppBarMessage ABM_REMOVE, BarData
    Unload Me
    End Sub'窗体的初始化,设置任务栏
    Private Sub Form_Load()
    Dim lResult As Long
    Move 0, 0, Width, Height
    Screen.MousePointer = vbDefault
    bAutoHide = True
    bAnimate = TrueBarData.cbSize = Len(BarData)
    BarData.hwnd = hwnd
    BarData.uCallbackMessage = WM_MOUSEMOVE
    lResult = SHAppBarMessage(ABM_NEW, BarData)
    lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), _
    GetSystemMetrics(SM_CYSCREEN))
    BarData.uEdge = ABE_TOP
    lResult = SHAppBarMessage(ABM_QUERYPOS, BarData)
    If bAutoHide Then
    BarData.rc.Bottom = BarData.rc.Top + 2 
    lResult = SHAppBarMessage(ABM_SETPOS, BarData)
    BarData.lParam = True
    lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData)
    If lResult = 0 Then
    bAutoHide = False
    Else
    lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, _ 
    BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, _ 
    SWP_NOACTIVATE)
    End If
    End If
    If Not bAutoHide Then
    BarData.rc.Bottom = BarData.rc.Top + 42
    lResult = SHAppBarMessage(ABM_SETPOS, BarData)
    lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, _ 
    BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
    End If
    End Sub'窗体的鼠标移动事件
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)Static bRecieved As Boolean
    Dim lResult As Long
    Dim newRC As RECT
    Dim lMessage As Long
    lMessage = x / Screen.TwipsPerPixelX
    If bRecieved = False Then
    bRecieved = True
    Select Case lMessage
    Case WM_ACTIVATE
    lResult = SHAppBarMessage(ABM_ACTIVATE, BarData)
    Case WM_WINDOWPOSCHANGED
    lResult = SHAppBarMessage(ABM_WINDOWPOSCHANGED, BarData)
    Case ABN_STATECHANGE
    lResult = SetRect(BarData.rc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN))
    BarData.uEdge = ABE_TOP
    lResult = SHAppBarMessage(ABM_QUERYPOS, BarData)
    If bAutoHide Then
    BarData.rc.Bottom = BarData.rc.Top + 2
    lResult = SHAppBarMessage(ABM_SETPOS, BarData)
    BarData.lParam = True
    lResult = SHAppBarMessage(ABM_SETAUTOHIDEBAR, BarData)
    If lResult = 0 Then
    bAutoHide = False
    Else
    lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top - 42, BarData.rc.Right - BarData.rc.Left, 44, SWP_NOACTIVATE)
    End If
    End If
    If Not bAutoHide Then
    BarData.rc.Bottom = BarData.rc.Top + 42
    lResult = SHAppBarMessage(ABM_SETPOS, BarData)
    lResult = SetWindowPos(BarData.hwnd, HWND_TOP, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 42, SWP_NOACTIVATE)
    End If
    Case ABN_FULLSCREENAPP
    Beep
    End Select
    bRecieved = False
    End IfDim iCounter As Integer
    '如果顶部位置在屏幕外(负值),说明任务栏还处于隐藏状态,将其拉下来
    If Top < 0 Then
    If bAnimate Then
    For iCounter = -26 To -1
    BarData.rc.Top = iCounter
    lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 24, SWP_NOACTIVATE)
    Next
    End If
    BarData.rc.Top = 0
    lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 24, SWP_SHOWWINDOW)
    tmrHide.Enabled = True
    End If
    End Sub
    '定时器代码
    Private Sub tmrHide_Timer()
    Dim lResult As Long
    Dim lpPoint As POINTAPI
    Dim iCounter As Integer
    '获取当前鼠标位置,如果移出了任务栏外则隐藏任务栏
    lResult = GetCursorPos(lpPoint)
    If lpPoint.x < Left \ Screen.TwipsPerPixelX Or lpPoint.x > (Left + Width) \ Screen.TwipsPerPixelX Or lpPoint.y < Top \ Screen.TwipsPerPixelY Or lpPoint.y - 10 > (Top + Height) \ Screen.TwipsPerPixelY Then
    If bAnimate Then
    For iCounter = -1 To -27 Step -1
    BarData.rc.Top = iCounter
    lResult = SetWindowPos(BarData.hwnd, 0&, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 24, SWP_NOACTIVATE)
    Next
    End If
    BarData.rc.Top = -24
    lResult = SetWindowPos(BarData.hwnd, HWND_TOPMOST, BarData.rc.Left, BarData.rc.Top, BarData.rc.Right - BarData.rc.Left, 26, SWP_NOACTIVATE)
    tmrHide.Enabled = False
    End If
    End Sub本程序在中文WIN95、VB5.0中文专业版下调试通过。
      

  2.   

    Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
      (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function ShowWindow Lib "user32" Alias "ShowWindow" _
      (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongConst SW_HIDE = 0 
    Const SW_SHOWNORMAL = 1 
    Private hwnd5 as Longhwnd5 = FindWindow("Shell_traywnd","")
    Call ShowWindow(hwnd5, SW_HIDE) '隐藏任务栏
    Call ShowWindow(hwnd5, SW_SHOWNORMAL) '显示任务栏改成这样试试
      

  3.   

    Option Explicit
    Public Const SW_HIDE = 0    ' Hide Window
    Public Const SW_SHOW = 5    ' Show Window
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
    Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPublic Sub DisplayTaskBar(ByVal bShow As Boolean)
        Dim lTaskBarHWND As Long
        Dim lRet As Long
        Dim lFlags As Long
        On Error GoTo vbErrorHandler
        lFlags = IIf(bShow, SW_SHOW, SW_HIDE)
        lTaskBarHWND = FindWindow("Shell_TrayWnd", "")
        lRet = ShowWindow(lTaskBarHWND, lFlags)
        If lRet < 0 Then
        End If
        Exit Sub
    vbErrorHandler:
        Exit Sub
    End SubPublic Sub DisplayDeskTopIcons(ByVal bShow As Boolean)
        Dim lDesktopHwnd As Long
        Dim lFlags As Long
        On Error Resume Next
        lDesktopHwnd = FindWindowEx(0&, 0&, "Progman", vbNullString)
        If lDesktopHwnd = 0 Then
            Exit Sub
        End If
        lFlags = IIf(bShow, SW_SHOW, SW_HIDE)
        ShowWindow lDesktopHwnd, lFlags
    End Sub
      

  4.   

    设置你的程序用 SUB MAIN 启动。
    然后在里面执行你的初始化操作。
    需要窗体的时候你写一个 sub main
       load 你的窗体
       你的窗体.hide
    end sub
    当你需要显示的时候执行你的窗体.show另外注意的是:如果你在窗体没有show出来之前,引用了窗体上的某个控件,窗体会自动的show。