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

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

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

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

[解决办法]

VB code
Option ExplicitDim lngHandleA As LongDim lngHandleB As LongDim lngHandleC As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Declare Function GetForegroundWindow Lib "user32" () As LongPrivate 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 = 1000End SubPrivate 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 IfEnd 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去掉。除此以外,我还没有好的办法。

热点排行