メモ帳を開いてhogeと入力する

---------------------------------------------------

Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, lParam As Any) As LongPtr

Public Const WM_SETTEXT = &HC

Private Declare PtrSafe Function FindWindow Lib "user32" _

Alias "FindWindowA" _

(ByVal lpClassName As String, _

ByVal lpWindowName As String) As LongPtr

Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _

(ByVal hwndParent As LongPtr, ByVal hwndChildAfter As LongPtr, _

ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr


Sub hogeInput()

'メモ帳を起動して、hogeと入力する。

Dim hwndParent As Long '親のウィンドウハンドル

Dim hwndChild As Long '子のウィンドウハンドル

Dim lngRc As Long  'APIの戻り値

Dim taskID As Double

taskID = Shell("notepad.exe", vbNormalFocus)

Application.Wait [Now() + TimeValue("00:00:00.1")]

hwndParent = FindWindow("notepad", vbNullString)

hwndChild = FindWindowEx(hwndParent, 0, "Edit", "") '子ウィンドウのEdit

lngRc = SendMessage(hwndChild, WM_SETTEXT, 0, ByVal "hoge")

End Sub 

---------------------------------------------------

・windows10(64bit)用コードです。32bitの場合は、declareのところの「PtrSafe」が不要であり、かつ、LongPtrはPtrをとってLongとします。

・Shell関数

Shell(pathname[,windowstyle])

pathname:原則、フルパスを指定する。例外として、PATHが通っているフォルダのアプリ(メモ帳など)は、アプリ名のみでOK。

windowstyle:ウィンドウの最大化・最小化などを指定できる。省略可能。

戻り値:アプリのタスクID。

・SendMessageの戻り値を受け取るために「lngRc =」としています。これがないとエラーがでました。

・SendMessageの第4引数に「ByVal」をつけないと文字化けします。

 

Cafe maeko

マクロ関係の備忘録です。