Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› [VC++] Закрытие программы: ALT + F4. Активное окно. Фильтрация деактив. |
Посл.ответ | Сообщение |
|
Создано: 15 марта 2008 00:04 · Личное сообщение · #1 Доброе время суток! - И снова я мучаюсь с 'оконной процедурой'. - Работаю на 'Visual C++'. (MVS 2005) - Игра: 'MuOnline'. - Графический движек: 'OpenGL'. - Мне необходимо проводить некоторые действия над окном (Отправлять окну сообщения о перемещение и действиях мыши.), но из-за специфики игры, нельзя, чтобы окно получало сообщение о 'дезактивации' (WM_ACTIVATE). - То есть мне приходится делать подмену 'оконной процедуры' и в ней уже фильтровать сообщение 'WM_ACTIVATE'. (Сдесь нет проблем, всё нормально) - Проблема заключается в том, что если во время работы окна, попытаться закрыть другие программы такие как: 'Microsoft Office Word' например, или закрыть какую-либо программу при помощи комбинации клавиш 'Alt + F4', то закрывается и окно игры. - Делать изменения в коде программы main.exe я не могу, то есть мне нужно что-то придумать владея лишь: handle окна, pid, и подменной 'оконной процедурой'. P.S. -> Потратив сутки на поиск в 'google.com' и 'msdn.com' особо ничего не дало. Может у кого-то есть идеи, буду рад. # Добавление: Фильтрация сообщений 'WM_CLOSE' и 'WM_DESTROY' не помогла. # Дополнение: Подробно о сообщение 'WM_ACTIVATE' можно почитать на следующих ресурсах: MSDN http://msdn2.microsoft.com/en-us/library/ms646274(VS.85).aspx , firststeps.ru http://www.firststeps.ru/mfc/winapi/win/r.php?120 . # Результат использования 'WinSpector http://www.windows-spy.com/download/ ' - Последние десять сообщений перед закрытием окна после использования комбинации клавиш 'ALT + F4'.
![]() |
|
Создано: 15 марта 2008 00:05 · Личное сообщение · #2 # Интересные наблюдения: Я с самого начала думал, что при закрытие какого-либо окну, отправляется системное сообщение об закрытие. Затем когда возникла проблема описанная в данной теме, была мысль(возникло предположение), что наверно отправляется системное сообщение об закрытие всем активным окнам(хотя это даже по логике не правильно). - Но следующие эксперементы дали следующий результат: [quote] При закрытие окна игры при помощи кнопки 'Закрыть/Close' (SystemMenu), окну приходит два сообщения в следующем порядке: 'WM_CLOSE' -> 'WM_DESTROY'. При закрытие окна игры при помощи комбинации клавиш 'ALT + F4', окну приходит два сообщения в следующем порядке: 'WM_CLOSE' -> 'WM_DESTROY'. При закрытие любого другого окна при помощи комбинации клавиш 'ALT + F4', окно игры закрывается, но не одно из следующих сообщение не приходит: 'WM_CLOSE', 'WM_DESTROY', 'WM_NCDESTROY', 'WM_QUIT'. [/quote] # Дополнение: Информация о команде 'WM_SYSCOMMAND': MSDN http://msdn2.microsoft.com/en-us/library/ms646360(VS.85).aspx P.S. -> Читал данную статью 'Неснимаемое (неубиваемое) приложение http://www.rsdn.ru/forum/message/643154.aspx ', но в моём случае не подходит, так как окну вообще сообщения о закрытие не приходят. ![]() |
|
Создано: 15 марта 2008 00:06 · Личное сообщение · #3 Не знаю парни, может у меня руки кривые хз... - Выкладываю свой код: # Установка глобального хука вида 'WH_KEYBOARD':
- # Подмена 'оконной процедуры':
- # Оконная процедура:
P.S. -> Когда закрываю само окно игры, то сообщения показывается, закрываю другую программу при помощи 'ALT + F4', сообщение не появляется(Spy++ тоже не показывает, чтобы сообщение приходило о закрытие), но окно игры закрывается =( # Дополнение: У меня есть 'cesdn.dll', в которой это реализовано, пробовал декомпилить.(Вроде всё перевёл(парни помогли), но полюбому окно закрывается) - Если бы кто-то помог мне декомпилить .dll, было супер. ![]() |
![]() |
eXeL@B —› Программирование —› [VC++] Закрытие программы: ALT + F4. Активное окно. Фильтрация деактив. |