zoukankan      html  css  js  c++  java
  • 消息钩子

    // 01 消息钩子截获按键信息.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include"..1 消息钩子dll消息钩子dll.h"
    #pragma  comment(lib,"..\Debug\01 消息钩子dll.lib")
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        InstallHook();
        system("pause");
        UnstallHook();
        return 0;
    }
    // 01 消息钩子dll.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include "消息钩子dll.h"
    
    HHOOK  g_Hook = 0;
    LRESULT CALLBACK KeyboardProc(
        int code,           // 消息类型
        WPARAM wParam,      // 虚拟码
        LPARAM lParam) {      // 按键信息
        // 判断是否wParam与lParam都有键盘消息,是的话则执行打印操作
        if (code == HC_ACTION){
            // 将256个虚拟键的状态拷贝到指定的缓冲区中,如果成功则继续
            BYTE KeyState[256] = { 0 };
            if (GetKeyboardState(KeyState)) {
                // 得到第16–23位,键盘虚拟码
                LONG  KeyInfo = lParam;
                UINT  keyCode = (KeyInfo >> 16) & 0x00ff;
                WCHAR wKeyCode = 0;
                ToAscii((UINT)wParam, keyCode, KeyState, (LPWORD)&wKeyCode, 0);
                // 将其打印出来
                WCHAR szInfo[512] = { 0 };
    
                swprintf_s(szInfo, _countof(szInfo), L"Hook%c", (char)wKeyCode);
    
                OutputDebugString(szInfo);
                return 0;
            }
        }
    
        return CallNextHookEx(g_Hook, code, wParam, lParam);
    }
    
    extern "C" _declspec(dllexport)  BOOL    InstallHook()
    {
        if (g_Hook == 0)
        {
            g_Hook =
                SetWindowsHookEx(WH_KEYBOARD,
                KeyboardProc,
                GetModuleHandleA("01 消息钩子dll.dll"),
                0);
            return TRUE;
        }
        return FALSE;
    }
    
    extern "C" _declspec(dllexport) BOOL UnstallHook()
    {
        if (g_Hook != 0)
        {
            UnhookWindowsHookEx(g_Hook);
            g_Hook = 0;
            return TRUE;
        }
        return FALSE;
    }
  • 相关阅读:
    c++类的知识点(1)
    并查集经典例题分析
    并查集
    bfs-迷宫
    出栈次序--数学归纳法--蓝桥
    九宫重排
    Tomcat详解
    寒假日记-第三天
    寒假日记-第二天(MySQL语句)
    Java学期总结
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5342399.html
Copyright © 2011-2022 走看看