HOME > 即効テクニック > AccessVBA > Windows環境・オブジェクト > 指定したウィンドウの位置、サイズを取得する

即効テクニック

Windows環境・オブジェクト

指定したウィンドウの位置、サイズを取得する

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

設定項目        内容
hwnd            ウィンドウハンドルを指定[省略不可]
lpRect          ウィンドウの位置、サイズ情報を取得するRECTユーザー定義型変数
                を指定[省略不可]

GetWindowPlacement関数を使って、ウィンドウの位置、サイズ情報を取得することもできますが、GetWindowRect関数で、より簡単に取得することができます。
GetWindowRect関数では、引数で指定したウィンドウハンドルを持つウィンドウの位置、サイズ情報を引数として返します。
戻り値は「0」以外の値で、失敗時には「0」を返します。
次のコードは、Excelの表示位置およびサイズを取得して、メッセージダイアログで表示するサンプルです。

●サンプル●
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Declare Function FindWindow _
    Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String _
    , ByVal lpWindowName As String) As Long
Private Declare Function GetWindowRect _
    Lib "user32" _
    (ByVal hwnd As Long _
    , lpRect As RECT) As Long

'指定したウィンドウの位置、サイズを取得する
Sub Sample()
    Dim myHwnd As Long
    Dim myRect As RECT
    Dim myTop As Long, myLeft As Long
    Dim myHeight As Long, myWidth As Long
    'Excelのウインドウハンドルを取得
    myHwnd = FindWindow("XLMAIN", vbNullString)
    'Excelが起動していない場合はメッセージを表示して終了
    If myHwnd = ERROR_SUCCESS Then
        MsgBox "Excelは起動していません。", vbInformation
        Exit Sub
    End If
    '位置、サイズ情報の取得
    GetWindowRect myHwnd, myRect
    With myRect
        myTop = .Top
        myLeft = .Left
        myHeight = .Bottom - .Top
        myWidth = .Right - .Left
    End With
    '結果の表示
    MsgBox "縦位置:" & vbTab & myTop & vbCrLf _
        & "横位置:" & vbTab & myLeft & vbCrLf _
        & "高さ:" & vbTab & myHeight & vbCrLf _
        & "幅:" & vbTab & myWidth
End Sub

●補足●
サンプルは、Excelを起動してから実行してください。Excelを起動していないときは、メッセージダイアログに「Excelは起動していません。」と表示されます。