Связь между EXE и Global Hook DLL - PullRequest
0 голосов
/ 09 июля 2010

У меня есть приложение, загружающее библиотеку, содержащую функцию обратного вызова для глобальной ловушки GetMessage.Я получаю процедуру и передаю ее в SetWindowsHookEx, которая будет установлена ​​для всех запущенных потоков.

Проблема в том, что я хочу, чтобы функция DLL при определенных обстоятельствах, таких как нажатие клавиши, сообщала исходному приложению о завершении работывсе приложения.Единственный способ, о котором я могу подумать, - это создать окно в приложении и заставить DLL вызывать SendMessage (HWND_BROADCAST) для отправки пользовательского сообщения, которое приложение распознает для выхода.Но я хочу убедиться, что это лучший способ сделать это?

Также возникает другая проблема.Допустим, я хочу, чтобы DLL выполняла однократную инициализацию, такую ​​как открытие файла.Если я делаю это в DllMain, то он, кажется, делает это несколько раз, потому что он загружается несколько раз.Это исправление для этого?Спасибо.

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Если ваша DLL работает внутри приложения, есть много способов определить, в каком EXE-файле я сейчас работаю.Например, можно использовать GetModuleFileName(NULL, ...), чтобы получить путь к исполняемому файлу текущего процесса.Другой способ: можно проверить, что в текущем процессе существует некоторый ресурс, такой как ресурс версии, с некоторыми специальными значениями, например FileDescription (см. http://msdn.microsoft.com/en-us/library/ms646981.aspx и http://msdn.microsoft.com/en-us/library/ms647464.aspx).

нет инициализации для каждого потока (например, TlsAlloc и т. д.). Хорошо бы вызвать DisableThreadLibraryCalls (см. http://msdn.microsoft.com/en-us/library/ms682579.aspx и http://msdn.microsoft.com/en-us/library/ms682596.aspx) внутри DllMain, второй параметр - DLL_PROCESS_ATTACH.

1 голос
/ 09 июля 2010

Попробуйте использовать WinAPI CreateEvent function

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...