Можно ли программно очистить историю консоли?
при работе с консольным приложением, история всего, что было введено в Console.ReadLine()
хранится. Когда на консоли появится приглашение ввести что-то, нажатие курсора вверх/вниз будет прокручивать эту историю (и всю историю можно просмотреть, нажав F7).
С помощью C#, есть ли способ отключить это поведение или очистить историю того, что уже ввели?
разъяснить Console.Clear()
не очищает историю, только буфер экрана. Я хочу очистить историю команд.
EDIT: попробовав несколько предложенных методов, а также некоторые из моих собственных разработок, лучший подход-тот, который предложил ho1. Это не идеально, потому что он вызывает другое окно консоли, но он очищает историю.
6 ответов
Edit: удален неправильный ответ (я запутался в том, что вы хотели сделать) и добавил еще один (надеюсь) лучший ответ.
возможно, это можно сделать, освободив текущую консоль с помощью FreeConsole а затем выделение новой консоли с помощью AllocConsole. Я бы предположил, что тогда он не сохранит историю командной строки.
В общем случае, если вы хотите делать что-то с консолью, которая не поддерживается .Net Framework, это Страница MSDN-хорошее место для поиска:Функции Консоли
может этот пост как я могу настроить историю командной строки, DOSKEY? помочь?
в старые дни DOS была доступна утилита, DOSKEY.EXE, который позволял пользователю циклически выполнять предыдущие команды. В NT это включено по умолчанию, и вы можете цикл через старые команды, однако DOSKEY имеет другие возможности.
чтобы очистить текущую историю командной строки, используйте команду:
doskey /reinstall
вы можете также выборочно сказать его как многие старые команды, чтобы сохранить параметр /listsize
doskey /reinstall /listsize=50
сохранит 50 старых команд.
пожалуйста, дайте мне знать, если это работает и как вы его использовали :)
посмотри SetConsoleHistoryInfo. Согласно документации, он работает только на Vista и выше, поэтому я не уверен, поможет ли он вам или нет.
этот код работает для меня, чтобы очистить историю команд. Ограниченное тестирование и отсутствие гарантий переносимости.
public static partial class ConsoleEx
{
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool SetConsoleHistoryInfo(CONSOLE_HISTORY_INFO ConsoleHistoryInfo);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool GetConsoleHistoryInfo(CONSOLE_HISTORY_INFO ConsoleHistoryInfo);
[StructLayout(LayoutKind.Sequential)]
private class CONSOLE_HISTORY_INFO
{
public uint cbSize;
public uint BufferSize;
public uint BufferCount;
public uint TrimDuplicates;
}
public static void ClearConsoleHistory()
{
var chi = new CONSOLE_HISTORY_INFO();
chi.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(CONSOLE_HISTORY_INFO));
if (!GetConsoleHistoryInfo(chi))
{
return;
}
var originalBufferSize = chi.BufferSize;
chi.BufferSize = 0;
if (!SetConsoleHistoryInfo(chi))
{
return;
}
chi.BufferSize = originalBufferSize;
if (!SetConsoleHistoryInfo(chi))
{
return;
}
}
}
кажется, по МСН (http://msdn.microsoft.com/en-ie/library/system.console_members.aspx) Метод console.clear()
"очищает буфер консоли .."
вы можете попробовать использовать свойство
Console.BufferHeight : "This property defines the number of rows (or lines) stored in the buffer that is accessed by a console mode window"