В моем приложении C # я пытаюсь предотвратить сбой в моем приложении, в основном я использую окно консоли в качестве окна отображения журнала.Я уже решил проблему «Кнопка закрытия», отключив окно закрытия, и я показываю / скрываю меню с помощью Показать и скрыть вызовы, все это работает очень хорошо.
Мой последний шаг - если Выбор текстаактивное и окно пытается скрыться.
Мне либо нужно:
A.Выбить окно из режима выбора.(не уверен, как бы я это сделал, так как выбор приостанавливает весь вывод.)
B.Отключить меню «Правка» таким же образом, как я отключил меню «Закрыть», в надежде, что оно также отключит выбор мыши, но мне еще не удалось найти способ удалить меню «Правка», и я даже не уверенэто помешало бы выделению мыши.
C.Это кажется наиболее очевидным, отключить выбор мыши, и это то, что у меня есть в моем коде, но он не работает, поэтому я не уверен, что мне не хватает.
Код в вопросе:
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
....
[DllImport("Kernel32.dll", ExactSpelling = true)]
private static extern int SetConsoleMode(IntPtr hWnd, int wFlag);
....
public static void HideConsoleLog () {
if (handle != IntPtr.Zero) {
SetConsoleMode(handle, 0x0080); // ENABLE_EXTENDED_FLAGS 0x0080
ShowWindow(handle, (int)WinCntrlOpt.SW_HIDE);
LogVisible = false;
}
}
Согласно документации :
ENABLE_EXTENDED_FLAGS 0x0080 Требуется для включения или отключения расширенных флагов.См. ENABLE_INSERT_MODE и ENABLE_QUICK_EDIT_MODE.
И ...
ENABLE_QUICK_EDIT_MODE 0x0040 Этот флаг позволяет пользователю использовать мышь для выбора и редактирования текста.
Чтобы включить этот режим, используйте ENABLE_QUICK_EDIT_MODE |ENABLE_EXTENDED_FLAGS.Чтобы отключить этот режим, используйте ENABLE_EXTENDED_FLAGS без этого флага.
Итак, похоже, я делаю это правильно, и он работает, но не мешает выбору мыши.Я знаю, что не так давно Microsoft возилась с консолями , и я не знаю, сломалось ли это или нет.
Есть аналогичный вопрос на обмене стека, но это никоим образом не дает работающего решения и фактически является противоположностью того, что я пытаюсь сделать, и в C или C ++.Я могу интерполировать, но это в основном то, что я уже пробую здесь.
Кажется, это то же самое предложение, используйте ENABLE_EXTENDED_FLAGS без каких-либо других флагов, чтобы отключить эту опцию, и это то, что у меня есть.Но это не работает.
Итак, я либо исцарапываю неверное решение, либо неправильно что-то делаю.
В результате, когда окно консоли открыто, вы можетеиспользуйте мышь для выбора текста, который автоматически переводит консоль в тот «режим выбора», который добавила Microsoft.Это не проблема, но когда он остается в этом режиме, и вы выбираете «Показать журнал» (пункт меню с переключателем, отмеченный галочкой в главном окне приложения), окно консоли действительно скрывается, но затем главное окно блокируется иприложение вылетает.(Я предполагаю, потому что окно заблокировано этим режимом выбора.) Он не падает, когда «режим выбора» не активен.
Я также хотел бы попробовать это из той же документации:
ENABLE_MOUSE_INPUT 0x0010 Если указатель мыши находится в границах окна консоли, а окно имеет фокус клавиатуры, мышьсобытия, генерируемые движением мыши и нажатиями кнопок, помещаются во входной буфер.Эти события отбрасываются ReadFile или ReadConsole, даже когда этот режим включен.
Проблема в том, что:
Когда создается консоль, все режимы ввода, кромеENABLE_WINDOW_INPUT включены по умолчанию.
Итак, как мне его отключить?
Я в порядке с любым решением, которое либо выводит его из режима выбора, либо запрещает начинать си у меня есть то, что я пытался.