Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2007, 12:42   #1
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию Защита окна своей проги

Поскольку уничтожать и закрыть можно практически любое окно
(для системных подойдёт WM_DESTROY но может привести к зависанию и глюков эксплорера),
то как можно скрыть окно от глаз EnumWindowsWnd
в callback-функции которой есть вызов GetWindowName или GetClassName, или сделать невозможным закрытие окна
Закрытия можно сделать невозможным просто проигнорировав события WM_CLOSE или WM_DESTROY (вроде как), написав им другой обработчик, но если прога вдруг зависнет, а процесс скрыт, окно закрыть нельзя, то можно зависнуть систему, а это нежелательно
поэтому лучше скрыть окно, как и процесс

Если ли способы реализации подобного не в нулевом кольце(поскольку прога под юзером)?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 26.09.2007, 12:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Скрыть окно можно например поставив в проекте перед созданием главной формы Application.ShowMainForm:=false или задать для окна координаты которые выходят за пределы экрана.

Вопрос остается один : если прога вдруг зависнет, а процесс скрыт, окно закрыть нельзя, то можно зависнуть систему
Что делать? И кста чеэ юзер будет рулить EnumWindowsWnd? ему вред епроггерить не положено...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.09.2007, 13:06   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
Закрытия можно сделать невозможным просто проигнорировав события WM_CLOSE или WM_DESTROY
Гм... а Terminateprocess? Программа даже не узнает, кто её прибил

Кстати, зачем создавать окно, если его всё-равно надо скрыть?
--
и вообще, а не пойти ли б вам на www.rootkit.com или хотя б в тему ниже
пыщь

Последний раз редактировалось JTG; 26.09.2007 в 13:11.
JTG вне форума Ответить с цитированием
Старый 26.09.2007, 13:17   #4
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

хорошо, отвечаю подробно, я лишь обрубаю те концы за которые прогу можно завершить
Пока пользователь моей проги не кликнет на иконку на трее и не введёт правильный пароль к главному окну он доступ не получит
Для продвинутых пользователей на время появления окна с вводом пароля блокируется вызов диспетчера (в отдельном потоке)
Процесс все время скрыт, поэтому осталось лишь присутствие скрытых окон, которые можно обнаружить с помощью enumwindows
от чего я и хочу защитить свои прогу либо не нахождением названия окна (думаю это можно сделать хуком) а лишь Id или если это возможно скрытием окна вообще в системе (если это возможно)
теперь мысль понятна
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 26.09.2007, 13:27   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хочеш зашитить свою прогу от других прог?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.09.2007, 13:48   #6
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Да, поскольку, мне нужна надёжность
Поэтому на событии OnClose прога проверяет на наличие себя в автозапуске, чтобы даже если её удалили из реестра, но не завершили, она всё-равно запустилась бы вновь
Так что насчёт способов?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Старый 26.09.2007, 14:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вообще то даже 50% ты не защитишся от других прог (Субъективное мнение), т.е. захотят - закроют. Но мона сделать службишку которая будет тихо и незаметно проверять закрыта ли прога и если да запускать ее снова.

Ну и разное другое типа пропись проги в реестр, или закрытие неугодных прог, в общем что душа пожелает )
I'm learning to live...

Последний раз редактировалось Stilet; 26.09.2007 в 14:11. Причина: Добавлю что:
Stilet вне форума Ответить с цитированием
Старый 26.09.2007, 19:33   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от joker Посмотреть сообщение
Так что насчёт способов?
1. можно перехватывать функцию EnumWindows и FindWindow
2. Допустим тебя хотят завершить. ты это му несопротивляйся - просто сохрани состояние программы и запусти копию и закройся. Будет создаваться впечатление чо прога будет завершаться и сразу же запускаться
rpy3uH вне форума Ответить с цитированием
Старый 27.09.2007, 10:27   #9
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

Спасибо за совет, а я ради прикола пробовал
переписать обработчики этих событий у формы,
с WM_CLOSE получилось, а с WM_DESTROY нет
WM_SHOWWINDOW тоже не вышло
поскольку эти методы ещё в TCustomWinForm определены, то override
будет ошибкой, поэтому я просто во всех обработчиках прописал

Код:
 
If isWindowVisible(Handle) then inherted;
кстати прогу я делаю на конкурс, чтобы засветится
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер окна в зависимости от размера окна Reverent JavaScript, Ajax 1 02.02.2008 15:49
Как сделать для своей проги скин? C++ Builder 6. Dunhil Помощь студентам 1 30.12.2007 13:37
закрыть все дочерни окна, кроме главного окна Worms Общие вопросы Delphi 2 03.12.2007 22:18
Как со своей проги запустить чужую SeRhy Помощь студентам 5 04.11.2007 11:18
Как сделать чтобы дочерние окна в MDI-приложениях были вне главного окна??? dimonchuk Общие вопросы Delphi 1 11.08.2007 12:13