自フォーム前後のウィンドウハンドルを取得          <TOP>


例では、自フォームの前後のZオーダーを持つウィンドウハンドルを取得します。

GetWindow ウィンドウハンドルを取得

GetWindowText ウィンドウのタイトル文字列を取得

 

 

'================================================================
'= 自フォーム前後のウィンドウハンドルを取得

'=    (GetNextWindow.bas)
'================================================================
#include "Windows.bi"

' 指定されたウィンドウと指定された関係にあるウィンドウのハンドルを取得
Declare Function Api_GetWindow& Lib "user32" Alias "GetWindow" (ByVal hWnd&, ByVal wCmd&)

' ウィンドウのタイトル文字列を取得
Declare Function Api_GetWindowText& Lib "user32" Alias "GetWindowTextA" (ByVal hWnd&, ByVal lpString$, ByVal cch&)

' 方向を示す定数の宣言
#define GW_CHILD 5                      '基準となるウィンドウの子ウィンドウのうちトップレベルのウィンドウを検索
#define GW_HWNDFIRST 0                  '最前面のウィンドウを検索
#define GW_HWNDLAST 1                   '最背面のウィンドウを検索
#define GW_HWNDNEXT 2                   '基準となるウィンドウの次のウィンドウを検索
#define GW_HWNDPREV 3                   '基準となるウィンドウの前のウィンドウを検索
#define GW_OWNER 4                      '基準となるウィンドウのオーナーウィンドウを検索

Var Shared hBase As Long

Var Shared Text(3) As Object
Var Shared Button(1) As Object

For i = 0 To 3
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
    If i < 2 Then
        Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1)))
        Button(i).SetFontSize 14
    End If
Next

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    hBase = GethWnd

    Text(2).SetWindowText "&&H" & Hex$(whPrev)
    Text(3).SetWindowText GetWindowText
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var whPrev As Long
    Var Buffer As String * 516
    Var Ret As Long
   
    '手前のウィンドウのハンドルを取得
    whPrev = Api_GetWindow(hBase, GW_HWNDPREV)

    'ウィンドウハンドルを取得できたときは
    If whPrev <> 0 Then

        'ウィンドウハンドルを表示
        Text(2).SetWindowText "&&H" & Hex$(whPrev)

        'タイトルバーテキストをバッファへ取得
        Ret = Api_GetWindowText(whPrev, Buffer, Len(Buffer))

        'タイトルバーテキストを表示
        Text(3).SetWindowText Buffer

        '取得したハンドルを基準のハンドルに設定
        hBase = whPrev
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var whNext As Long
    Var Buffer As String * 516
    Var Ret As Long

    '背面のウィンドウのハンドルを取得
    whNext = Api_GetWindow(hBase, GW_HWNDNEXT)

    'ウィンドウハンドルを取得できたときは
    If whNext <> 0 Then

        'ウィンドウハンドルを表示
        Text(2).SetWindowText "&&H" & Hex$(whPrev)

        'タイトルバーテキストをバッファへ取得
        Ret = Api_GetWindowText(whNext, Buffer, Len(Buffer))

        'タイトルバーテキストを表示
        Text(3).SetWindowText Buffer

        '取得したハンドルを基準のハンドルに設定
        hBase = whNext
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End