●概要●
宣言文 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)