Неудается создать две ловушки из одной Dll

  • Автор темы Empty110
  • Дата начала
E

Empty110

#1
Извиняюсь тему можно удалить, ошибка найдена, две ловушки создаются

Есть следующий код библиотеки создания ловушки:

C++:
#include "stdafx.h"

#pragma bss_seg("shared")
HHOOK hHook;
HHOOK hHookWndProc;
HWND hWindow;
HINSTANCE hInstance;
#pragma data_seg()
#pragma comment(linker, "/section:shared,rws")

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
hInstance = (HINSTANCE)hModule;
return TRUE;
};

LRESULT HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hHook,nCode,wParam,lParam);
};

// код обработки ловушки

return CallNextHookEx(hHook,nCode,wParam,lParam);
};

LRESULT HookProcWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
{
return CallNextHookEx(hHookWndProc,nCode,wParam,lParam);
};

// код обработки ловушки	

return CallNextHookEx(hHookWndProc,nCode,wParam,lParam);
};

__declspec(dllexport) int __stdcall InstMouseHookEx(HWND lhWnd)
{
hWindow = lhWnd;
hHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)&HookProc,hInstance,0);
return (int)hHook;
};

__declspec(dllexport) int __stdcall InstWndProcHookEx(HWND lhWnd)
{
hWindow = lhWnd;
hHookWndProc = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)&HookProcWndProc,hInstance,0);
return (int)hHookWndProc;
};

__declspec(dllexport) void __stdcall UninstMouseHookEx()
{
UnhookWindowsHookEx(hHook);
return;
};

__declspec(dllexport) void __stdcall UninstWndProcHookEx()
{
UnhookWindowsHookEx(hHookWndProc);
return;
};
программа использующая эту Dll последовательно создает две ловушки

C++:
hHook1 = (int)InstMouseHookEx(hDlg);
hHook2 = (int)InstWndProcHookEx(hDlg, lhwnd);
вторая ловушки не создается, то есть hHook2 = NULL
если поменять порядок создания ловушек, то уже hHook = NULL
почему так?
в MSDN и в инете ничего об этом не нашел
что интересно если воспользоваться GetLastError(), то возвращается "Операция завершена успешно"
 
E

Empty110

#2
тема снова открыта :please:
у меня получается создать последовательно сразу две разные ловушки, но не получается следующее создать одну ловушку во время загрузки программы по сообщению WM_INITDIALOG (из диалогового окна) (ловушка создается) и одну по нажатии кнопки в диалоговом окне (ловушка не создается)