Option Strict Off Option Explicit On Friend Class Form1 Inherits System.Windows.Forms.Form 'クラス名、キャプションから子ウィンドウのハンドルを取得 Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, ByVal lpClassName As String, ByVal lpWindowName As String) As Integer '引数 ' hwndParent:子ウィンドウを見つけるときの親ウィンドウのハンドル ' (デスクトップを親ウィンドウとするとき0) ' hwndChildAfter:検索を開始する子ウィンドウのハンドル ' 0 を設定したとき、hwndParentの最初の子ウィンドウから検索する ' lpszClass:クラス名 ' lpszWindow:ウィンドウのキャプション(タイトル) ' '戻り値 ' 正常終了のとき ウィンドウのハンドル、エラーのとき 0 ' 'FindWindow()関数との違いは子ウィンドウか検索できること。 'hwndParentとhwndChildAfterが共に0のときトップレベルウィンドウが検索対象。 ' ウィンドウにメッセージを送る関数の宣言 Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Private Const WM_IME_CHAR As Short = &H286S '文字コード送信 Private Const WM_SETTEXT As Short = &HCS '文字列送信 Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click Dim lnghWnd As Integer 'トップレベル(親)のウィンドウハンドル Dim lnghWndTarget As Integer 'ターゲット(子)のウィンドウハンドル Dim lngRc As Integer 'APIの返却値 '------------------------------------- ' メモ帳を起動 '------------------------------------- lngRc = Shell(Environ("WINDIR") & "\NOTEPAD.EXE", AppWinStyle.NormalFocus) '起動 System.Threading.Thread.Sleep(100) '0.1秒待つ(起動完了) '------------------------------------- ' ターゲットウィンドウのハンドルを取得 '------------------------------------- lnghWnd = FindWindowEx(0, 0, "Notepad", "無題 - メモ帳") '「メモ帳」のウィンドウハンドル lnghWndTarget = FindWindowEx(lnghWnd, 0, "Edit", "") '子ウィンドウのEdit '------------------------------------- ' 送信 '------------------------------------- Dim strDt As String '------------------------------------- ' 1文字ずつ送信 50ミリ(0.05)秒間隔 '------------------------------------- Dim lngDt As Integer Dim i As Integer For i = 1 To Len(Text1.Text) '文字数分繰り返す strDt = Mid(Text1.Text, i, 1) '1文字 lngDt = Asc(strDt) 'ASCIIコードに変換 lngRc = SendMessage(lnghWndTarget, WM_IME_CHAR, lngDt, 0) '1文字送信 System.Threading.Thread.Sleep(50) '指定ミリ秒待つ Next i ' '------------------------------- ' ' 全ての文字を一度に送信する場合は ' ' 下記のようにする。 ' '------------------------------- ' lngRc = SendMessage(lnghWndTarget, WM_SETTEXT, 0, Text1.Text) End Sub Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load Text1.Text = "SendMessage を使った「メモ帳」への入力" & vbCrLf & "1文字0.1秒" & vbCrLf & vbCrLf & "寿限無、寿限無" & vbCrLf & "五劫の擦り切れ" & vbCrLf & "海砂利水魚の" & vbCrLf & "水行末 雲来末 風来末" & vbCrLf & "食う寝る処に住む処" & vbCrLf & "やぶら小路の藪柑子" & vbCrLf & "パイポパイポ パイポのシューリンガン" & vbCrLf & "シューリンガンのグーリンダイ" & vbCrLf & "グーリンダイのポンポコピーのポンポコナーの" & vbCrLf & "長久命の長助" End Sub Private Sub Form1_FormClosing(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Dim Cancel As Boolean = eventArgs.Cancel Dim UnloadMode As System.Windows.Forms.CloseReason = eventArgs.CloseReason End eventArgs.Cancel = Cancel End Sub End Class