• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык

Программы-шутки...

siryksv

Участник форума
Регистрация
5 Окт 2009
Сообщения
567
Благодарности
1
Баллы
225
В данной теме будут излагаться материалы, касающиеся создания программ-приколов. Все желающие могут здесь выкладывать свои программы и исходные коды, а также другие материалы, имеющие отношение к созданию таких программ.

Внимание! Обязательно предупреждать о функционале программ и указывать способ его отключения :).

Предупреждение! Не следует здесь выкладывать вирусы или программы, которые имеют явно деструктивный характер и могут причинить программный или аппаратный ущерб компьютеру.
 

siryksv

Участник форума
Регистрация
5 Окт 2009
Сообщения
567
Благодарности
1
Баллы
225
Пожалуй, первым начну я :)!
Выкладываю свой простенький пример шуточной программы "дырокола" ;). При запуске отлавливаются сообщения левой кнопки мышки и в текущем активном окне образуется сквозная дырка ;). Для отключения программы следует нажать комбинацию клавиш "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. В связи с обновлением программы архив с самой программой и исходниками находится во вложении к моему более позднему посту. Текущее вложение удалил.
 

xterm

Участник форума
Регистрация
25 Июн 2009
Сообщения
5.177
Благодарности
16
Баллы
400
Хороший дырокол, хоть и простенький. Пока что он дырявит еще не всё - некоторые кнопки срабатывают:D:D Жду продолжения темы*flowers*
Просьба: выкладывай список функций с использованными параметрами, поясняй константы, а то вызов MyFunc(VOT_VAM_EXAMPLE, 0, true) выглядит не совсем понятно, не наглядно;)
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
На немодальных дочерних окнах... дырокол не работает... на модальных обнаружил прикольное действие программы...
Если к примеру открыть WinRar, Справка->О программе... откроется вторичное модальное окно... на нем иконка программы... её можно резать (если нажать по ней ЛКМ), и она падает вниз до нижнего края окна, после отпружинивает... и летит вверх... потом опять вниз :D :D
 

siryksv

Участник форума
Регистрация
5 Окт 2009
Сообщения
567
Благодарности
1
Баллы
225
Geor'G
Должно работать и на немодальных окнах... Ведь в качестве параметра при создании ловушки я поставил WH_GETMESSAGE - т.е. должно ловить все сообщения относящиеся ко всем окнам, и как только процесс или нить выполняет выборку сообщения из своей очереди (или получает сообщение внеочереди), то сразу вызывается моя функция SysMsgProc из библиотеки. Хм... *???*.
Дело в том, что "дырка" в дочернем контроле (если щелкнуть именно по этому дочернему контролу) окрашивается в цвет родительского, или же, если щелкнуть по контролу верхнего уровня, не имеющему родительских окон в текущем процесссе, то в цвет контролов другого приложения, окна которого отображаются под ним. И если мы, к примеру, в Дельфи положим на форму панель одного цвета с формой, то при щелчке на панели образуется "дырка", но она окрашена в фоновый цвет (цвет формы) и, следовательно, никаких визуальных эффектов мы не заметим. :)
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Должно работать и на немодальных окнах... Ведь в качестве параметра при создании ловушки я поставил WH_GETMESSAGE
Я когда писал, не смотрел код :)

но она окрашена в фоновый цвет (цвет формы) и, следовательно, никаких визуальных эффектов мы не заметим.
Да всё так и происходит... Мне надо было сперва код глянуть, а потом уж писать :-\
 

siryksv

Участник форума
Регистрация
5 Окт 2009
Сообщения
567
Благодарности
1
Баллы
225
Дырокол
Хотел бы представить усовершенствованную версию программы "дырокола".
Теперь "дырявит" любые окна.
1. В dll добавил рекурсивную процедуру EnumWin, которая перебирает всю цепочку родительских окон, и в каждом из них делает "дырку". Это позволяет гарантированно дырявить любое окно, и т.о. снимаются проблемы, описанные в предыдущих постах.
2. Подробно откомментировал исходный код, особенно код для DLL.
3. Есть маленький изъян: в некоторых многооконных приложениях (напр. Total Commander) при потере окном фокуса, оно перерисовывается, и тогда "дырка" теряется или перекрашивается. Если будет время и желание, я подумаю, как это решить.
Выражаю благодарность Geor'G и xterm за обсуждение программы.*flowers*
Сама программа и исходный код находятся во вложенном архиве.
 

Вложения

  • MyExample.zip
    14,3 KB · Просмотры: 269
Сверху Снизу