Управление форвардом из Си++
Модераторы: ElenVR, Людмила, PR
-
- Сообщения: 493
- Зарегистрирован: 04 янв 2004 12:45
- Откуда: СофтЛаб-НСК
Насколько я помню, никаких специальных действий действий, ограничивающих посылку сообщений невидимому окну, мы не делали. У меня есть вопрос - действительно ли как только Вы говорите окну ShowWindow(SW_HIDE) оно перестает получать сообщения, и, соответственно, как только говорите ShowWindow(SW_SHOW), то сообщения начинают приходить? Или Вы делаете окно невидиым как-то по другому?
-
- Сообщения: 21
- Зарегистрирован: 03 июн 2013 14:12
Пробовал и так, а еще пробовал делать окно наследуемое от HWND_MESSAGE, в него вообще сообщения не приходят - 3 сообщения на старте и все, я уже показывал этот код, приведу его еще раз:Насколько я помню, никаких специальных действий действий, ограничивающих посылку сообщений невидимому окну, мы не делали. У меня есть вопрос - действительно ли как только Вы говорите окну ShowWindow(SW_HIDE) оно перестает получать сообщения, и, соответственно, как только говорите ShowWindow(SW_SHOW), то сообщения начинают приходить? Или Вы делаете окно невидимым как-то по другому?
Код: Выделить всё
// create window
static const wchar_t* class_name = L"VE_FORWARD_HOOK";
WNDCLASSEX wx = {};
wx.cbSize = sizeof(WNDCLASSEX);
wx.lpfnWndProc = WindowProc;
wx.hInstance = 0;
wx.lpszClassName = class_name;
if (RegisterClassEx(&wx)) {
// регистрируем невидимое окно только для приема сообщений
hWindow = CreateWindowEx(0, class_name, L"forward_hook_wnd", 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL);
}
Да, именно так и планирую. А за закрытие окна из диспетчера задач у нас санкции жестче - с таким сотрудником мы прощаемся. Тем более, что весь процесс телевещания автоматизирован практически полностью. У режиссеров задача только следить за качеством и принятие решения в экстренных ситуаций.Перехватите в своей программе все сообщения, ответственные за закрытие окна - WM_CLOSE, например, и в обработке этого сообщения ничего не делайте. Или по этому сообщению делайте minimize окна программы. Также, если это диалоговое приложение, перехватите OnOK и OnCancel и тоже в них ничего не делайте, иначе программу можно будет закрыть случайным нажатием Enter или Esc.
Программу тогда возможно будет закрыть только убиванием ее в списке процессов. То есть, случайно закрыть ее не получится, и даже специально - придется сильно постараться.
Добавлено:
Вот что выяснил. Если в принципе закомментировать ShowWindow() при инициализации окна - сообщения не приходят. Но сделал вот так:
Код: Выделить всё
case WM_CLOSE:
ShowWindow(hWnd, SW_HIDE);
break;
-
- Сообщения: 2311
- Зарегистрирован: 05 мар 2003 19:21
У нас при разработке программ никто давно не пользуется "чистым" Windows API. А при написании программ на MFC лично я не испытывал проблем с получением сообщений через SLMessageServer. Также, насколько я знаю, нет таких проблем и в программах на .Net и C#. Поэтому вряд ли кто из нас сможет объяснить, почему в Вашем примере сообщения в программу не приходили. Это требует отдельного исследования, смысла в котором я не вижу, т.к. - см. ниже.Пробовал и так, а еще пробовал делать окно наследуемое от HWND_MESSAGE, в него вообще сообщения не приходят - 3 сообщения на старте и все, я уже показывал этот код, приведу его еще раз:
Я считаю, это главное.Окно исчезает из вида, точка останова на "Shedule.Start" срабатывает! Т.е. окно принимает сообщения. А по поводу HWND_MESSAGE я не буду уже исследовать. Задача вполне решена.