即効テクニック |
●概要● 宣言文 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)