Очередь сообщений приложения
От: svaft Ниоткуда  
Дата: 25.04.01 11:03
Оценка:
Кто нибудь знает как получить доступ к очереди сообщений для конкретного приложения?
Или есть ли какая нибудь возможность перехватить сообщение чужого приложения?
Re: Очередь сообщений приложения
От: Ilich  
Дата: 25.04.01 12:10
Оценка:
Здравствуйте svaft, 25.04.2001 05:03:06 вы писали:

>Кто нибудь знает как получить доступ к очереди сообщений для конкретного приложения?

>Или есть ли какая нибудь возможность перехватить сообщение чужого приложения?

В статьях — Базовые сервисы — хуки. Вроде все неплохо описано. Иного способа не знаю.
Re: Очередь сообщений приложения
От: Riziy  
Дата: 27.04.01 07:00
Оценка:
Здравствуйте svaft, 25.04.2001 05:03:06 вы писали:

>Кто нибудь знает как получить доступ к очереди сообщений для конкретного приложения?

>Или есть ли какая нибудь возможность перехватить сообщение чужого приложения?

В Windows есть механизм перехвата сообщений — Hook'и. Работает это приблизительно так: создается и регистрируется функция перехвата (я её делал в DLL). После этого, пред тем, как сообщение попадёт в очередь сообщений приложения (любого, работающего в системе), система будет вызывать функцию — перехватчик, которая может проанализировать сообщение и много чего с ним сделать.
Посмотри в API'шном help'е функции
SetWindowsHookEx
CallNextHookEx
UnhookWindowsHookEx
Пара подводных камней:
1. Функция — перехватчик работает в адресном пространстве, отличном от адресного пространства приложения, установившего перехват. Поэтому, если есть в DLL с перехватчиком глобальные переменные, то они будут РАЗНЫЕ в приложении, использующем DLL, и в функции перехвата при вызове её при перехвате.
2. DLL с функцией перехвата должна лежать в системном каталоге Windows. (при регистрации система не запоминает расположение файла *DLL. Если DLL не найдена, то перехват не будет работать)
Re: Очередь сообщений приложения
От: Leva  
Дата: 13.05.01 10:58
Оценка:
Здравствуйте svaft, вы писали:

S>Кто нибудь знает как получить доступ к очереди сообщений для конкретного приложения?

S>Или есть ли какая нибудь возможность перехватить сообщение чужого приложения?

Для перехвата сообщений воспользуйтесь функцией SetWindowsHookEx(), с типом ловушки WH_GETMESSAGE. Я думаю, что MSDN достаточно неплохо освещает использование ловушек, но если нужно, я могу прислать пример
Re[2]: Очередь сообщений приложения
От: Корнилов Григорий Петрович http://kornilow.newmail.ru
Дата: 15.05.01 07:06
Оценка:
Здравствуйте Riziy, вы писали:

R>2. DLL с функцией перехвата должна лежать в системном каталоге Windows. (при регистрации система не запоминает расположение файла *DLL. Если DLL не найдена, то перехват не будет работать)


А это точно ?
Re[3]: Очередь сообщений приложения
От: Riziy  
Дата: 18.05.01 06:39
Оценка:
Здравствуйте Корнилов Григорий Петрович, вы писали:

КГП>Здравствуйте Riziy, вы писали:


R>>2. DLL с функцией перехвата должна лежать в системном каталоге Windows. (при регистрации система не запоминает расположение файла *DLL. Если DLL не найдена, то перехват не будет работать)


КГП>А это точно ?


Это не совсем так.
Экспериментально было установлено следующее: прехваты игнорировались, пока не были указаны в переменной окружения PATH
путь к DLL с функцией перехвата и пути ко всем DLL, которые используются в DLL с функцией перехвата (неявный link, без вызова LoadLibrary ). Отсюда был сделан вывод, что система должна уметь находить все функции (DLL), которые используются при перехвате (в моём случае это DLL с функцией перехвата и DLL с runtime library Borland C++ 5), то есть эти DLL должны быть либо в системном каталоге, либо в каталоге Windows, либо в каталоге, указанном в PATH.

Прошу учесть, что этим я занимался полтора года тому назад и кое-что подзабыл.
Re[4]: Очередь сообщений приложения
От: Deniz  
Дата: 20.05.01 18:39
Оценка:
Здравствуйте Riziy, вы писали:

R>Это не совсем так.

R>Экспериментально было установлено следующее: прехваты игнорировались, пока не были указаны в переменной окружения PATH
R>путь к DLL с функцией перехвата и пути ко всем DLL, которые используются в DLL с функцией перехвата (неявный link, без вызова LoadLibrary ). Отсюда был сделан вывод, что система должна уметь находить все функции (DLL), которые используются при перехвате (в моём случае это DLL с функцией перехвата и DLL с runtime library Borland C++ 5), то есть эти DLL должны быть либо в системном каталоге, либо в каталоге Windows, либо в каталоге, указанном в PATH.

R>Прошу учесть, что этим я занимался полтора года тому назад и кое-что подзабыл.


imho для данного случая dll может лежать и в каталоге приложения, устанавливающего хук (по крайней мере у меня так работало). А по поводу поиска dll, то он осуществляется следующим образом: каталог, содержащий ЕХЕ файл -> текущий каталог процесса -> системный каталог windows -> основной каталог windows -> каталоги прописанные в path.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.