我已经实现了隐藏窗口的功能,部分代码如下Private Sub cmdhide_Click()
SetWindowPos(swhwnd, HWND_TOP, 0, 0, 800, 600, SWP_HIDEWINDOW Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER) 
End Sub
现在有个问题,因为程序功能,我用了一个第三方的DLL那个DLL只能给我提供GetTopWindowProcess()函数
而且我能从这个GetTopWindowProcess()得到最前端的程序的进程句柄但是
swhwnd = GetTopWindowProcess()
SetWindowPos(swhwnd, HWND_TOP, 0, 0, 800, 600, SWP_HIDEWINDOW Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER) 
却不行,原因也很简单,因为原来的swhwnd是拿 FindWindow找到的窗口句柄。而GetTopWindowProcess()传给swhwnd是前台程序的进程句柄~我现在想实现隐藏前台程序,比如一共有两个程序,当第一个被我隐藏了,第二个就变成前台。我如何去隐藏第二个?除了这个GetTopWindowProcess()怎么动态获得前台的窗口句柄?谢谢各位了!

解决方案 »

  1.   

    //除了这个GetTopWindowProcess()怎么动态获得前台的窗口句柄?GetForegroundWindow:
    【VB声明】
      Private Declare Function GetForegroundWindow Lib "user32" Alias "GetForegroundWindow" () As Long【说明】
      获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口 【返回值】
      Long,前台窗口的句柄 【备注】
      windows nt支持多个桌面,它们相互间是独立的。每个桌面都有自己的前台窗口
      

  2.   

    谢谢rainstormmaster(暴风雨 v2.0)发现这个GetForegroundWindow竟然没有FindWindow那样允许制定类和窗体名,
    这样一下子前台的全部被隐藏了,只能恢复前一个被隐藏的窗口,如果连续隐藏多个,如两次。那么上上个被隐藏的,就没有办法显示了:(有没有解决方案呢?
      

  3.   

    //////如两次。那么上上个被隐藏的,就没有办法显示了////
    不可以用变量记下曾经用过的swhwnd吗?另:隐藏窗口用这个就可以【函数】
    ShowWindow【操作系统】
    Win9X:Yes
    WinNT:Yes【声明】
    ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long【说明】  控制窗口的可见性(在vb里使用:针对vb窗体及控件,请使用对应的vb属性) 【返回值】  Long,如窗口之前是可见的,则返回TRUE(非零),否则返回FALSE(零) 【其它】
    【参数表】
      hwnd -----------  Long,窗口句柄,要向这个窗口应用由nCmdShow指定的命令  nCmdShow -------  Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数
      SW_HIDE
      隐藏窗口,活动状态给令一个窗口
      SW_MINIMIZE
      最小化窗口,活动状态给令一个窗口
      SW_RESTORE
      用原来的大小和位置显示一个窗口,同时令其进入活动状态
      SW_SHOW
      用当前的大小和位置显示一个窗口,同时令其进入活动状态
      SW_SHOWMAXIMIZED
      最大化窗口,并将其激活
      SW_SHOWMINIMIZED
      最小化窗口,并将其激活
      SW_SHOWMINNOACTIVE
      最小化一个窗口,同时不改变活动窗口
      SW_SHOWNA
      用当前的大小和位置显示一个窗口,不改变活动窗口
      SW_SHOWNOACTIVATE
      用最近的大小和位置显示一个窗口,同时不改变活动窗口
      SW_SHOWNORMAL
      与SW_RESTORE相同