Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SendMessage из DLL своей программе 
:(
    Опции темы
Domoffou
Дата 6.7.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.6.2008
Где: Северная Венеция

Репутация: нет
Всего: нет



Добрый день.
В DLL создал хук на активные окна.
Когда окно сменилось - DLL отправляет SendMessage MYMESSAGE основному ехе.
Программа работает так:
1. Овновной EXE лезет в хуковскую DLL и записывает в ее глобальное значение свой хэндл.
2. устанавливает хук
3. при активации окна сендмессадж глобальному хэндлу

Проблема в том, что когда юзер работает с овновным моим ЕХЕ - то все отправляется, а вот когда переключение окон ведется
не в моей программе (например между нотепадом и пэинтом), то в логах вижу, что Handle пустует, т.е. сообщения не доходят до моей проги (хотя отправляются).

Вот основные функции библиотеки:
Код

var
  MY_MESSAGE: Cardinal;
  ActiveWindowHook: HWND;

function WindowActivated(ncode: Integer; wPARAM: wParam; lPARAM: lParam): Longint; stdcall;
begin
  if nCode = HCBT_ACTIVATE then
    begin
      //MyAppWnd := FindWindow('TForm1', 'Form1');
      SendMessage(MyAppWnd, MY_MESSAGE, wparam, lparam);
      result:=0;
    end
  else Result:= CallNextHookEx(ActiveWindowHook, nCode, wPARAM, lPARAM);
  
end;

procedure I_AM_MAIN(BHandle: HWND);
begin
  MyAppWnd:= BHandle;
end;


procedure SetHook();stdCall; export;
begin
  ActiveWindowHook := SetWindowsHookEx(WH_CBT,@WindowActivated,hInstance,0);
end;

и соответственно RegisterWindowMessage в библиотеке и в программе.

+ ко всему, мне удалось решить проблему спомощью MyAppWnd := FindWindow('TForm1', 'Form1');
но это не выход, т.к. каждый раз искать свое окно не вариант, ведь функцию написал и она работает с другими хуками :(

Это сообщение отредактировал(а) Domoffou - 6.7.2008, 14:03
PM MAIL ICQ   Вверх
ama_kid
Дата 6.7.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Как вариант - перед установкой хука сохраняй хендл основного окна где-нибудь в реестре, а инициализацию хендла MyAppWnd в DLL-ке делай по DLL_PROCESS_ATTACH чтением этого значения из реестра... У мну всегда работало... 


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Domoffou
Дата 7.7.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.6.2008
Где: Северная Венеция

Репутация: нет
Всего: нет



Реестр не всегда приятен, в плане если туда залезть, юзерам покажется это подозрительно.
Оставил по FindWindow.
PM MAIL ICQ   Вверх
dumb
Дата 8.7.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



PM MAIL   Вверх
CodeMonkey
Дата 8.7.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 16
Всего: 89



Посмотрите http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=548
У вас ошибка в том, что вы не передаёте Handle между различными процессами. Вы ставите его только в одном процессе, но не передаёте другим.
Решается это использованием средств IPC. См. мою ссылку или ссылки dump выше.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0473 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.