глобальный хук мыши вызывает сбой приложения (c ++ / windows7)

0

Я пытаюсь написать dll, чтобы ввести глобальный крючок мыши в Windows 7. Он в основном работает, но через несколько секунд (может быть, 10-15) все приложение просто зависает, а мышь не работает вне Visual Studio (я все еще могу остановить приложение через vs, но ничего больше (например, использовать диспетчер задач для этого)).

Я искал какое-то время, но я не могу найти ответ на свою проблему. Я сократил свою dll до минимума (установите крючок мыши, ничего не делая с ним), но все равно это произойдет.

заголовок

#ifndef MOUSE_HOOK_WINDOWS_H
#define MOUSE_HOOK_WINDOWS_H

#if defined DLL_EXPORT
    #define DECLDIR __declspec(dllexport)
#else
    #define DECLDIR __declspec(dllimport)
#endif

#pragma data_seg(".mouseHookSharedMemory")
    HHOOK g_hMouseHook = NULL;
    HINSTANCE g_hInst = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.mouseHookSharedMemory,RWS")

extern "C"
{
    DECLDIR BOOL InstallHook();
    DECLDIR BOOL UninstallHook();

    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
}

#endif

CPP

#include <Windows.h>
#include "MouseHookWindows.h"

#include <sstream>

extern "C"
{
    DECLDIR BOOL InstallHook()
    {
        if(g_hMouseHook != NULL)
        {
            return true;
        }

        g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, g_hInst, 0);
        if(g_hMouseHook == NULL)
        {
            return false;
        }

        return true;
    }

    DECLDIR BOOL UninstallHook()
    {
        if(g_hMouseHook != NULL)
        {
            UnhookWindowsHookEx(g_hMouseHook);
            g_hMouseHook = NULL;
        }  

        return true;
    }

    LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
        return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);
    }
}

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD reason, LPVOID reserved)
{
    g_hInst = hInstance;

    return true;
}

Никакого исключения или чего-то еще. Приложение зависает, и все, кроме визуальной студии, больше не реагирует на мышь (как говорилось ранее, даже диспетчер задач)

Я не знаю, важно ли это, но я использую dll в консольном приложении c++.

Заранее спасибо Мануэль

  • 0
    У процесса, который устанавливает ловушку, должен быть рабочий цикл сообщений, или он может заморозить все подключенные приложения, может быть, это проблема?
  • 0
    Ваш DllMain () является borken, он устанавливает g_hMouseHook обратно в NULL. Не игнорируйте причину .
Показать ещё 4 комментария
Теги:
windows-7
visual-studio-2012
crash

1 ответ

0
Лучший ответ

user2802841 был прав, проблема заключалась в отсутствии пропущенного цикла сообщений. При использовании крючка мыши (WH_MOUSE или WH_MOUSE_LL) в консольном приложении getMessage или peekMessage должны быть вызваны где-то в приложении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню