ウインドウを指定のサイズで復元 <TOP>
ウインドウを指定のサイズで復元します。
GetWindowPlacement ウィンドウの位置・状態を取得
SetWindowPlacement ウィンドウの位置・サイズ・状態を設定
FindWindow 指定したクラス名とウィンドウ名を持つトップレベルウィンドウのハンドルを返す
例では、メモ帳を起動し指定のサイズで復元しています。
'================================================================ '= ウインドウを指定のサイズで復元 '= (SetWindowPlacement.bas) '================================================================ #include "Windows.bi" Type POINTAPI x As Long y As Long End Type Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Type WINDOWPLACEMENT length As Long flags As Long showCmd As Long ptMinPosition As POINTAPI ptMaxPosition As POINTAPI rcNormalPosition As RECT End Type ' ウィンドウの位置・状態を取得 Declare Function Api_GetWindowPlacement& Lib "user32" Alias "GetWindowPlacement" (ByVal hWnd&, lpwndpl As WINDOWPLACEMENT) ' ウィンドウの位置・サイズ・状態を設定 Declare Function Api_SetWindowPlacement& Lib "user32" Alias "SetWindowPlacement" (ByVal hWnd&, lpwndpl As WINDOWPLACEMENT) ' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ(親を持たないウィンドウ)のハンドルを返す。この関数は子ウィンドウは探さない。検索では大文字小文字は区別されない。 Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) #define WPF_RESTORETOMAXIMIZED 2 'アイコン化される前に最大表示されていたかどうかにかかわらず、元に戻されるウィンド #define SW_RESTORE 9 'ウィンドウをアクティブ化し表示。ウィンドウがアイコン化または最大化されているときは元の位置とサイズに #define SW_SHOWNORMAL 1 'SW_RESTOREと同じ #define SW_SHOWMINIMIZED 2 'ウインドウをアクティブ化しアイコン化 #define SW_SHOWMAXIMIZED 3 'ウインドウをアクティブ化し最大表示 Var Shared Radio(2) As Object Var Shared Button1 As Object Var Shared Button2 As Object For i = 0 To 2 Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) Radio(i).SetFontSize 14 Next Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 '================================================================ '= '================================================================ Declare Function frmSize bdecl () As Integer Function frmSize() frmSize = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() 'コマンドボタンを無効に設定 Button1.EnableWindow 0 'メモ帳を起動 shell "Notepad.exe",, 5 End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var ClassName As String Var hWnd As Long Var wp As WINDOWPLACEMENT Var Ret As Long 'クラス名でウィンドウハンドルを取得 ClassName = "Notepad" hWnd = Api_FindWindow(ClassName, ByVal 0) 'ウィンドウハンドルを取得できたときは If hWnd <> 0 Then 'ウィンドウの配置方法に関する情報を定義する構造体のサイズを設定 wp.length = Len(wp) 'ウィンドウの配置方法を取得 Ret = Api_GetWindowPlacement(hWnd, wp) '復元されるウィンドウの最大化を指定 wp.flags = WPF_RESTORETOMAXIMIZED Select Case frmSize Case 1 wp.showCmd = SW_SHOWNORMAL Case 2 wp.showCmd = SW_SHOWMINIMIZED Case 3 wp.showCmd = SW_SHOWMAXIMIZED End Select 'ウィンドウの配置方法を設定 Ret = Api_SetWindowPlacement(hWnd, wp) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End