I can use WriteConsoleInput() in console application. But when I try to use writeConsoleInput() in MFC it not type any thing in command window. This’s my code.
DWORD WINAPI test(LPVOID lp)
{
system("edit");
return 0;
}
void CVirusScanDlg::OnBnClickedFormat()
{
HANDLE hConIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwTmp;
INPUT_RECORD ir[5];
CreateThread(NULL, 0, test,(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 = 'u';
ir[0].Event.KeyEvent.wRepeatCount = 1;
ir[0].Event.KeyEvent.wVirtualKeyCode = 'U';
ir[0].Event.KeyEvent.wVirtualScanCode = MapVirtualKey('U', 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 = 'c';
ir[1].Event.KeyEvent.wRepeatCount = 1;
ir[1].Event.KeyEvent.wVirtualKeyCode = 'C';
ir[1].Event.KeyEvent.wVirtualScanCode = MapVirtualKey('C', MAPVK_VK_TO_VSC);
ir[2].EventType = KEY_EVENT;
ir[2].Event.KeyEvent.bKeyDown = TRUE;
ir[2].Event.KeyEvent.dwControlKeyState = 0;
ir[2].Event.KeyEvent.uChar.UnicodeChar = 'i';
ir[2].Event.KeyEvent.wRepeatCount = 1;
ir[2].Event.KeyEvent.wVirtualKeyCode = 'I';
ir[2].Event.KeyEvent.wVirtualScanCode = MapVirtualKey('I', MAPVK_VK_TO_VSC);
ir[3].EventType = KEY_EVENT;
ir[3].Event.KeyEvent.bKeyDown = TRUE;
ir[3].Event.KeyEvent.dwControlKeyState = 0;
ir[3].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[3].Event.KeyEvent.wRepeatCount = 1;
ir[3].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[3].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
ir[4].EventType = KEY_EVENT;
ir[4].Event.KeyEvent.bKeyDown = FALSE;
ir[4].Event.KeyEvent.dwControlKeyState = 0;
ir[4].Event.KeyEvent.uChar.UnicodeChar = VK_RETURN;
ir[4].Event.KeyEvent.wRepeatCount = 1;
ir[4].Event.KeyEvent.wVirtualKeyCode = VK_RETURN;
ir[4].Event.KeyEvent.wVirtualScanCode = MapVirtualKey(VK_RETURN, MAPVK_VK_TO_VSC);
dwTmp = 0;
WriteConsoleInput(hConIn, ir, 5, &dwTmp);
//FlushConsoleInputBuffer(hConIn);
//WriteConsole(hConIn, "uci\n", 5, &dwTmp, NULL);
//printf(" dwTmp = %d ", dwTmp);
Sleep(1000);
//return 0;
}
when I run this code it not type anything in command window. How to use WriteConsoleInput() in MFC ?
The problem isn’t MFC per se. The problem is that a GUI app doesn’t have console I/O … unless you explicitly do a ConsoleAlloc() etc.
Here are some good links:
http://dslweb.nwnexus.com/~ast/dload/guicon.htm
http://bobobobo.wordpress.com/2009/03/01/how-to-attach-a-console-to-your-gui-app-in-c/
http://msdn.microsoft.com/en-us/library/ms682528.aspx