Глобальный хук на чистом бейсике по идее tyomitch-а

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 26.12.2008 (Пт) 19:04

А как можно это сделать, чтобы было правильно?

И даже если сделать правильно, или вообще отказаться от интерфейса... Программа ведь так и не входит в hookproc, а это до того, как она могла бы рухнуть на myhook.hookproc
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение Хакер » 26.12.2008 (Пт) 19:20

У тебя какие-то паталогические проблемы с мысленной трассировкой кода.

То тебе казалось, что выполнение не входит в неуправляемую рекурсию, когда у таймера нет КРБ. Теперь тебе кажется что оно не заходит в HookProc.

Откуда основания считать, что не заходит?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 26.12.2008 (Пт) 19:44

У тебя какие-то паталогические проблемы с мысленной трассировкой кода.

У тебя какая-то патологическая проблема с переходом на личности. И извращённая любовь строить фразу так, чтобы обидеть собеседника. А потом на полуслове так и бросишь топик, как в том пресловутом таймере (и ещё не единожды)?

Не входит, потому что не выполняется debugbreak.
Если хукать своё окно, то входит. И debugbreak выполняется и сам хук вполне работает через интерфейс. Если хукать чужое окно, то до интерфейса дело просто не доходит. debugbreak объявлен в тлб, то есть, сработать должен и без рантайма. Всё это в теме уже было сказано.

Вопрос про FNDLL : А можно ли из неё, чтобы не трогать интерфейсы, организовать функцию обратного вызова? И если да, то как?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение Хакер » 26.12.2008 (Пт) 19:53

О боги... ещё один обладатель больной самооценки.

У меня ни желания, ни паталогии переходить на личности и оскорблять их нет. Я констатирую факт. А бросить топик, если автор не врубается и не предпринимает никаких усилий для врубания — единственно правильное решение. Ведь это автору надо разобраться в проблеме, а не мне — вдолбить ему что-то.

Как ты определяешь, что DebugBreak вызывается?

Вопрос про FNDLL : А можно ли из неё, чтобы не трогать интерфейсы, организовать функцию обратного вызова? И если да, то как?

Вопрос некорректный. Что значит организовать функцию обратного вызова. Функцию нельзя организовать, её можно создать/написать, можно вызвать. Можно говорить о ней, думать о ней. Можно перехватить её. Но организовать...

Ладно, FNDLL это надстройка над VB. Нет чего-то такого, что можно в VB но нельзя в FNDLL. Делать на VB функции, которые будут играть роль callback-ов — можно. Делать на VB вызовы таких callback-ов (неважно чьих) — тоже можно.

Но не забывай, что вызыватель и вызываемая функция должны быть в одном процессе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 26.12.2008 (Пт) 20:28

Ладно, FNDLL это надстройка над VB. Нет чего-то такого, что можно в VB но нельзя в FNDLL. Делать на VB функции, которые будут играть роль callback-ов — можно. Делать на VB вызовы таких callback-ов (неважно чьих) — тоже можно.

Но не забывай, что вызыватель и вызываемая функция должны быть в одном процессе.

А как организовать их взаимодействие, если в разных? Давай не абстрактно, а на конкретной теме: вот в библиотеке хук. Как из hookproc организовать передачу данных тому, кто хук ставит?
Артур
 
   

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение tyomitch » 26.12.2008 (Пт) 20:37

Да хоть через трубу.

А если через трубу передать моникер (см. CreateObjrefMoniker), то заработают так милые твоему сердцу объектные вызовы. (Моему тоже.) Прямо из одного процесса в другой.
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 26.12.2008 (Пт) 21:17

Получается, что более-мене стандартного способа нет :) Понятно.

Про моникеры пошёл читать :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение Хакер » 26.12.2008 (Пт) 21:58

Более-менее стандартные способы есть.
Читай теорию:

http://www.rsdn.ru/article/com/apartmnt.xml (апартаменты) (особенно внимательно читать правило #3)
http://www.rsdn.ru/article/com/marsh.xml (маршалинг)
http://www.rsdn.ru/article/com/monikers.xml (моникеры-1)
http://www.rsdn.ru/Forum/Info/FAQ.com.moniker.aspx (моникеры-2)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 26.12.2008 (Пт) 23:41

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

А остальное - это универсальные способы взаимодействия между процессами. Универсальные, а не стандартные для этой ситуации.

Читаю пока, хотя и понимаю довольно мало :oops:

Написал хук на основе твоей FNDLL и примера Gemini, наблюдая за его действием, вполне понял, почему не заработала моя переделка примера tyomitch-а. Сейчас проверю свои предположения :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение Хакер » 26.12.2008 (Пт) 23:49

Кто сказал, что для данной ситуации стандартно, что установившая хук сторона вообще желает знать о том, что происходит на похученной стороне?

То что мы предложили — не универсальные IPC-способы, а стандартные способы функционирования COM.

Что такое "пример Gemeni"?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Глобальный хук на чистом бейсике по идее tyomitch-а

Сообщение arthur2 » 27.12.2008 (Сб) 0:18

Всё, я допеределывал пример tyomitch-а!!!

Хакер писал(а):Кто сказал, что для данной ситуации стандартно, что установившая хук сторона вообще желает знать о том, что происходит на похученной стороне?
Вот я и говорю - мне казалось, что это стандартная ситуация, а те, кто эти хуки разрабатывали, эту ситуацию стандартной не считали :) В общем, я о том же

Хакер писал(а):Что такое "пример Gemeni"

Топик viewtopic.php?f=1&t=36237&start=0&st=0&sk=t&sd=a

Наблюдая за тем, как это работает, я понял, что для нашей задачи рантайм вообще не обязателен! Если, конечно, все использованные библиотеки объявлены в тлб :)
Итак, оба хука:

Взаимодействие между хуком и программой сделал таким способом: программа создаёт окно с замысловатым заголовком и регистрирует собственное сообщение. Внутри библы ищется окно с этим самым замысловатым заголовком, регистрируется то же самое сообщение, и при срабатывании hookproc это сообщение шлётся найденному окну.

Для обоих примеров нужна win32.tlb (после компиляции уже не нужна :)
Вложения
myHook.zip
Глобальный хук клавиатуры на чистом бейсике по идее примера tyomitch-а
(15.35 Кб) Скачиваний: 127
VBHook.zip
Глобальный хук на основе FNDLL от Хакера и примера Gemini
(11.9 Кб) Скачиваний: 128
Артур
 
   

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 94

    TopList