□技術メモ - VB6 プロセスにSendKeysする ※管理人の個人的な技術メモです。このページの内容を実行した結果について 管理人はいかなる責任も負いかねますのでご自身の責任でお試しください。 ----------------------------------------------------------- □以下では、プロセスに対するsendkeyに関連する事項について記載する。 関連技術は記載してあるので、これらを組み合わせれば、 動画録画ツールなどをタイマーで操作できるようになる。 ○SendKeysについて ・SendKeysはアクティブなwindowにキーを送る。 ・SendKeys(文字)とすれば送れるが、非表示文字の場合は {ENTER} {BACKSPACE} のように指定する。 -------- ○起動しているプロセスのPIDを取得する ○ローカル上のすべてのプロセスを取得する ※以下はVB.netの場合のコードである。VB6の場合はこれに該当するコードが必要。 同じことをVB6で実行するのが難しい場合は、Shell関数でプロセスを起動する方法が容易だと思われる。 Dim localProcAll As Process() = Process.GetProcesses() Dim p As Process For Each p In localProcAll Console.WriteLine("{0} : {1} : {2}", p.Id, p.ProcessName, p.MainWindowTitle) ''PID, プロセス名, windowsタイトルを表示する Next -------- ○Shell関数でプロセスを起動する ・プロセスを起動すると、戻り値としてPIDを取得できる。 Dim pid As Long pid = Shell("notepad.exe", vbNormalFocus) -------- ○対象のプロセスをアクティブにする ・SendKeysはアクティブなWindowにキーを送ることに注意。 Call AppActivate(pid) -------- ○タイマーの設定 ・インターバルの設定 Timer1.Interval = 1000 ・タイマーの開始 Timer1.Enabled = True -------- 〇画面設計の例 ・動画録画ツールで1時間の動画を15分単位で録画する場合を考える。 ・配置するコントロールとその説明は以下の通り。 txtExePath ・録画ツールのフルパスを指定する。 ・Enterキーで起動して、PIDを取得する。 btnRec ・指定のPIDをアクティブにする。 ・録画開始ボタンにSendKeyを送る。 btnStop ・指定のPIDをアクティブにする。 ・録画停止ボタンにSendKeyを送る。 btnTimerStart ・指定のPIDをアクティブにする。 ・録画開始ボタンにSendKeyを送る。 ・タイマーを開始する。 イベントリストの例 ・タイマーのインターバル=60000(millsec) と指定すると、1分で一回カウントする。 ・btnTimerStartでタイマーをスタートする。 ・カウンタが指定の値になったら指定のイベントを実行する。 ・以下は、60分の動画を15分単位で録画する場合の例。書式は以下の通り。  イベント発生時間(分) : イベント1, イベント2 ... ''0000:btnRec ''タイマー起動時に録画開始するのでこの行は不要 0015:btnStop,btnRec ''録画停止、録画再開 0030:btnStop,btnRec ''録画停止、録画再開 0045:btnStop,btnRec ''録画停止、録画再開 0060:btnStop ''録画停止 0061:end ''タイマー停止、もしくはアプリケーション終了 ※注意:btnStop,btnRecのsendkeyを連続で送って、 正常に動作するかどうかは、録画ツールの仕様や性能によるので動作確認が必要。 正常に動作しないようなら、btnStop,btnRec の間にわずかにウェイトを 持たせる必要がある。For Loop などで適当に持たせれば問題ないと思う。