E
Empty110
Извиняюсь тему можно удалить, ошибка найдена, две ловушки создаются
Есть следующий код библиотеки создания ловушки:
программа использующая эту Dll последовательно создает две ловушки
вторая ловушки не создается, то есть hHook2 = NULL
если поменять порядок создания ловушек, то уже hHook = NULL
почему так?
в MSDN и в инете ничего об этом не нашел
что интересно если воспользоваться GetLastError(), то возвращается "Операция завершена успешно"
Есть следующий код библиотеки создания ловушки:
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(), то возвращается "Операция завершена успешно"