Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146

Обработчик событий для консоли

02.11.2011, 22:58. Показов 4392. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня есть вот такой замечательный код=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
static BOOL WINAPI Handler (DWORD CntrlEvent);
volatile static BOOL Exit = FALSE;
int _tmain (int argc, LPTSTR argv [])
{
    setlocale(0, "rus");
    
    SetConsoleCtrlHandler (Handler, TRUE);
    while (!Exit) 
    {
        Sleep (4750); 
        Beep (1000, 250);
        _tprintf (_T ("5 seconds\n"));
 
    }
    _tprintf (_T ("Stopping the main program as requested.\n"));
 
    system("pause");
    return 0;
}   
 
BOOL WINAPI Handler (DWORD CntrlEvent) 
{
    Exit = TRUE;
 
    switch (CntrlEvent)
    { 
        /* The signal timing will determine if you see the second handler message */
    case CTRL_C_EVENT:
        _tprintf (_T ("Ctrl-c received by handler. Leaving in 10 seconds\n"));
        Sleep (3000); /* Decrease this time to get a different effect */
        _tprintf (_T ("Leaving handler in 7 seconds.\n"));
        Sleep (7000);  /* Also try decreasing this time */
        return TRUE; /* TRUE indicates that the signal was handled. */
    case CTRL_CLOSE_EVENT:
        _tprintf (_T ("Leaving the handler in 10 seconds.\n"));
        Sleep (2000); /* Decrease this time to get a different effect */
        _tprintf (_T ("\nLeaving handler in 8 seconds.\n"));
        Sleep (8000);  /* Also try decreasing this time */
        return TRUE; /* Try returning FALSE. Any difference? */
 
    case CTRL_BREAK_EVENT: 
        Beep( 900, 200 ); 
        printf( "Ctrl-Break event\n\n" );
        return FALSE; 
 
    case CTRL_LOGOFF_EVENT:
        Beep( 1000, 200 ); 
        printf( "Ctrl-Logoff event\n\n" );
        Sleep (5000);//выход через 5 сек
        return FALSE; 
 
    case CTRL_SHUTDOWN_EVENT: 
        Beep( 1000, 200 ); 
        printf( "Ctrl-Shutdown event\n\n" );
        Sleep (5000);//выход через 5 сек
        return FALSE; 
 
    default:
        _tprintf (_T ("Event: %d. Leaving in 10 seconds\n"), CntrlEvent);
        Sleep (4000); /* Decrease this time to get a different effect */
        _tprintf (_T ("Leaving handler in 6 seconds.\n"));
        Sleep (6000);  /* Also try decreasing this time */
        return TRUE; /* TRUE indicates that the signal was handled. */
    }
}
В принципе, я немного понимаю как это все работает:
устанавливается обработчик для консоли и процедура его обработки выполняется параллельно с основной функцией программы...события обрабатываются, например, при нажатии клавиш Ctrl+C (возникает событие CTRL_C_EVENT) или Ctrl+break (CTRL_BREAK_EVENT), ну или событие CTRL_CLOSE_EVENT возникает при закрытие консоли
мне непонятно 1) как вызвать события CTRL_LOGOFF_EVENT и CTRL_SHUTDOWN_EVENT ?
2) если функция обработчика возвращает значение FALSE, то она не передается обратно в главную функцию?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2011, 22:58
Ответы с готовыми решениями:

Обработчик событий клавиатуры для ListView
Добрый день Подскажите пожалуйста как правильно задать вопрос. в Каллбэк функции для события WM_CREATE создаю дополнительный...

Как задать обработчик событий для элементов меню c++ WinAPI?
Как задать обработчик событий для элементов меню c++ WinAPI, что бы при выборе определенного пункта меню, выполнялось определенное действие...

Обработчик событий TabControl
Привет, как сделать обработчик событий для TabControl ? рисую TabControl так: LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM...

2
30 / 30 / 9
Регистрация: 15.03.2010
Сообщений: 146
04.11.2011, 09:50  [ТС]
Никто не знает?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
04.11.2011, 15:22
I_like_C++, никто не отвечает потому-что всё написано доступным языком на MSDN. Ответы на твои вопросы находятся в описании каждого типа посылаемых сообщений, а также в разделе Remarks.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2011, 15:22
Помогаю со студенческими работами здесь

Поменять обработчик событий
Как поменять обработчик событий на свой вот моя строчка, которая должна менять обработчик событий, но это не работает. OldWindowProc...

Передача собственных переменных в обработчик событий
Доброго времени суток! Буквально недавно я начал понемножку разбираться в WinAPI. И одной из первых проблем, с которой я столкнулся,...

Обработчик событий внутри класса создания окна
Хочу сделать класс для создания окна (в проекте хочу использовать несколько окон и чтобы не писать для каждого окна отдельный обработчик,...

Обработчик событий для ImageButton
У ImageButton такой же обработчик событий как и у Button? то есть onClickListener функция onClick да?

Обработчик событий для Enter
а где прописывать этот код в ТForm или где???? В обработчике событий OnKeyPress: procedure TForm1.KeyPress(Sender: TObject; var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru