HOME > 即効テクニック > AccessVBA > コントロール > 基準となるウィンドウの次のウィンドウのウィンドウハンドルを取得する

即効テクニック

コントロール

基準となるウィンドウの次のウィンドウのウィンドウハンドルを取得する

(Access 2000/2002/2003)
●概要●
宣言文 Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal 
    wCmd As Long) As Long

設定項目    内容
hwnd      基準となるウィンドウハンドルを指定[省略不可]
wCmd      検索方法を示すフラグとなる定数を指定[省略不可]

引数で指定したウィンドウハンドルを持つウィンドウを基準にして、引数で指定した方法でウィンドウを検索し、ウィンドウハンドルを返します。失敗時には「0」を返します。
引数には次の定数を指定します。

・検索方法を示すフラグに指定する定数
定数            値      検索方法
GW_HWNDFIRST    0       最前面のウィンドウを検索する
GW_HWNDLAST     1       最背面のウィンドウを検索する
GW_HWNDNEXT     2       基準となるウィンドウの次のウィンドウを検索する
GW_HWNDPREV     3       基準となるウィンドウの前のウィンドウを検索する
GW_OWNER        4       基準となるウィンドウのオーナーウィンドウを検索する
GW_CHILD        5       基準となるウィンドウの子ウィンドウのうちトップレベル
                        のウィンドウを検索する

次のコードは、Accessアプリケーションのウィンドウの次のウィンドウのウィンドウハンドルをメッセージダイアログで表示するサンプルです。

●サンプル●
Private Declare Function GetWindow _
    Lib "user32" _
    (ByVal hwnd As Long, ByVal wCmd As Long) _
    As Long
Private Const GW_HWNDNEXT As Long = 2

Sub Sample()
    Dim myHwnd As Long
    'Accessアプリケーションのウィンドウハンドルの取得
    myHwnd = Application.hWndAccessApp
    '次のウィンドウのウィンドウハンドルを取得して表示
    myHwnd = GetWindow(myHwnd, GW_HWNDNEXT)
    MsgBox myHwnd
End Sub

●補足1●
APIビューアを使った場合、FindNextWindow関数の宣言が

Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd 
As Long, ByVal wFlag As Long) As Long

となっていることがわかります。GetNextWindow関数を使っても、実際に動作しているのはGetWindow関数なのです。

●補足2●
検索の基準となるウィンドウが子ウィンドウの場合には、検索対象は子ウィンドウとなります。
また、最前面のウィンドウをウィンドウハンドルを取得する場合には、FindWindow関数を使って、

変数 = FindWindow(vbNullString, vbNullString)

として取得することもできます。