全局鼠标挂钩导致应用程序崩溃(C ++ / Windows7)

错误道

我正在尝试编写一个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;
}

没有任何例外。该应用程序冻结,但Visual Studio之外的所有内容都不再对鼠标做出反应(如前所述,甚至任务管理器也没有)

我不知道这是否重要,但我在c ++控制台应用程序中使用了dll。

在此先感谢Manuel

错误道

user2802841是正确的,问题是缺少消息循环。在控制台应用程序中使用鼠标挂钩(WH_MOUSEWH_MOUSE_LL)时,必须在应用程序中的某个位置调用getMessagepeekMessage

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Windows7、8中设置Java应用程序的桌面图标?

来自分类Dev

无法在Windows7的Qt5中编译任何应用程序

来自分类Dev

While循环导致Windows Form应用程序崩溃

来自分类Dev

如何在Windows7中将sencha touch应用程序部署到iOS应用程序

来自分类Dev

还原ubuntu引导加载程序后如何还原Windows7?

来自分类Dev

调整操作系统大小后无法休眠或休眠Windows7(c :)

来自分类Dev

Windows默认语言为“未知语言”,导致应用程序在启动时崩溃

来自分类Dev

Delphi XE / Windows7:为什么MCL应用程序中的VCL控件看起来有所不同?

来自分类Dev

我可以在Windows7中创建新用户,以扩展当前管理员用户的所有应用程序数据和设置吗?

来自分类Dev

iOS 7中的应用程序崩溃

来自分类Dev

python_x64 + C library compiled with mingw_x64 on Windows7 Py_InitModule4

来自分类Dev

在Windows7 Py_InitModule4上使用mingw_x64编译的python_x64 + C库

来自分类Dev

在Windows7 Py_InitModule4上使用mingw_x64编译的python_x64 + C库

来自分类Dev

如何在Windows7中拆分系统分区(C :),而不创建动态驱动器?

来自分类Dev

Hadoop命令在Windows7中从c#代码执行时无法正常工作,错误显示:“访问被拒绝”

来自分类Dev

Windows7中的OpenVAS

来自分类Dev

Springboot Docker Windows7

来自分类Dev

在Windows Forms应用程序中挂钩消息循环?

来自分类Dev

在Windows Forms应用程序中挂钩消息循环?

来自分类Dev

C++ Windows:处理应用程序外部崩溃到程序中

来自分类Dev

带有ComCtl32.ocx ListView的VB6表单导致Windows 8上的应用程序崩溃

来自分类Dev

输入法编辑器全局更改-在Windows 7中是每个应用程序

来自分类Dev

通过LAN安装Windows7映像(带有某些已安装的程序),而没有Windows PE的限制,可以吗?

来自分类Dev

从Windows运行而不是从Visual Studio运行时,C#/ C ++应用程序崩溃

来自分类Dev

Windows窗体应用程序C#:添加全局变量:

来自分类Dev

Windows7不与Windows 10共享

来自分类Dev

Windows 7应用程序的启动目录

来自分类Dev

Windows 7更新,在WPF应用程序中导致“已添加项目。在词典中键入:controlbrush”

来自分类Dev

IOs7应用程序在后台崩溃

Related 相关文章

  1. 1

    如何在Windows7、8中设置Java应用程序的桌面图标?

  2. 2

    无法在Windows7的Qt5中编译任何应用程序

  3. 3

    While循环导致Windows Form应用程序崩溃

  4. 4

    如何在Windows7中将sencha touch应用程序部署到iOS应用程序

  5. 5

    还原ubuntu引导加载程序后如何还原Windows7?

  6. 6

    调整操作系统大小后无法休眠或休眠Windows7(c :)

  7. 7

    Windows默认语言为“未知语言”,导致应用程序在启动时崩溃

  8. 8

    Delphi XE / Windows7:为什么MCL应用程序中的VCL控件看起来有所不同?

  9. 9

    我可以在Windows7中创建新用户,以扩展当前管理员用户的所有应用程序数据和设置吗?

  10. 10

    iOS 7中的应用程序崩溃

  11. 11

    python_x64 + C library compiled with mingw_x64 on Windows7 Py_InitModule4

  12. 12

    在Windows7 Py_InitModule4上使用mingw_x64编译的python_x64 + C库

  13. 13

    在Windows7 Py_InitModule4上使用mingw_x64编译的python_x64 + C库

  14. 14

    如何在Windows7中拆分系统分区(C :),而不创建动态驱动器?

  15. 15

    Hadoop命令在Windows7中从c#代码执行时无法正常工作,错误显示:“访问被拒绝”

  16. 16

    Windows7中的OpenVAS

  17. 17

    Springboot Docker Windows7

  18. 18

    在Windows Forms应用程序中挂钩消息循环?

  19. 19

    在Windows Forms应用程序中挂钩消息循环?

  20. 20

    C++ Windows:处理应用程序外部崩溃到程序中

  21. 21

    带有ComCtl32.ocx ListView的VB6表单导致Windows 8上的应用程序崩溃

  22. 22

    输入法编辑器全局更改-在Windows 7中是每个应用程序

  23. 23

    通过LAN安装Windows7映像(带有某些已安装的程序),而没有Windows PE的限制,可以吗?

  24. 24

    从Windows运行而不是从Visual Studio运行时,C#/ C ++应用程序崩溃

  25. 25

    Windows窗体应用程序C#:添加全局变量:

  26. 26

    Windows7不与Windows 10共享

  27. 27

    Windows 7应用程序的启动目录

  28. 28

    Windows 7更新,在WPF应用程序中导致“已添加项目。在词典中键入:controlbrush”

  29. 29

    IOs7应用程序在后台崩溃

热门标签

归档