| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > консольное приложение->история команд |
| Автор: zkv 23.7.2006, 02:29 |
| Во многих консольных приложениях (возможно во всех - я не в курсе) есть возможность выбирать ранее введенные команды стрелками вверх/вниз (история команд). Буфер где все это хранится я так понял создается по дефолту. Не подскажите, как добраться до буфера где эта самая история хранится? Можно ли его очищать, добавлять или удалять строки? Нужна какая-нибудь зацепка - имя функции или класса где искать. Работаю в Visual C++ 7.1 Благодарю всех за внимание. |
| Автор: Mayk 23.7.2006, 19:19 | ||
| В стандартной библиотеке подобной ф-ции не предусмотрено. Если ли что-то стандартное в win32 не знаю, можешь посмотреть msdn (хотя скорее всего её там нет. Если бы она была, то command.com бы наверняка поддерживал историю команд, чего он не делает) в юниксах активно пользуют библиотеку readline. Возможно, где-нибудь валяется её билд под винду. Возможно, нет. Во всяком случае в документанции по php сказано
Так что можешь погуглить замену самостоятельно. |
| Автор: Любитель 23.7.2006, 20:44 |
| Не знаю как до него добраться, но cmd.exe (в NT-виндах) это дело поддерживает. Жестокое подозрение, что это просто невозможно (наглые способы, вроде слежения за клавой не в счёт) |
| Автор: zkv 24.7.2006, 01:12 | ||
| MSDN я копал долго и упорно прежде чем задать вопрос. Подсказали, что за это дело отвечает только лишь интерпретатор команд. Пробовал запускать приложение из CMD и FAR: запускаем в первый раз вводим что-нибудь, история на месте, завершаем приложение - истории нет, запускаем снова - видим историю из первого раза. А у Фара можно вообще буфер отключить. У меня напрашивается вывод, что мое приложение к работе своей истории команд, увы, отношения не имеет. У меня возникли два вопроса: 1. К примеру возьмем Фар (Фар - для примера, я имею ввиду все оболочки такого рода), он каким-либо образом базируется на Кмд (или использует его для вызова подобных приложений), или же это два совершенно независимых приложения? 2. Если историей команд занимается Кмд, можно ли сделать математически строгий вывод, что мое приложение на неё (историю) никак повлиять не может? Простите если вопросы сформулированы кривовато, но ведь правильно задать вопрос может только тот кто знает ответ Спасибо за участие.
|
| Автор: dumb 24.7.2006, 02:24 |
| историей команд(а точнее - введенных строк) в консоли(cmd.exe - частный случай) занимается csrss. функции управления историей, в принципе, есть, но они недокументированны. экспортирует их kernel32.dll(поиск по "history"). забавно еще понажимать функциональные клавиши - какой-то... эм. не знаю как назвать... решил окошками консоль приукрасить и начал именно с истории... |
| Автор: zkv 28.7.2006, 17:16 |
| спасибо всем за помощь, найти информацию по соответствующим недокументированным функциям не удалось (вероятно, потому что, недокументированные отдельное спасибо Dumb(у), за то, что обрисовал общую картину. плюс мне поставить не дали, говорят не дорос еще, чтоб плюсы раздавать |