HOME > 即効テクニック > AccessVBA > Access設定 > 起動したアプリケーションの表示位置、サイズを指定する

即効テクニック

Access設定

起動したアプリケーションの表示位置、サイズを指定する

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

設定項目  内容
hwnd    ウィンドウハンドルを指定[省略不可]
lpwndpl   ウィンドウの情報を取得するWINDOWSPLACEMENTユーザー定義型変数
      を指定[省略不可]

宣言文  Declare Function SetWindowPlacement Lib "user32" (ByVal hwnd 
        As Long, lpwndpl As WINDOWPLACEMENT) As Long

設定項目  内容
hwnd     ウィンドウハンドルを指定[省略不可]
lpwndpl   設定するウィンドウの情報を持ったWINDOWSPLACEMENTユーザー定義
      型変数を指定[省略不可]


GetWindowPlacement関数では、引数で指定したウィンドウハンドルを持つウィンドウの情報を引数として返します。

戻り値は「0」以外の値で、失敗時には「0」を返します。

SetWindowPlacement関数は、引数で指定したウィンドウハンドルを持つウィンドウに引数で指定したWINDOWSPLACEMENTユーザー定義型変数に格納されている情報を設定します。

戻り値は「0」以外の値で、失敗時には「0」を返します。

WINDOWSPLACEMENTユーザー定義型は、次のように宣言します。


Private Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type


このメンバの中の「rcNormalPosition」で、表示する位置、サイズを設定できます。「rcNormalPosition」の型であるRECTユーザー定義型は次のように宣言します。


Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type


で左位置を、で上位置を、で右位置を、で下位置を指定します。
次のコードは、起動したメモ帳の位置を左から10ピクセル、上から10ピクセルの位置に、幅600ピクセル、高さ400ピクセルで表示するサンプルです。

● サンプル ●
Private Declare Function GetForegroundWindow _
    Lib "user32" () As Long
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Type WINDOWPLACEMENT
    Length As Long
    flags As Long
    showCmd As Long
    ptMinPosition As POINTAPI
    ptMaxPosition As POINTAPI
    rcNormalPosition As RECT
End Type
Private Declare Function GetWindowPlacement _
    Lib "user32" _
    (ByVal hwnd As Long _
    , lpwndpl As WINDOWPLACEMENT) As Long
Private Declare Function SetWindowPlacement _
    Lib "user32" _
    (ByVal hwnd As Long _
    , lpwndpl As WINDOWPLACEMENT) As Long

'起動したアプリケーションの表示位置、サイズを指定する
Sub Sample()
    Dim myHwnd As Long
    Dim myWindowPlacement As WINDOWPLACEMENT
    'メモ帳を起動してアクティブにする
    AppActivate Shell("notepad", vbNormalFocus)
    'ウィンドウハンドルの取得
    myHwnd = GetForegroundWindow()
    'ウィンドウ情報の取得
    GetWindowPlacement myHwnd, myWindowPlacement
    'ウィンドウ情報を変更して設定
    With myWindowPlacement.rcNormalPosition
        .Left = 10
        .Top = 10
        .Right = 610
        .Bottom = 410
    End With
    SetWindowPlacement myHwnd, myWindowPlacement
End Sub

● 補足 ●
戻り値を必要としない場合には、Subプロシージャとして宣言してもかまいません。

Declare Sub GetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl 
As WINDOWPLACEMENT)

Declare Sub SetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl 
As WINDOWPLACEMENT)