Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
В данной теме будут излагаться материалы, касающиеся создания программ-приколов. Все желающие могут здесь выкладывать свои программы и исходные коды, а также другие материалы, имеющие отношение к созданию таких программ.
Внимание! Обязательно предупреждать о функционале программ и указывать способ его отключения .
Предупреждение! Не следует здесь выкладывать вирусы или программы, которые имеют явно деструктивный характер и могут причинить программный или аппаратный ущерб компьютеру.
Пожалуй, первым начну я !
Выкладываю свой простенький пример шуточной программы "дырокола" . При запуске отлавливаются сообщения левой кнопки мышки и в текущем активном окне образуется сквозная дырка . Для отключения программы следует нажать комбинацию клавиш "Shift+Ctrl+Alt+Q". Дырки остаются до перезагрузки. Программа написана на WinApi в среде Delphi и имеет скорее "педагогическое" предназначение (для начинающих программистов), так как иллюстрирует использование различных аспектов программирования на WinApi.
Пока выкладываю саму программу с исходным кодом, а также DLL-библиотеку - в ней содержится Hook (т.е. ловушка) собственно для отлова сообщений мыши и создания "дырки" в окне. Все файлы находятся в архиве MyExample.zip.
Для глобального перехвата нажатия клавиш и щелчков мыши в системе Windows нужны две компоненты: исполняемый EXE файл и динамическая библиотека, которую традиционно в таких случаях называют хуком или ловушкой.
Итак:
1. Нужно создать DLL-библиотеку, в которой и будет находиться фильтр сообщений от мыши и клавиатуры.
2. Нужно создать минимальное приложение, способное загружать и выгружать ловушку. Установка ловушки осуществляется Api-функцией SetWindowsHookEx - см. в файле Hook.dpr. Выгружать ловушку - функцией UnhookWindowsHookEx.
2. Собственно сам функционал "прокалывания дырок" реализуется с помощью создания т.н. регионов и связывания их с текущим окном с помощью функции SetWindowRgn.
Подробную теорию по созданию и использованию DLL-библиотек и перехвату сообщений оконной подсистемы напишу чуть позже. Код я откомментировал.
Пишите в случае возникновения вопросов.
Дополнение от 13 янв. 2010. В связи с обновлением программы архив с самой программой и исходниками находится во вложении к моему более позднему посту. Текущее вложение удалил.
Хороший дырокол, хоть и простенький. Пока что он дырявит еще не всё - некоторые кнопки срабатывают Жду продолжения темы
Просьба: выкладывай список функций с использованными параметрами, поясняй константы, а то вызов MyFunc(VOT_VAM_EXAMPLE, 0, true) выглядит не совсем понятно, не наглядно
На немодальных дочерних окнах... дырокол не работает... на модальных обнаружил прикольное действие программы...
Если к примеру открыть WinRar, Справка->О программе... откроется вторичное модальное окно... на нем иконка программы... её можно резать (если нажать по ней ЛКМ), и она падает вниз до нижнего края окна, после отпружинивает... и летит вверх... потом опять вниз
Geor'G
Должно работать и на немодальных окнах... Ведь в качестве параметра при создании ловушки я поставил WH_GETMESSAGE - т.е. должно ловить все сообщения относящиеся ко всем окнам, и как только процесс или нить выполняет выборку сообщения из своей очереди (или получает сообщение внеочереди), то сразу вызывается моя функция SysMsgProc из библиотеки. Хм... .
Дело в том, что "дырка" в дочернем контроле (если щелкнуть именно по этому дочернему контролу) окрашивается в цвет родительского, или же, если щелкнуть по контролу верхнего уровня, не имеющему родительских окон в текущем процесссе, то в цвет контролов другого приложения, окна которого отображаются под ним. И если мы, к примеру, в Дельфи положим на форму панель одного цвета с формой, то при щелчке на панели образуется "дырка", но она окрашена в фоновый цвет (цвет формы) и, следовательно, никаких визуальных эффектов мы не заметим.
Дырокол
Хотел бы представить усовершенствованную версию программы "дырокола".
Теперь "дырявит" любые окна.
1. В dll добавил рекурсивную процедуру EnumWin, которая перебирает всю цепочку родительских окон, и в каждом из них делает "дырку". Это позволяет гарантированно дырявить любое окно, и т.о. снимаются проблемы, описанные в предыдущих постах.
2. Подробно откомментировал исходный код, особенно код для DLL.
3. Есть маленький изъян: в некоторых многооконных приложениях (напр. Total Commander) при потере окном фокуса, оно перерисовывается, и тогда "дырка" теряется или перекрашивается. Если будет время и желание, я подумаю, как это решить.
Выражаю благодарность Geor'G и xterm за обсуждение программы.
Сама программа и исходный код находятся во вложенном архиве.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.