首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么获取桌面下第二置顶的窗口句柄

2013-01-02 
如何获取桌面上第二置顶的窗口句柄?假设我有3个窗口,(A,B,C分别是三个不同程序的窗口),现在我想判断这三个

如何获取桌面上第二置顶的窗口句柄?
假设我有3个窗口,(A,B,C分别是三个不同程序的窗口),现在我想判断这三个窗口谁是最顶端,谁是其次,谁是最后,该如何操作呢,请发代码,谢谢!
[解决办法]


Option Explicit
Dim lngHandleA As Long
Dim lngHandleB As Long
Dim lngHandleC As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private 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
Private Declare Function GetForegroundWindow Lib "user32" () As Long


Private Sub Form_Load()
    Form2.Show
    Form3.Show
    Form4.Show
    Form2.Caption = "A"
    Form3.Caption = "B"
    Form4.Caption = "C"
    lngHandleA = FindWindow(vbNullString, "A")      '窗体A句柄
    lngHandleB = FindWindow(vbNullString, "B")      '窗体B句柄
    lngHandleC = FindWindow(vbNullString, "C")      '窗体C句柄
    Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
    Dim lngP As Long
    lngP = GetForegroundWindow
    If lngP = lngHandleA Then
        Debug.Print "窗体A置顶"
    ElseIf lngP = lngHandleB Then
        Debug.Print "窗体B置顶"
    ElseIf lngP = lngHandleC Then
        Debug.Print "窗体C置顶"
    Else
        Debug.Print "三个窗体都没有置顶"
    End If
End Sub


[解决办法]
发送个消息让当前置顶的窗体最小化,然后置顶的窗体就是原来的第二窗体……
[解决办法]
其实你变通一下,定义两个变量,一个用于存储当前置顶的窗体句柄,另外一个用于存储前一个置顶的窗体句柄。当你那三个窗体生成显示时,修改这两个变量即可。
比如,你的窗体生成顺序是:A,B,C,当前置顶窗体的句柄是:lngNow,前一次置顶的窗体的句柄是:lngPre。分别写它们的Load如下:

private sub A_Load()
    lngPre=lngNow
    lngNow=A.hwnd
end sub
private sub B_Load()
    lngPre=lngNow
    lngNow=B.hwnd
end sub

private sub C_Load()
    lngPre=lngNow
    lngNow=C.hwnd
end sub

当修改了置顶的窗体后,就修改
lngPre=LngNow
lngNow=置顶窗体的句柄即可。
[解决办法]
那就在Timer中Find这三个窗口的句柄,把Load去掉。除此以外,我还没有好的办法。

热点排行