Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Hook (http://forum.oszone.net/showthread.php?t=141794)

ganselo 03-06-2009 19:32 1134183

Hook
 
Делаю dll с hook'ом. Hook отслеживает появление нового окна (WH_CBT). Собственно хук работает (появление окна отслеживается), а как сообщить вызывающей программе о появлении нового окна?

DillerInc 04-06-2009 12:07 1134744

ganselo, а если сделать через объекты синхронизации - события,например?
Основное приложение | библиотека
CreateEvent -> WaitForSingleObject | OpenEvent -> SetEvent

ganselo 04-06-2009 18:12 1135104

Цитата:

Цитата DillerInc
DillerInc »

Решил проблему так:
В dll создал переменную флаг
Код:

bool flag = false;
И две функции
Код:

bool getFlag()
{
      return flag;
}
и
void ok()
{
      flag = false;
}

Если в dll хук сработал (т.е создалось какое то окно), то flag = true. А в приложении, в таймере вызываю функцию getFlag(), чтобы узнать, что появилась новое окно. Если она возвратила true, то я совершаю нужные мне действия и сообщаю dll о том, что приложение узнало о появлении нового окна, т.е вызываю функцию ok();

Но думаю эта не самый лучший вариант.

А насчет
Цитата:

Цитата DillerInc
а если сделать через объекты синхронизации - события,например? »

можно попробывать...

DillerInc 04-06-2009 22:23 1135299

ganselo, если у вас оконное приложение,то можно из библиотеки послать какое-нибудь сообщение основному приложению,которое в свою очередь получит это сообщение через свою оконную процедуру.Если же окон нет,то тогда можно создать дополнительный поток,который и будет ждать события.Тут,я думаю,больше зависит от ваших условий в программе.

ganselo 05-06-2009 15:20 1135795

Цитата:

Цитата DillerInc
если у вас оконное приложение »

Да оконное.
Цитата:

Цитата DillerInc
то можно из библиотеки послать какое-нибудь сообщение основному приложению »

Например какое сообщение и как его послать основному?

ganselo 05-06-2009 17:32 1135918

Цитата:

Цитата DillerInc
DillerInc »

Спасибо за помощь. Всё получилось.


Время: 21:00.

Время: 21:00.
© OSzone.net 2001-