这篇教程C++ FlushConsoleInputBuffer函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中FlushConsoleInputBuffer函数的典型用法代码示例。如果您正苦于以下问题:C++ FlushConsoleInputBuffer函数的具体用法?C++ FlushConsoleInputBuffer怎么用?C++ FlushConsoleInputBuffer使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了FlushConsoleInputBuffer函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: noecho_fgetsstatic int noecho_fgets(char *buf, int size, FILE *tty){ int i; char *p; p=buf; for (;;) { if (size == 0) { *p='/0'; break; } size--;#ifdef WIN16TTY i=_inchar();#elif defined(_WIN32) i=_getch();#else i=getch();#endif if (i == '/r') i='/n'; *(p++)=i; if (i == '/n') { *p='/0'; break; } }#ifdef WIN_CONSOLE_BUG /* Win95 has several evil console bugs: one of these is that the * last character read using getch() is passed to the next read: this is * usually a CR so this can be trouble. No STDIO fix seems to work but * flushing the console appears to do the trick. */ { HANDLE inh; inh = GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(inh); }#endif return(strlen(buf));}
开发者ID:srinivenkat,项目名称:Parallel_Open_SSL,代码行数:43,
示例2: wait_for_console_key/* Read console events until there is a key event. Also returns on any error. */static void wait_for_console_key(void){ HANDLE hConsoleInput = GetStdHandle(STD_INPUT_HANDLE); if (!ELEM(hConsoleInput, NULL, INVALID_HANDLE_VALUE) && FlushConsoleInputBuffer(hConsoleInput)) { for (;;) { INPUT_RECORD buffer; DWORD ignored; if (!ReadConsoleInput(hConsoleInput, &buffer, 1, &ignored)) { break; } if (buffer.EventType == KEY_EVENT) { break; } } }}
开发者ID:Walid-Shouman,项目名称:Blender,代码行数:20,
示例3: whilevoid BaseApp::Run(){ CStopwatch timer; int sum = 0; int counter = 0; int deltaTime = 0; while (1) { timer.Start(); if (kbhit()) { KeyPressed (getch()); if (!FlushConsoleInputBuffer(mConsoleIn)) cout<<"FlushConsoleInputBuffer failed with error "<<GetLastError(); } UpdateF((float)deltaTime / 1000.0f); Render(); Sleep(1); while (1) { deltaTime = timer.Now(); if (deltaTime > 20) break; } sum += deltaTime; counter++; if (sum >= 1000) { TCHAR szbuff[255]; StringCchPrintf(szbuff, 255, TEXT("FPS: %d"), counter); SetConsoleTitle(szbuff); counter = 0; sum = 0; } }}
开发者ID:ShartepStudy,项目名称:LUXOFT,代码行数:41,
示例4: sprintfvoid CMap::CheckForNpc(int x, int y){ // Go through all of the npcs and see if we have a match for the position for(int i = 0; i < (int)m_vNpcs.size(); i++) { CNpc *pNpc= &m_vNpcs[i]; // Check if this npc has the same position as the position passed in if(x == pNpc->GetIndex().X && y == pNpc->GetIndex().Y) { // Move the player back so they aren't on the NPC g_Player.MovePlayerBack();//////////// *** NEW *** ////////// *** NEW *** ///////////// *** NEW *** //////////////////// // Since we have cut scenes and eventual shop keepers, we first check // to see if there is any action key assigned with the npc before we // let them speak. If they do, we want to use that dialog and not // the standard dialog that they would spit out. Like Jax's case. if(pNpc->GetActionKey()) { // Handle the action key and return g_ActionKeys.HandleKey(pNpc->GetActionKey(), pNpc); return; }//////////// *** NEW *** ////////// *** NEW *** ///////////// *** NEW *** //////////////////// // Display the NPC message, pause, then clear the input buffer and wait for a key char szDialog[5000] = {0}; sprintf(szDialog, "%s: %s", pNpc->GetName(), pNpc->GetMessage()); DisplayDialog(szDialog); Sleep(1000); FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); getch(); break; } }}
开发者ID:88er,项目名称:tutorials,代码行数:41,
示例5: CON_Init/*==================CON_Init==================*/void CON_Init( void ){ CONSOLE_SCREEN_BUFFER_INFO info; char consoleTitle[128]; int i; // handle Ctrl-C or other console termination SetConsoleCtrlHandler( CON_CtrlHandler, TRUE ); qconsole_hin = GetStdHandle( STD_INPUT_HANDLE ); if( qconsole_hin == INVALID_HANDLE_VALUE ) return; qconsole_hout = GetStdHandle( STD_OUTPUT_HANDLE ); if( qconsole_hout == INVALID_HANDLE_VALUE ) return; GetConsoleMode( qconsole_hin, &qconsole_orig_mode ); // allow mouse wheel scrolling SetConsoleMode( qconsole_hin, qconsole_orig_mode & ~ENABLE_MOUSE_INPUT ); FlushConsoleInputBuffer( qconsole_hin ); GetConsoleScreenBufferInfo( qconsole_hout, &info ); qconsole_attrib = info.wAttributes; qconsole_backgroundAttrib = qconsole_attrib & (BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_INTENSITY); // ZTM: FIXME: com_productName isn't initialized or set to game title yet. Com_sprintf( consoleTitle, sizeof (consoleTitle), "%s Dedicated Server Console", com_productName ? com_productName->string : PRODUCT_NAME ); SetConsoleTitle( consoleTitle ); // initialize history for( i = 0; i < QCONSOLE_HISTORY; i++ ) qconsole_history[ i ][ 0 ] = '/0'; // set text color to white SetConsoleTextAttribute( qconsole_hout, CON_ColorCharToAttrib( COLOR_WHITE ) );}
开发者ID:mecwerks,项目名称:spearmint,代码行数:45,
示例6: input_waitingbool input_waiting(){#ifndef WIN32 fd_set readfds; struct timeval tv; FD_ZERO(&readfds); FD_SET(fileno(stdin), &readfds); tv.tv_sec = 0; tv.tv_usec = 0; select(16, &readfds, nullptr, nullptr, &tv); return (FD_ISSET(fileno(stdin), &readfds));#else static int init = 0, pipe; static HANDLE inh; DWORD dw; if(!init) { init = 1; inh = GetStdHandle(STD_INPUT_HANDLE); pipe = !GetConsoleMode(inh, &dw); if(!pipe) { SetConsoleMode(inh, dw & ~(ENABLE_MOUSE_INPUT|ENABLE_WINDOW_INPUT)); FlushConsoleInputBuffer(inh); } } if(pipe) { if(!PeekNamedPipe(inh, NULL, 0, NULL, &dw, NULL)) return 1; return dw; } else { GetNumberOfConsoleInputEvents(inh, &dw); return dw <= 1 ? 0 : dw; }#endif // WIN32}
开发者ID:ServerTech,项目名称:cortex,代码行数:40,
示例7: CON_Init/*==================CON_Init==================*/void CON_Init( void ){ CONSOLE_CURSOR_INFO curs; CONSOLE_SCREEN_BUFFER_INFO info; int i; // handle Ctrl-C or other console termination SetConsoleCtrlHandler( CON_CtrlHandler, TRUE ); qconsole_hin = GetStdHandle( STD_INPUT_HANDLE ); if( qconsole_hin == INVALID_HANDLE_VALUE ) return; qconsole_hout = GetStdHandle( STD_OUTPUT_HANDLE ); if( qconsole_hout == INVALID_HANDLE_VALUE ) return; GetConsoleMode( qconsole_hin, &qconsole_orig_mode ); // allow mouse wheel scrolling SetConsoleMode( qconsole_hin, qconsole_orig_mode & ~ENABLE_MOUSE_INPUT ); FlushConsoleInputBuffer( qconsole_hin ); GetConsoleScreenBufferInfo( qconsole_hout, &info ); qconsole_attrib = info.wAttributes; SetConsoleTitle("ioquake3 Dedicated Server Console"); // make cursor invisible GetConsoleCursorInfo( qconsole_hout, &qconsole_orig_cursorinfo ); curs.dwSize = 1; curs.bVisible = FALSE; SetConsoleCursorInfo( qconsole_hout, &curs ); // initialize history for( i = 0; i < QCONSOLE_HISTORY; i++ ) qconsole_history[ i ][ 0 ] = '/0';}
开发者ID:AbandonedCart,项目名称:XperiaPlayNative,代码行数:45,
示例8: getKeyint getKey(){ int key; DWORD cNumRead; INPUT_RECORD irInBuf; HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE); do { FlushConsoleInputBuffer(hStdIn); do { ReadConsoleInput(hStdIn, &irInBuf, 1, &cNumRead); } while (irInBuf.EventType != KEY_EVENT || irInBuf.Event.KeyEvent.bKeyDown); if (irInBuf.Event.KeyEvent.uChar.AsciiChar == 0) { key = irInBuf.Event.KeyEvent.wVirtualKeyCode; } else key = irInBuf.Event.KeyEvent.uChar.AsciiChar; } while (key != ESCAPE && key != LEFT && key != UP && key != RIGHT && key != DOWN && key != ENTER); return key;}
开发者ID:vigonz06,项目名称:Correo,代码行数:22,
示例9: GetStdInputHandlevoid FileTests::TestReadFileLine(){ HANDLE const hIn = GetStdInputHandle(); VERIFY_IS_NOT_NULL(hIn, L"Verify we have the standard input handle."); DWORD dwMode = ENABLE_LINE_INPUT; VERIFY_WIN32_BOOL_SUCCEEDED(SetConsoleMode(hIn, dwMode), L"Set input mode for test."); VERIFY_WIN32_BOOL_SUCCEEDED(FlushConsoleInputBuffer(hIn), L"Flush input buffer in preparation for test."); char ch = '/0'; Log::Comment(L"Queue background blocking read file operation."); auto BackgroundRead = std::async([&] { DWORD dwRead = 0; VERIFY_WIN32_BOOL_SUCCEEDED(ReadFile(hIn, &ch, 1, &dwRead, nullptr), L"Read file was successful."); VERIFY_ARE_EQUAL(1u, dwRead, L"Verify we read 1 character."); }); char const chExpected = 'a'; Log::Comment(L"Send a key into the console."); SendFullKeyStrokeHelper(hIn, chExpected); auto status = BackgroundRead.wait_for(std::chrono::milliseconds(250)); VERIFY_ARE_EQUAL(std::future_status::timeout, status, L"We should still be waiting for a result."); VERIFY_ARE_EQUAL('/0', ch, L"Character shouldn't be filled by background read yet."); Log::Comment(L"Send a line feed character, we should stay blocked."); SendFullKeyStrokeHelper(hIn, '/n'); status = BackgroundRead.wait_for(std::chrono::milliseconds(250)); VERIFY_ARE_EQUAL(std::future_status::timeout, status, L"We should still be waiting for a result."); VERIFY_ARE_EQUAL('/0', ch, L"Character shouldn't be filled by background read yet."); Log::Comment(L"Now send a carriage return into the console to signify the end of the input line."); SendFullKeyStrokeHelper(hIn, '/r'); Log::Comment(L"Wait for background thread to unblock."); BackgroundRead.wait(); VERIFY_ARE_EQUAL(chExpected, ch);}
开发者ID:ShipRekt101,项目名称:terminal,代码行数:39,
示例10: initializeWorldvoid initializeWorld(){ hConsole = GetStdHandle(STD_OUTPUT_HANDLE); FlushConsoleInputBuffer(hConsole); drawTable(); rotatingBar(WIDTH/2, HEIGHT/2, 0); gotoxy(0,0); SetConsoleTextAttribute(hConsole, colors[0]); printf("O"); SetConsoleTextAttribute(hConsole, colors[1]); gotoxy(WIDTH,0); printf("O"); SetConsoleTextAttribute(hConsole, colors[2]); gotoxy(WIDTH,HEIGHT); printf("O"); SetConsoleTextAttribute(hConsole, colors[3]); gotoxy(0,HEIGHT); printf("O"); }
开发者ID:felipeViana,项目名称:Tron,代码行数:22,
示例11: __declspecvoid __declspec(noreturn) exit(){// EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE, MF_ENABLED); exitflag = 1; if (savesndtype) savesnddialog(); if (videosaver_state) main_savevideo(); // stop saving video if (!normal_exit) done_fdd(false); done_tape(); done_dx(); done_gs(); done_leds(); save_nv(); zf232.rs_close(); zf232.zf_close(); done_ie_help(); done_bpx(); GdiplusShutdown();// timeEndPeriod(1); if (ay[1].Chip2203) YM2203Shutdown(ay[1].Chip2203); //Dexus if (ay[0].Chip2203) YM2203Shutdown(ay[0].Chip2203); //Dexus if (comp.ts.vdac2) vdac2::close_ft8xx(); color(); printf("/nsee you later!/n"); if (!nowait) { SetConsoleTitle("press a key..."); FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); getch(); } fflush(stdout); SetConsoleCtrlHandler(ConsoleHandler, FALSE); exit(0);}
开发者ID:tslabs,项目名称:zx-evo,代码行数:39,
示例12: tty_getcharint tty_getchar(){ HANDLE stdinHandle = GetStdHandle (STD_INPUT_HANDLE); DWORD rc = WaitForSingleObject (stdinHandle, 1000); if (rc == WAIT_TIMEOUT) return 0; if (rc == WAIT_ABANDONED) return -1; if (rc == WAIT_FAILED) return -1; // The whole ReadConsoleInput () part is a workaround. // For some unknown reason, maybe a mingw bug, a random signal // is sent to stdin which unblocks WaitForSingleObject () and sets rc 0. // Then it wants to read with getche () a keyboard input // which has never been made. INPUT_RECORD buf[100]; DWORD num = 0; memset (buf, 0, sizeof (buf)); ReadConsoleInput (stdinHandle, buf, 100, &num); FlushConsoleInputBuffer (stdinHandle); for (DWORD i = 0; i < num; i++) { if (buf[i].EventType != KEY_EVENT) continue; KEY_EVENT_RECORD KeyEvent = buf[i].Event.KeyEvent; if (KeyEvent.bKeyDown != TRUE) continue; return KeyEvent.uChar.AsciiChar; } return 0;}
开发者ID:ghostyguo,项目名称:hashcat,代码行数:39,
示例13: r_cons_readcharR_API int r_cons_readchar() { char buf[2]; buf[0] = -1;#if __WINDOWS__ && !__CYGWIN__ && !MINGW32 BOOL ret; DWORD out; DWORD mode; char b; HANDLE h = GetStdHandle (STD_INPUT_HANDLE); GetConsoleMode (h, &mode); SetConsoleMode (h, 0); // RAWignore: if (!I->is_wine) { while (!_kbhit ()); b = getwinkey (); if (b=='2') goto ignore; else if (b=='1') ret = ReadConsole (h, buf, 1, &out, NULL); else { buf[0]=b; ret=1; } } else { ret = ReadConsole (h, buf, 1, &out, NULL); } FlushConsoleInputBuffer(h); if (!ret) return -1; SetConsoleMode (h, mode);#else r_cons_set_raw (1); if (read (0, buf, 1)==-1) return -1; r_cons_set_raw (0);#endif return r_cons_controlz (buf[0]);}
开发者ID:jasmorton,项目名称:radare2,代码行数:38,
示例14: FlushConsoleInputBufferbool KConsoleDriver::readKeyExtended(char *out,bool *pressing,int *repeatCount){#ifdef USE_M_API INPUT_RECORD inrec; dword count; FlushConsoleInputBuffer( hStdIn ); ReadConsoleInput( hStdIn, &inrec, 1, &count ); if (count > 0) { if (inrec.EventType == KEY_EVENT) { *out = inrec.Event.KeyEvent.uChar.AsciiChar; *pressing = inrec.Event.KeyEvent.bKeyDown != 0; *repeatCount = (int)inrec.Event.KeyEvent.wRepeatCount; return true; } }#endif *out = 0; return false;}
开发者ID:LeDYoM,项目名称:kaste,代码行数:23,
示例15: GetStdHandlevoid CConsole::initconsole(){ conin = GetStdHandle(STD_INPUT_HANDLE); conout = GetStdHandle(STD_OUTPUT_HANDLE); ZeroMemory(&ovc,sizeof(ovc)); ovc.hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); if(ovc.hEvent == INVALID_HANDLE_VALUE) { throw errors("CreateEvent error"); } SetConsoleMode(conin,ENABLE_MOUSE_INPUT); GetConsoleScreenBufferInfo(conout,&csb); if (csb.dwSize.X<80||csb.dwSize.Y<25){ CloseHandle(ovc.hEvent); throw errors("console size is too small"); } FlushConsoleInputBuffer(conin); head=tail=0; cci.bVisible=0;cci.dwSize=10; SetConsoleCursorInfo(conout,&cci); SetConsoleTitle(jmail);}
开发者ID:inspirer,项目名称:history,代码行数:23,
示例16: open_consolevoid open_console(){ BYTE Title[200]; BYTE ClassName[200]; LPTSTR lpClassName=ClassName; HANDLE hConWnd; FILE *hf; static BYTE consolecreated=FALSE; static int hCrt=0; if(consolecreated==TRUE) { GetConsoleTitle(Title,sizeof(Title)); hConWnd=FindWindow(NULL,Title); GetClassName(hConWnd,lpClassName,120); ShowWindow(hConWnd,SW_SHOW); SetForegroundWindow(hConWnd); hConWnd=GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(hConWnd); return; } AllocConsole(); hCrt=_open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT); fflush(stdin); hf=_fdopen(hCrt,"w"); *stdout=*hf; setvbuf(stdout,NULL,_IONBF,0); GetConsoleTitle(Title,sizeof(Title)); hConWnd=FindWindow(NULL,Title); GetClassName(hConWnd,lpClassName,120); ShowWindow(hConWnd,SW_SHOW); SetForegroundWindow(hConWnd); consolecreated=TRUE;}
开发者ID:pinchyCZN,项目名称:BMView,代码行数:37,
示例17: FlushConsoleInputBuffervoid EventHandle::PollInput() // Grabs input from 'GetAsyncKeyState()'{ int i = 0; FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); if (GetAsyncKeyState(VK_LEFT) & 0x8000) { m_vKeys.push_back(VK_LEFT); ++i; } if (GetAsyncKeyState(VK_RIGHT) & 0x8000) { m_vKeys.push_back(VK_RIGHT); ++i; } if (GetAsyncKeyState(VK_UP) & 0x8000) { m_vKeys.push_back(VK_UP); ++i; } if (GetAsyncKeyState(VK_DOWN) & 0x8000) { m_vKeys.push_back(VK_DOWN); ++i; } if (GetAsyncKeyState('W') & 0x8000) { m_vKeys.push_back(0x57); ++i; } // W Key if (GetAsyncKeyState('A') & 0x8000) { m_vKeys.push_back(0x41); ++i; } // A Key if (GetAsyncKeyState('S') & 0x8000) { m_vKeys.push_back(0x53); ++i; } // S Key if (GetAsyncKeyState('D') & 0x8000) { m_vKeys.push_back(0x44); ++i; } // D Key if (GetAsyncKeyState('P') & 0x8000) { m_vKeys.push_back(0x50); ++i; } // P Key if (GetAsyncKeyState('G') & 0x8000) { m_vKeys.push_back(0x47); ++i; } // G Key if (GetAsyncKeyState('X') & 0x8000) { m_vKeys.push_back(0x58); ++i; } // X Key if (GetAsyncKeyState('F') & 0x8000) { m_vKeys.push_back(0x46); ++i; } // F Key if (GetAsyncKeyState(VK_RETURN) & 0x8000) { m_vKeys.push_back(VK_RETURN); ++i; } if (GetAsyncKeyState(VK_PRIOR) & 0x8000) { m_vKeys.push_back(VK_PRIOR); ++i; } if (GetAsyncKeyState(VK_NEXT) & 0x8000) { m_vKeys.push_back(VK_NEXT); ++i; } if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) { m_vKeys.push_back(VK_ESCAPE); ++i; } OrderInput(); ParseInput(); if (!i) { m_vPrevKeys.clear(); m_vUntilPressed.clear(); m_vUntilRepeat.clear(); }}
开发者ID:bennybroseph,项目名称:Assesments,代码行数:37,
示例18: InputAvailableint InputAvailable(void) {#if defined(_WIN32) || defined(_WIN64) static int init = 0, pipe; static HANDLE inh; DWORD dw; if (!init) { init = 1; inh = GetStdHandle(STD_INPUT_HANDLE); pipe = !GetConsoleMode(inh, &dw); if (!pipe) { SetConsoleMode(inh, dw & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT)); FlushConsoleInputBuffer(inh); } } if (pipe) { if (!PeekNamedPipe(inh, NULL, 0, NULL, &dw, NULL)) return 1; return dw > 0; } else { GetNumberOfConsoleInputEvents(inh, &dw); return dw > 1; }#else fd_set readfds; struct timeval tv; FD_ZERO(&readfds); FD_SET(STDIN_FILENO, &readfds); tv.tv_sec = 0; tv.tv_usec = 0; select(STDIN_FILENO + 1, &readfds, NULL, NULL, &tv); return FD_ISSET(STDIN_FILENO, &readfds);#endif}
开发者ID:raimarHD,项目名称:lcec,代码行数:36,
示例19: additemvoid additem(){ fclose(fsal); int b; FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); sal1.id=0; sal1.price=0; sal1.quan=0; int id; gtc(45,13);printf("Input Item ID: ");scanf("%d",&id); fi1=fopen("mainInv.data","rb+"); while(fread(&inv1,sizeof(inv1),1,fi1)==1) { if (cID(id)==0) { gtc(45,14);printf("Item Matched! /(%s)",inv1.pName); gtc(45,15);printf("Input Quantity: ");scanf("%d",&sal1.quan); for(int a=0;a<=6;a++) { sal1.name[a]=inv1.pName[a]; } srand(time(NULL)); b=rand()%100+1; sal1.id=inv1.itemID+b; sal1.totalquan+=sal1.quan; sal1.price=inv1.price*sal1.quan; sal1.total+=sal1.price; fsal=fopen("tempsales.data","ab+"); fseek(fsal,0,SEEK_END); fwrite(&sal1,sizeof(sal1),1,fsal); fclose(fsal); gtc(45,16);printf("Added %d of %s",sal1.quan,inv1.pName); getch(); sales();exit(0); } else {
开发者ID:jrvmbust,项目名称:ite-001,代码行数:36,
示例20: consoleFlushInputBOOLconsoleFlushInput ( void )/*++Routine Description: Flushes input events.Arguments: None.Return Value: TRUE if success, FALSE otherwise--*/{ EventBuffer.NumberOfEvents = 0; return FlushConsoleInputBuffer( hInput );}
开发者ID:mingpen,项目名称:OpenNT,代码行数:24,
示例21: input_availablebool input_available(){#if defined(_WIN32) || defined(_WIN64) static bool init = false, is_pipe; static HANDLE stdin_h; DWORD val, error; // val = 0; // needed to make the compiler happy? // have a look at the "local" buffer first, *this time before init (no idea if it helps)* if( UseDebug && !init ) printf("info string init=%d stdin->_cnt=%d/n", int(init), stdin->_cnt); if( stdin->_cnt > 0 ) return true; // input init (only done once) if( !init ) { init = true; stdin_h = GetStdHandle(STD_INPUT_HANDLE); if( UseDebug && (stdin_h == NULL || stdin_h == INVALID_HANDLE_VALUE) ) { error = GetLastError(); printf("info string GetStdHandle() failed, error=%d/n", error); } is_pipe = !GetConsoleMode(stdin_h, &val); if( UseDebug ) printf("info string init=%d is_pipe=%d/n", int(init), int(is_pipe)); if( UseDebug && is_pipe ) { // GetConsoleMode() failed, everybody assumes pipe then error = GetLastError(); printf("info string GetConsoleMode() failed, error=%d/n", error); } if( !is_pipe ) { SetConsoleMode(stdin_h, val & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT)); FlushConsoleInputBuffer(stdin_h); // no idea if we can lose data doing this } } // different polling depending on input type // does this code work at all for pipes? if( is_pipe ) { if( !PeekNamedPipe(stdin_h, NULL, 0, NULL, &val, NULL) ) { if( UseDebug ) { // PeekNamedPipe() failed, everybody assumes EOF then error = GetLastError(); printf("info string PeekNamedPipe() failed, error=%d/n", error); } return true; } if( UseDebug && val < 0 ) printf("info string PeekNamedPipe(): val=%d/n", val); return val > 0; // != 0??? } else { GetNumberOfConsoleInputEvents(stdin_h, &val); return val > 1; // no idea why 1 } return false;#else // assume POSIX int val; fd_set set[1]; struct timeval time_val[1]; FD_ZERO(set); FD_SET(STDIN_FILENO, set); time_val->tv_sec = 0; time_val->tv_usec = 0; val = select(STDIN_FILENO + 1, set, NULL, NULL, time_val); if( val == -1 && errno != EINTR ) { my_fatal("input_available(): select(): %s/n", strerror(errno)); }//.........这里部分代码省略.........
开发者ID:grefen,项目名称:CGChess,代码行数:101,
示例22: win_ctrl_zvoid win_ctrl_z(HANDLE ctrlz){ int i; int *p; DWORD rc; DWORD size; INPUT_RECORD input[EVENTSIZE]; rc = WaitForSingleObject(ctrlz, 0); if (rc == WAIT_FAILED) { fprintf(stderr, "WaitForSingleObject failed: %d/n", GetLastError()); } else if (rc == WAIT_OBJECT_0) { if (!ReadConsoleInput(ctrlz, input, EVENTSIZE, &size)) { fprintf(stderr, "ReadConsoleInput failed: %d/n", GetLastError()); } else { for (i = 0; i < size; ++i) { if (input[i].EventType == KEY_EVENT) { if (input[i].Event.KeyEvent.bKeyDown && (input[i].Event.KeyEvent.uChar.AsciiChar == 0x1A || input[i].Event.KeyEvent.uChar.AsciiChar == 0x01)) { switch (ctrlzbind) { case BIND_DPORT: p = &dst_port; break; case BIND_TTL: p = &src_ttl; break; default: printf("[winctrl_z]: error binding port or ttl, disabling ctrl-a " "and ctrl-z/n"); ctrlzbind = BIND_NONE; return; } if (input[i].Event.KeyEvent.uChar.AsciiChar == 0x01) { if (*p > 0) (*p)--; } else (*p)++; printf("/b/b/b/b/b/b/b/b/b"); printf("%d: ", *p); fflush(stdout); break; } } } } } FlushConsoleInputBuffer(ctrlz); ResetEvent(ctrlz);}
开发者ID:as2120,项目名称:ZAchieve,代码行数:65,
示例23: DoMain//.........这里部分代码省略......... /* create window */ char caption[100]; mysnprintf(caption, countof(caption), "" GAMESIG " %s " X64 " (%s)", GetVersionString(), GetGitTime()); Window = CreateWindowEx( WS_EX_APPWINDOW, (LPCTSTR)WinClassName, (LPCTSTR)caption, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN, x, y, width, height, (HWND) NULL, (HMENU) NULL, hInstance, NULL); if (!Window) I_FatalError ("Could not open window"); if (kernel != NULL) { typedef BOOL (WINAPI *pts)(DWORD, DWORD *); pts pidsid = (pts)GetProcAddress (kernel, "ProcessIdToSessionId"); if (pidsid != 0) { if (!pidsid (GetCurrentProcessId(), &SessionID)) { SessionID = 0; } hwtsapi32 = LoadLibraryA ("wtsapi32.dll"); if (hwtsapi32 != 0) { FARPROC reg = GetProcAddress (hwtsapi32, "WTSRegisterSessionNotification"); if (reg == 0 || !((BOOL(WINAPI *)(HWND, DWORD))reg) (Window, NOTIFY_FOR_THIS_SESSION)) { FreeLibrary (hwtsapi32); hwtsapi32 = 0; } else { atterm (UnWTS); } } } } GetClientRect (Window, &cRect); WinWidth = cRect.right; WinHeight = cRect.bottom; CoInitialize (NULL); atterm (UnCOM); C_InitConsole (((WinWidth / 8) + 2) * 8, (WinHeight / 12) * 8, false); I_DetectOS (); D_DoomMain (); } catch (class CNoRunExit &) { I_ShutdownGraphics(); if (!batchrun) { if (FancyStdOut && !AttachedStdOut) { // Outputting to a new console window: Wait for a keypress before quitting. DWORD bytes; HANDLE stdinput = GetStdHandle(STD_INPUT_HANDLE); ShowWindow(Window, SW_HIDE); WriteFile(StdOut, "Press any key to exit...", 24, &bytes, NULL); FlushConsoleInputBuffer(stdinput); SetConsoleMode(stdinput, 0); ReadConsole(stdinput, &bytes, 1, &bytes, NULL); } else if (StdOut == NULL) { ShowErrorPane(NULL); } } exit(0); } catch (class CDoomError &error) { I_ShutdownGraphics (); RestoreConView (); I_FlushBufferedConsoleStuff(); if (error.GetMessage ()) { if (!batchrun) { ShowErrorPane(error.GetMessage()); } else { Printf("%s/n", error.GetMessage()); } } exit (-1); }}
开发者ID:floverdevel,项目名称:zdoom,代码行数:101,
示例24: ConInFlushVOID ConInFlush (VOID){ FlushConsoleInputBuffer (GetStdHandle (STD_INPUT_HANDLE));}
开发者ID:farp90,项目名称:nativecmd,代码行数:4,
示例25: ReadConsoleInput/*==================CON_ConsoleInput==================*/char *CON_ConsoleInput (void){ INPUT_RECORD buff[MAXCMDLINE]; DWORD count = 0, events = 0; WORD key = 0; int i; int newlinepos = -1; if (!GetNumberOfConsoleInputEvents(qconsole_hin, &events)) return NULL; if (events < 1) return NULL; // if we have overflowed, start dropping oldest input events if (events >= MAXCMDLINE) { ReadConsoleInput(qconsole_hin, buff, 1, &events); return NULL; } if (!ReadConsoleInput(qconsole_hin, buff, events, &count)) return NULL; FlushConsoleInputBuffer(qconsole_hin); for (i = 0; i < count; i++) { if (buff[i].EventType != KEY_EVENT) continue; if (!buff[i].Event.KeyEvent.bKeyDown) continue; key = buff[i].Event.KeyEvent.wVirtualKeyCode; if (key == VK_RETURN) { newlinepos = i; break; } else if (key == VK_UP) { CON_HistPrev(); break; } else if (key == VK_DOWN) { CON_HistNext(); break; } else if (key == VK_TAB) { // command completion field_t f; Field_Clear(&f); Q_strlcpy(f.buffer, qconsole_line, sizeof(f.buffer)); Field_AutoComplete(&f); Q_strlcpy(qconsole_line, f.buffer, sizeof(qconsole_line)); qconsole_linelen = strlen(qconsole_line); break; } if (qconsole_linelen < sizeof(qconsole_line) - 1) { char c = buff[i].Event.KeyEvent.uChar.AsciiChar; if (key == VK_BACK) { int pos = (qconsole_linelen > 0) ? qconsole_linelen - 1 : 0; qconsole_line[pos] = '/0'; qconsole_linelen = pos; } else if (c) { qconsole_line[qconsole_linelen++] = c; qconsole_line[qconsole_linelen] = '/0'; } } } if (newlinepos < 0) { CON_Show(); return NULL; } if (!qconsole_linelen) { CON_Show(); Com_Printf("/n"); return NULL;//.........这里部分代码省略.........
开发者ID:raynorpat,项目名称:cake,代码行数:101,
示例26: ReadConsoleInput/*==================CON_Input==================*/char *CON_Input( void ){ INPUT_RECORD buff[ MAX_EDIT_LINE ]; DWORD count = 0, events = 0; WORD key = 0; int i; int newlinepos = -1; if ( !GetNumberOfConsoleInputEvents( qconsole_hin, &events ) ) { return NULL; } if ( events < 1 ) { return NULL; } // if we have overflowed, start dropping oldest input events if ( events >= MAX_EDIT_LINE ) { ReadConsoleInput( qconsole_hin, buff, 1, &events ); return NULL; } if ( !ReadConsoleInput( qconsole_hin, buff, events, &count ) ) { return NULL; } FlushConsoleInputBuffer( qconsole_hin ); for ( i = 0; i < count; i++ ) { if ( buff[ i ].EventType != KEY_EVENT ) { continue; } if ( !buff[ i ].Event.KeyEvent.bKeyDown ) { continue; } key = buff[ i ].Event.KeyEvent.wVirtualKeyCode; if ( key == VK_RETURN ) { newlinepos = i; break; } else if ( key == VK_UP ) { Q_strncpyz( qconsole_line, Hist_Prev(), sizeof( qconsole_line ) ); qconsole_linelen = strlen( qconsole_line ); break; } else if ( key == VK_DOWN ) { const char *history = Hist_Next(); if ( history ) { Q_strncpyz( qconsole_line, history, sizeof( qconsole_line ) ); qconsole_linelen = strlen( qconsole_line ); } else if ( qconsole_linelen ) { Hist_Add( qconsole_line ); qconsole_line[ 0 ] = '/0'; qconsole_linelen = 0; } break; } else if ( key == VK_TAB ) { field_t f; Q_strncpyz( f.buffer, qconsole_line, sizeof( f.buffer ) ); Field_AutoComplete( &f, "]" ); Q_strncpyz( qconsole_line, f.buffer, sizeof( qconsole_line ) ); qconsole_linelen = strlen( qconsole_line ); break; } if ( qconsole_linelen < sizeof( qconsole_line ) - 1 ) { char c = buff[ i ].Event.KeyEvent.uChar.AsciiChar; if ( key == VK_BACK ) { int pos = ( qconsole_linelen > 0 ) ?//.........这里部分代码省略.........
开发者ID:Sixthly,项目名称:Unvanquished,代码行数:101,
示例27: ProcessInputMessageBOOL ProcessInputMessage(MSG64::MsgStr &msg, INPUT_RECORD &r){ memset(&r, 0, sizeof(r)); BOOL lbOk = FALSE; if (!UnpackInputRecord(&msg, &r)) { _ASSERT(FALSE); } else { TODO("Сделать обработку пачки сообщений, вдруг они накопились в очереди?"); //#ifdef _DEBUG //if (r.EventType == KEY_EVENT && (r.Event.KeyEvent.wVirtualKeyCode == 'C' || r.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL)) //{ // DEBUGSTR(L" --- CtrlC/CtrlBreak recieved/n"); //} //#endif bool lbProcessEvent = false; bool lbIngoreKey = false; if (r.EventType == KEY_EVENT && r.Event.KeyEvent.bKeyDown && (r.Event.KeyEvent.wVirtualKeyCode == 'C' || r.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL) && ( // Удерживается ТОЛЬКО Ctrl (r.Event.KeyEvent.dwControlKeyState & CTRL_MODIFIERS) && ((r.Event.KeyEvent.dwControlKeyState & ALL_MODIFIERS) == (r.Event.KeyEvent.dwControlKeyState & CTRL_MODIFIERS)) ) ) { lbProcessEvent = true; DEBUGSTR(L" --- CtrlC/CtrlBreak recieved/n"); DWORD dwMode = 0; GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &dwMode); // CTRL+C (and Ctrl+Break?) is processed by the system and is not placed in the input buffer if ((dwMode & ENABLE_PROCESSED_INPUT) == ENABLE_PROCESSED_INPUT) lbIngoreKey = lbProcessEvent = true; else lbProcessEvent = false; if (lbProcessEvent) { //BOOL lbRc = FALSE; #if 0 DWORD dwEvent = (r.Event.KeyEvent.wVirtualKeyCode == 'C') ? CTRL_C_EVENT : CTRL_BREAK_EVENT; #endif //&& (gpSrv->dwConsoleMode & ENABLE_PROCESSED_INPUT) #if 1 // Issue 590: GenerateConsoleCtrlEvent нифига не прерывает функцию ReadConsoleW SendMessage(ghConWnd, WM_KEYDOWN, r.Event.KeyEvent.wVirtualKeyCode, 0); //lbRc = TRUE; #endif #if 0 //The SetConsoleMode function can disable the ENABLE_PROCESSED_INPUT mode for a console's input buffer, //so CTRL+C is reported as keyboard input rather than as a signal. // CTRL+BREAK is always treated as a signal if ( // Удерживается ТОЛЬКО Ctrl (r.Event.KeyEvent.dwControlKeyState & CTRL_MODIFIERS) && ((r.Event.KeyEvent.dwControlKeyState & ALL_MODIFIERS) == (r.Event.KeyEvent.dwControlKeyState & CTRL_MODIFIERS)) ) { // Вроде работает, Главное не запускать процесс с флагом CREATE_NEW_PROCESS_GROUP // иначе у микрософтовской консоли (WinXP SP3) сносит крышу, и она реагирует // на Ctrl-Break, но напрочь игнорирует Ctrl-C lbRc = GenerateConsoleCtrlEvent(dwEvent, 0); // Это событие (Ctrl+C) в буфер помещается(!) иначе до фара не дойдет собственно клавиша C с нажатым Ctrl } #endif } if (lbIngoreKey) return FALSE; // CtrlBreak отсылаем СРАЗУ, мимо очереди, иначе макросы FAR нельзя стопнуть if (r.Event.KeyEvent.wVirtualKeyCode == VK_CANCEL) { // При получении CtrlBreak в реальной консоли - буфер ввода очищается // иначе фар, при попытке считать ввод получит старые, // еще не обработанные нажатия, и CtrlBreak проигнорирует FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); SendConsoleEvent(&r, 1); return FALSE; } }#ifdef _DEBUG if (r.EventType == KEY_EVENT && r.Event.KeyEvent.bKeyDown && r.Event.KeyEvent.wVirtualKeyCode == VK_F11) { DEBUGSTR(L" --- F11 recieved/n"); }#endif#ifdef _DEBUG//.........这里部分代码省略.........
开发者ID:bradgearon,项目名称:ConEmu,代码行数:101,
注:本文中的FlushConsoleInputBuffer函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ FlushFileBuffers函数代码示例 C++ FlushCache函数代码示例 |