Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Как воспрепятствовать закрытию окна другого прилож |
Автор: NightWishMaster 28.7.2008, 23:28 | ||
Скажем, у меня открыт стандартный Notepad и я хочу воспрепятствовать его закрытию пользователем. Первая идея – это пробовать отлавливать сообщения, посылаемые окну Блокнота и если это WM_CLOSE, то не пересылать их дальше. Вот код (Блокнот должен был блокироваться при нажатии на кнопку ButtonLock):
Функция SetWindowLong() выдает ошибку: “System Error. Code: 5. Отказано в доступе.” Это запрещено с точки зрения безопасности? Потому как для окна моей программы этот код работает нормально (не дает ей закрыться). Как можно это обойти? Как воспрепятствовать закрытию Блокнота? Блокировать кнопку закрытия окна не предлагать – в любой программе есть либо своя кнопка закрытия, либо меню Файл-Выход. Кроме того, я обратил также внимание на то, что событие WM_CLOSE вызывается не всегда. Например, при вызове функции Form->Close() оно почему-то не срабатывает. А обрабатывать WM_DESTROY уже позно – когда оно срабатывает окно уже пропадает с экрана (по крайней мере у меня так было). Жду ваших размышлений ![]() |
Автор: jonie 29.7.2008, 00:23 | ||
так там (в мсдн) черным по белому и написано
ну можно внедриться в чужой процесс.. способов не один, и не два.... хотя мб есть чего поудобчивее... |
Автор: jonie 29.7.2008, 08:51 |
перед тем как лезть в дебри надо подумать о других способах. http://wasm.ru/article.php?article=window_inject вот пример инжекта... да и гугл найдет многа. хотя вроде поставив глобальный хук тоже можно работать на вполне себе нормальных условиях....(как минимум эта длл-ка будет подгружена во все процессы). |
Автор: Supersedes 29.7.2008, 11:10 |
Пробуй SetWindowsHookEx(...) на процедуру окна блокнота!! Описание посмотри в API. |
Автор: Draeden 29.7.2008, 14:01 |
Автор темы, из режима пользователя это сделать неудастся, хотя бы потому, что при доступе к объектам "процесс" и "окно" подсистема защиты сверит маркер доступа твоего процесса с дескриптором защиты данных объектов. Защиту обойти нельзя. Другое дело, если у твоего процесса есть ссответсвующие права, например права администратора. Как минимум ты можешь поставить перехват NtOpenProcess из ntdll.dll, запретив доступ к защищаемому процессу. |