メモ帳を起動してキー操作を送信するコードの例
//メモ帳を起動してC:\test.txtを開く
STARTUPINFO si = {};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {};
CreateProcess(NULL, L"notepad.exe C:\\test.txt", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
//メモ帳が入力を待ち状態になるまで待機
WaitForInputIdle(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
//デスクトップウィンドウのハンドルを取得
HWND hwnd = GetDesktopWindow();
//メモ帳のウィンドウハンドルを取得
hwnd = FindWindowEx(hwnd, NULL, L"Notepad", NULL);
//メモ帳をアクティブにする
SetForegroundWindow(hwnd);
//キー操作を送信する
keybd_event(VK_DOWN, 0, 0, 0); //↓キー押す
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0); //↓キー離す
keybd_event(VK_DOWN, 0, 0, 0); //↓キー押す
keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0); //↓キー離す
メモ帳をアクティブにしたくない場合
//メモ帳を起動してC:\test.txtを開く
STARTUPINFO si = {};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {};
CreateProcess(NULL, L"notepad.exe C:\\test.txt", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
//メモ帳が入力を待ち状態になるまで待機
WaitForInputIdle(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
//デスクトップウィンドウのハンドルを取得
HWND hwnd = GetDesktopWindow();
//メモ帳のウィンドウハンドルを取得
hwnd = FindWindowEx(hwnd, NULL, L"Notepad", NULL);
//メモ帳のEditのハンドルを取得
hwnd = FindWindowEx(hwnd, NULL, L"Edit", NULL);
//キー操作を送信する
PostMessage(hwnd, WM_KEYDOWN, VK_DOWN, 0); //↓キー
PostMessage(hwnd, WM_KEYDOWN, VK_DOWN, 0); //↓キー
追記 keybd_event APIの使用例
/**
* キーストロークを合成する
* @param Key 入力するキーの仮想キーコード
* @param Shift Alt、Ctrl、Shift キー、マウス ボタン、またはタッチ デバイスの状態
* @param SpecialKey trueのときはスキャンコードにプリフィックスバイト 0xE0(224)を追加する
*/
void PostKey(Word Key, const TShiftState Shift, bool SpecialKey)
{
if (Shift.Contains(ssCtrl)) { keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); }
if (Shift.Contains(ssShift)) { keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0); }
if (Shift.Contains(ssAlt)) { keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); }
DWORD flag = SpecialKey ? KEYEVENTF_EXTENDEDKEY : 0;
keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
flag = flag | KEYEVENTF_KEYUP;
keybd_event(Key, MapVirtualKey(Key, 0), flag, 0);
if (Shift.Contains(ssAlt)) { keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); }
if (Shift.Contains(ssShift)) { keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0); }
if (Shift.Contains(ssCtrl)) { keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0); }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//PrintScreenキーで全画面をキャプチャする
PostKey(VK_SNAPSHOT, TShiftState(), false);
//ALTキーとPrintScreenキーでフォーカスのあるウィンドウをキャプチャする
PostKey(VK_SNAPSHOT, TShiftState() << ssAlt, false);
//ALTキーとF4キーでアプリケーションを終了する
PostKey(VK_F4, TShiftState() << ssAlt, false);
}