Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > [VC++] Консоль - Считать строку


Автор: MuForum 6.6.2011, 19:48
Доброго времени суток.


# Задача: Считать введенную строку с консоли без блокировки правого клика.
- Как в консоли(cmd) от мелкософта.

Код

char buf[1024];
gets(buf); // Блокирует правый клик.
cin.getline(buf, 1024); // Блокирует правый клик.



P.S. -> Как такое реализовать?

Автор: heavix 8.6.2011, 02:27
Попробуйте 

Код

BOOL ReadConsole(

HANDLE hConsoleInput , // дескриптор буфера ввода консоли
LPVOID lpBuffer,              // буфер данных
DWORD nNumberOfCharsToRead,   // число символов для чтения
LPDWORD lpNumberOfCharsRead , // число прочитанных символов
LPVOID lpReserved             // зарезервировано
);

Сама по себе функция врядли сделает то что Вы ожидаете... 
а так вообще - здесь дорога только в WinApi... Консоль в винде - сама по себе - окно... можно и его заставить обрабатывать сообщения 
от мыши... То есть здесь корректнее сказать что стандартные С-шные функции не блокируют правый клик - а консольное приложение - 
которое пишется - не обрабатывает события от мыши!!!

Автор: MuForum 9.6.2011, 10:08
Благодарю за подсказку "heavix".
Код

...
HANDLE hStdin    = GetStdHandle(STD_INPUT_HANDLE);
// ----
GetConsoleMode(hStdin, & fdwSaveOldMode);    
fdwMode        = fdwSaveOldMode & ~ENABLE_MOUSE_INPUT;
SetConsoleMode(hStdin, fdwMode);
// ----
while(true)
{
ReadConsole(hStdin, buf, 512, & dwBytesRead, NULL);
}
....

- Вот и всё решение проблемы =)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)