Здравствуйте Углубляю знания по хукам. Есть такой вот вопрос. Перехватываю все сообщения в каком то процессе, и передаю их в свой процесс через очередь сообщений для этого создал невидимое окно в основном процессе. В этом же основном процессе есть такой код: Код (Text): HMODULE hLib = LoadLibrary("mydll.dll"); dllFunc = (DLLFUNC) GetProcAddress(hLib, "myFunc"); dllFunc(hWnd); // хендл окна, куда нужно слать перехваченные сообщения, где я их потом обрабатываю. в Dll есть вот такой вот код: Код (Text): #pragma data_seg(".SHDATA") HWND hWndMain = NULL; #pragma data_seg () #pragma comment(linker, "/SECTION:.SHDATA,RWS") void myFunc (HWND hWnd) { hWndMain = hWnd; MessageBox(NULL, "HWND its SET!", "message from dll", MB_OK); }; экспорт, все дела - все настроено и прописано. В принципе, все сообщения ко мне идут нормально, я вижу что я нажимал, но пока проверял на одном лишь калькуляторе. Собственно вопрос: Когда я перед установкой хука вызываю функцию myFunc, что бы она установила нужный мне хендл окна. Я потом запускаю калькулятор и на его поток устанавливаю хук. Нажимаю кнопки на калькуляторе, сообщения приходят ко мне. Если я запущу еще один-два-три новых процесса и на них так же поставлю хук, то мне ж не надо заново устанавливать хендл окна, куда слать сообщения? Так как сегмент является общий для всех экземпляров длл, то изменения, которые я сделал один раз - сразу отобразятся во всех копиях длл? Правильно я понял теорию? Меня просто смущает строка "HWND hWndMain = NULL;" Получается, она выполняется только один раз при первой загрузке длл?
beginner > не надо заново устанавливать хендл окна Достаточно одного раза.. Однако проверка на валидность "хэндла" перед отправкой сообщения не помешает. > изменения, которые я сделал один раз - сразу отобразятся во всех копиях длл? Да. > смущает строка "HWND hWndMain = NULL;" Получается, она выполняется только один раз при первой загрузке длл? Это строка "выполняется" на этапе сборки, т.е. после работы редактора связей dll'ка будет содержать секцию, в которой будет размещена _уже_инициализированная_ переменная.