Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Subclassing - опять проблема Добавлено: 01.02.05 12:38  

Автор вопроса:  Demon | Web-сайт: update.sugardas.lt | ICQ: 7026585 
Известен хэндл окна чужой программы. Мне нужно в своей программе отловить WM_KILLFOCUS чужой программы. Покажите пожалуйста пример.

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 01.02.05 13:00
По моему субклассинг тебе не поможет. Только через ловушки.

Ответить

Номер ответа: 2
Автор ответа:
 Demon



ICQ: 7026585 

Вопросов: 18
Ответов: 96
 Web-сайт: update.sugardas.lt
 Профиль | | #2
Добавлено: 01.02.05 13:21
Можешь пояснить конкретно примером?

Ответить

Номер ответа: 3
Автор ответа:
 freeloader



ICQ: 50804884 

Вопросов: 72
Ответов: 642
 Web-сайт: freeloader.folder-pro.net
 Профиль | | #3
Добавлено: 01.02.05 14:44
Windows Хуки, подробно написано
http://wasm.ru/article.php?article=1001024

Ответить

Номер ответа: 4
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 01.02.05 19:36
1. Ты можешь внедрить свой код в адресное пр-во процесса и там уже все это отлавливать...
2. Ты можешь использовать глобальные хуки

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 02.02.05 11:28
Ловушки тоже выполняются в адресном пространстве процесса-цели.

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 02.02.05 12:09
А то как же, просто метод внедрения будет различен, и при целенаправленном подключении библиотеки к процессу, мы загружаемся только 1 процесс, а глобальным хуком - тормозим систему :)

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 02.02.05 12:21
По поводу 1. Cresta показывал какие ключи нужно использовать при компиляции в MASM32. А програмно как это сделать есть код?

Ответить

Номер ответа: 8
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #8
Добавлено: 02.02.05 22:45
Это ты про что, CyRax, я что-то немножко не въезжаю... какие ключи и для чего...

Ответить

Номер ответа: 9
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #9 Добавлено: 03.02.05 10:16
Насколько я знаю, можно сабклассить и другой процесс, только это нужно делать обычной dll, прописав её в реестре. Это не хук.

Ответить

Номер ответа: 10
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #10 Добавлено: 03.02.05 10:20

Subclassing is allowed only within a process. An application cannot subclass a window or class that belongs to another process.
The reason for this rule is simple: Win32 processes have separate address spaces. A window procedure has an address in a particular process. In a different process, that address does not contain the same window procedure. As a result, substituting an address from one process with an address from another process does not provide the desired result, so the 32-bit versions of Windows do not allow this substitution (that is, subclassing from a different process) to take place. The SetWindowLong and SetClassLong functions prevent this type of subclassing. You cannot subclass a window or class that is in another process. End of story.

However, there are ways you can add subclassing functionality to every process. Once you get a function inside the address space of a process, you can subclass anything in that process. There are a few ways to do this. The easiest (and most brutal) approach is to add a dynamic-link library (DLL) name to the following key in the registry:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\ CurrentVersion\Windows\APPINIT_DLLS


This key causes Windows to add your DLL to every process in the system. Your DLL would need some way to wake up after every event that the DLL would want to subclass after. A WH_CBT hook usually does the trick. The DLL can watch for the HCBT_CREATEWND event, then subclass the desired windows. The CTL3D sample application uses the WH_CBT hook to do its subclassing, although it does not contain the registry entry that makes subclassing a part of every process. Applications that want CTL3D can link it into their process.

Another way to add your subclassing code to every process is to use a systemwide hook. When a systemwide hook is called from the context of another process, the system loads the DLL containing the hook into the process. The CTL3D code will work for a systemwide WH_CBT hook in the same way that it works for the current thread's local WH_CBT hook.

The third way to add subclassing code into another process is much more complicated: It involves using the OpenProcess, WriteProcessMemory, and CreateRemoteThread functions to inject code into the other process. I don't recommend this method and won't go into any details on how to do it. For developers who insist on using this method, Jeffrey Richter tells me that he is planning to describe the technique in one of his upcoming Win32 Q&A columns in the Microsoft Systems Journal.

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 03.02.05 10:32
Ну там в пакете MASM32 чтобы внедрить прогу в адресное пространство другого процесса нужно компилировать с определёнными ключами. Спроси у crest'ы.

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 03.02.05 10:35
LamerOnLine,
 А примеры тебе случайно не попадались?

Ответить

Номер ответа: 13
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #13
Добавлено: 03.02.05 11:11
Честно говоря ничего про это не слышал :) И успешно все внедрял :)

Теперь про то что говорит LamerOnLine, ты погляди Рихтера, ты видать про него уже и забыл, там оно написано, но, имхо, это плохой вариант!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам