外部アプリケーションの位置・サイズを変更          <TOP>


FindWindow クラス名またはキャプションを与えてウィンドウのハンドルを取得
MoveWindow 指定されたウィンドウの位置およびサイズを変更
ShellExecute 拡張子に関連付けられたプログラムを実行
SendMessage ウィンドウにメッセージを送信
 

メモ帳を起動し、その位置およびサイズを指定します。

 

'================================================================
'= 外部アプリケーションの位置・サイズを変更
'=    (MoveWindow.bas)
'================================================================
#include "Windows.bi"

' クラス名またはキャプションを与えてウィンドウのハンドルを取得
Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

' 指定されたウィンドウの位置およびサイズを変更
Declare Function Api_MoveWindow& Lib "user32" Alias "MoveWindow" (ByVal hWnd&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal bRepaint&)

' 拡張子に関連付けられたプログラムを実行
Declare Function Api_ShellExecute& Lib "shell32" Alias "ShellExecuteA" (ByVal hWnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&)

' ウィンドウにメッセージを送信。この関数は、指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返さない
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam&)

#define SW_SHOWNORMAL 1                 '起動時に通常のウィンドウとして表示
#define WM_CLOSE &H10                   'ウィンドウ或いはアプリケーションをクローズされた

Var Shared Edit(3) As Object
Var Shared Text(1) As Object
Var Shared Button(1) As Object

For i = 0 To 3
    If i < 2 Then
        Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14
        Button(i).Attach GetDlgItem("Button" & Trim$(Str$(i + 1))) : Button(i).SetFontSize 14
    End If
    Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14
Next i

Var Shared hWnd As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    ShowWindow -1
    Cls
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    'コマンドボタンを無効に設定
    Button(0).EnableWindow 0

    'メモ帳を起動
    Ret = Api_ShellExecute(GethWnd, ByVal 0, "notepad.exe", ByVal 0, ByVal 0, SW_SHOWNORMAL)

End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var ClassName As String
    Var mem(3) As Long
    Var Ret As Long

    'クラス名でウィンドウハンドルを取得
    ClassName = "Notepad"
    hWnd = Api_FindWindow(ClassName, ByVal 0)

    For i = 0 To 3
       mem(i) = Val(Edit(i).GetWindowText)
    Next

    'ウィンドウハンドルを取得できたとき
    If hWnd <> 0 Then
        'ウィンドウの位置と寸法を設定
        Ret = Api_MoveWindow(hWnd, mem(0), mem(1), mem(2), mem(3), True)
    End If
End Sub

'================================================================
'= 
'================================================================
Declare Sub MainForm_QueryClose edecl (Cancel%, ByVal Mode%)
Sub MainForm_QueryClose(Cancel%, ByVal Mode%)
    Var Ret As Long

    If Cancel% = 0 Then
        Ret = Api_SendMessage(hWnd, WM_CLOSE, 0, 0)
        End
    End If
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End