コマンドラインから文字列を読みたい。コマンドラインで実行するプログラムを開き、そのプログラムプロセスを待つ必要があります。ですから、いつ処理が成功するかわかりません。コマンドから文字列を読み取れないと、次のコマンドを入力できません。これは、コマンドでプログラム unhidden.bat を実行し、プロセスに Y を送信するための私のコードです。
DWORD WINAPI unhidden(LPVOID lp)
{
//ShellExecute(NULL, L"open", L"C:/unhidden.exe", NULL, NULL, SW_SHOWNORMAL);
system("C:/unhidden.bat");
return 0;
}
int run_unhidden(){
AllocConsole() ;
AttachConsole( GetCurrentProcessId() ) ;
freopen( "CON", "w", stdout ) ;
HANDLE hConIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwTmp;
INPUT_RECORD ir[5];
CreateThread(NULL, 0, unhidden,(LPDWORD)0, 0, &dwTmp);
Sleep( 1000 );
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.dwControlKeyState = 0;
ir[0].Event.KeyEvent.uChar.UnicodeChar = 'y';
ir[0].Event.KeyEvent.wRepeatCount = 1;
ir[0].Event.KeyEvent.wVirtualKeyCode = 'Y';
ir[0].Event.KeyEvent.wVirtualScanCode = MapVirtualKey('Y', MAPVK_VK_TO_VSC);
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = TRUE;
ir[1].Event.KeyEvent.dwControlKeyState = 0;
ir[1].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[1].Event.KeyEvent.wRepeatCount = 1;
ir[1].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[1].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
ir[2].EventType = KEY_EVENT;
ir[2].Event.KeyEvent.bKeyDown = FALSE;
ir[2].Event.KeyEvent.dwControlKeyState = 0;
ir[2].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[2].Event.KeyEvent.wRepeatCount = 1;
ir[2].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[2].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
dwTmp = 0;
WriteConsoleInput(hConIn, ir, 2, &dwTmp);
wprintf(GetCommandLine());
Sleep( 1000 );
ir[0].EventType = KEY_EVENT;
ir[0].Event.KeyEvent.bKeyDown = TRUE;
ir[0].Event.KeyEvent.dwControlKeyState = 0;
ir[0].Event.KeyEvent.uChar.UnicodeChar = 'y';
ir[0].Event.KeyEvent.wRepeatCount = 1;
ir[0].Event.KeyEvent.wVirtualKeyCode = 'Y';
ir[0].Event.KeyEvent.wVirtualScanCode = MapVirtualKey('Y', MAPVK_VK_TO_VSC);
ir[1].EventType = KEY_EVENT;
ir[1].Event.KeyEvent.bKeyDown = TRUE;
ir[1].Event.KeyEvent.dwControlKeyState = 0;
ir[1].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[1].Event.KeyEvent.wRepeatCount = 1;
ir[1].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[1].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
ir[2].EventType = KEY_EVENT;
ir[2].Event.KeyEvent.bKeyDown = FALSE;
ir[2].Event.KeyEvent.dwControlKeyState = 0;
ir[2].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[2].Event.KeyEvent.wRepeatCount = 1;
ir[2].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[2].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
dwTmp = 0;
WriteConsoleInput(hConIn, ir, 3, &dwTmp);
wprintf(GetCommandLine());
Sleep( 1000 );
コンソールにこのように表示されます
Do you want to process now (Y/N)?y "C:\Users\PKRU\documents\visual studio 2010\Projects\Virus Scan\Debug\Virus Scan .exe" You chose: y
Please wait . . .
"C:\Users\PKRU\documents\visual studio 2010\Projects\Virus Scan\Debug\Virus Scan .exe" Could Not Find N:\*.lnk
N:\autorun.ini\*, Are you sure (Y/N)?
ラインの読み方
N:\autorun.ini* よろしいですか (Y/N)?
次のキーをコンソールに送信するためのMFCを使用します。この行がいつ表示されるかわからない場合は、プログラムに Y または N を送信できません。