FreeBasic
Главная
Вход
Регистрация
Воскресенье, 16.08.2026, 23:51Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
пауза в консольном окне
VitaminДата: Пятница, 14.08.2026, 12:08 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 69
Репутация: 4
Статус: Offline
Если в окне консольной программы, например rar.exe или 7za.exe щелкнуть мышкой, то она останавливается. При нажатии на любую клавишу она снимается с паузы и продолжает выполняться. Как такое поведение реализовать в проге на FreeBasic?

Сообщение отредактировал Vitamin - Пятница, 14.08.2026, 12:10
 
haavДата: Пятница, 14.08.2026, 16:41 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1479
Репутация: 50
Статус: Offline
Так вроде ReadConsoleInput умеет ловить и мышь и клаву.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Пятница, 14.08.2026, 18:10 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 69
Репутация: 4
Статус: Offline
Вообще это не в проге зашито, а в работе Windows с консольным окном.

Цитата
Если консоль зависает или ставится на паузу при клике мыши, это происходит из-за включенного режима QuickEdit (Быстрое редактирование) в Windows. Когда вы кликаете внутри окна, терминал переходит в режим выделения текста, блокируя выполнение программы.

Было предположение, что есть какой-нибудь ключ компилятора для включения этой функции, но ничего не нашел.

Добавлено (15.08.2026, 19:46)
---------------------------------------------
Google ИИ выдал мне с пятой попытки примерно такой код:
Код
#include once "windows.bi"
#include once "crt.bi" ' Подключаем CRT для прямого вывода без буферизации FreeBASIC

' Получаем дескриптор ввода консоли
Dim As HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE)
Dim As DWORD cmode

' Полностью очищаем режим ввода и принудительно выставляем флаги QuickEdit
GetConsoleMode(hInput, @cmode)
cmode = ENABLE_EXTENDED_FLAGS Or ENABLE_QUICK_EDIT_MODE
SetConsoleMode(hInput, cmode)

Print "=== QuickEdit Тест на FreeBASIC ==="
Print "Кликните ЛЕВОЙ кнопкой мыши прямо по тексту ниже."
Print "Программа остановится (в заголовке окна появится 'Выбрать')."
Print "Нажмите ENTER для продолжения работы."
Print "-----------------------------------------------------------"

Do    
  Printf(".") ' Прямой вывод через printf гарантирует, что Windows поймает блокировку
  Sleep(30)
Loop


Он работает. Причем работает даже если режим консоли не переключать, а использовать только printf: 
Код
#include once "windows.bi"
#include once "crt.bi" ' Подключаем CRT для прямого вывода без буферизации FreeBASIC

Print "Кликните ЛЕВОЙ кнопкой мыши прямо по тексту ниже."
Print "Программа остановится (в заголовке окна появится 'Выбрать')."
Print "Нажмите ENTER для продолжения работы."

Do
  Printf(".")  ' Прямой вывод через printf гарантирует, что Windows поймает блокировку  
  Sleep(30)
Loop
Цитата
>работает даже без переключения режима консоли, достаточно Printf(".")

 Вы абсолютно правы! Ваше наблюдение очень точное. На самом деле, в современных версиях Windows режим QuickEdit по умолчанию включен для всех окон командной строки. Поэтому, как только мы заменили встроенный Print из FreeBASIC на стандартный printf из библиотеки Си, всё сразу заработало «из коробки».


Сообщение отредактировал Vitamin - Суббота, 15.08.2026, 19:55
 
  • Страница 1 из 1
  • 1
Поиск: