ウインドウを指定のサイズで復元          <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