小弟我想让单击一个按钮就获得程序窗口下面的窗口句柄。(切换至本程序前窗口的句柄)

我想让单击一个按钮就获得程序窗口下面的窗口句柄。(切换至本程序前窗口的句柄)
用GetNextWindow不行。不知道怎样实现?

------解决方案--------------------
都是顶层窗口吗,是的话,就用EnumWindow来枚举,枚举出来的顺序就是z-order的顺序

------解决方案--------------------
或者用getwindow
------解决方案--------------------
添加一个模块添加下面代码

Option Explicit

Private Declare Function CallWindowProc Lib "user32 " Alias "CallWindowProcA " (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function RegisterWindowMessage Lib "user32 " Alias "RegisterWindowMessageA " (ByVal lpString As String) As Long

Private Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32 " Alias "GetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function RegisterShellHook Lib "Shell32 " Alias "#181 " (ByVal hwnd As Long, ByVal nAction As Long) As Long

Private Declare Function RegisterShellHookWindow Lib "user32 " (ByVal hwnd As Long) As Long

Private Const HSHELL_WINDOWCREATED = 1
Private Const HSHELL_WINDOWDESTROYED = 2
Private Const HSHELL_ACTIVATESHELLWINDOW = 3
Private Const HSHELL_WINDOWACTIVATED = 4
Private Const HSHELL_GETMINRECT = 5
Private Const HSHELL_REDRAW = 6
Private Const HSHELL_TASKMAN = 7
Private Const HSHELL_LANGUAGE = 8

Private Const GWL_WNDPROC = -4

Private Const WH_SHELL = 10

Private Const RSH_DEREGISTER = 0
Private Const RSH_REGISTER = 1
Private Const RSH_REGISTER_PROGMAN = 2
Private Const RSH_REGISTER_TASKMAN = 3
Private Declare Function GetWindowText Lib "user32 " Alias "GetWindowTextA " (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetActiveWindow Lib "user32 " () As Long

Private lpPrevWndProc As Long
Private msgShellHook As Long
Public lngNowActiveHwnd As Long

Public Sub Unhook(hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndProc
End Sub

Public Sub StartHook(hwnd As Long)
msgShellHook = RegisterWindowMessage( "SHELLHOOK ")
'RegisterShellHookWindow hWnd
Call RegisterShellHook(hwnd, RSH_REGISTER Or RSH_REGISTER_TASKMAN Or RSH_REGISTER_PROGMAN)
lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Private Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim strTmp As String * 260
Select Case uMsg
Case msgShellHook
Select Case wParam
Case HSHELL_WINDOWACTIVATED
If lParam <> frmMain.hwnd Then
lngNowActiveHwnd = lParam
Debug.Print lngNowActiveHwnd
Else
GetWindowText lngNowActiveHwnd, strTmp, 260
frmMain.textMessage.Text = Left(strTmp, InStr(strTmp, Chr(0)) - 1)
End If
End Select
End Select
WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End Function

然后再添加个窗体命名为frmMain窗体上拖一个TEXTBOX命名为textMessage添加下面代码
Option Explicit

Private Sub Form_Load()
lngNowActiveHwnd = GetActiveWindow