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

Тема в разделе "MS Visual C++", создана пользователем Empty110, 13 фев 2011.

  1. Empty110

    Empty110 Гость

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

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

    Код (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(), то возвращается "Операция завершена успешно"
     
  2. Empty110

    Empty110 Гость

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

Поделиться этой страницей