日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

win32程序测试键盘钩子

發布時間:2023/12/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win32程序测试键盘钩子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// Test_Hook.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include <Windows.h> #include <stdio.h> #include <stdarg.h> #include <ctype.h> #include <WinError.h>// Some global variables HINSTANCE g_Instance; // Handler of current instance HHOOK g_Hook; // Handler of hookBOOL SetHook(); BOOL UnSetHook();// The hook function (will be called by other processes) static LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);// //odprintf -- debug function void __cdecl odprintf(const char* fmt, ...) {char buf[4096], *p = buf;va_list args;va_start(args, fmt);p += vsnprintf_s(p, sizeof(buf), _TRUNCATE, fmt, args);va_end(args);while ( p > buf && isspace(p[-1]) )*--p = '\0';*p++ = '\r';*p++ = '\n';*p = '\0';OutputDebugStringA(buf); //output as ANSI string //OutputDebugString }LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {KBDLLHOOKSTRUCT* pkh = (KBDLLHOOKSTRUCT*)lParam;//HC_ACTION: wParam 和lParam參數包含了鍵盤按鍵消息if (nCode == HC_ACTION) {if (::GetAsyncKeyState('1') & 0x8000){odprintf("111111111111111111");}//判斷函數調用時指定虛擬鍵的狀態//BOOL bCtrlKey = ::GetAsyncKeyState(VK_CONTROL) & 0x8000;BOOL bCtrlKey = ::GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);if ((pkh->vkCode == VK_ESCAPE && bCtrlKey) || // Ctrl+Esc 開始菜單(pkh->vkCode == VK_TAB && pkh->flags & LLKHF_ALTDOWN) || // Alt+TAB 屏幕切換菜單(pkh->vkCode == VK_ESCAPE && pkh->flags & LLKHF_ALTDOWN) || // Alt+Esc 屏幕切換 (pkh->vkCode == VK_LWIN || pkh->vkCode==VK_RWIN) // 左右Windows鍵) { odprintf("ok...i'am come here!"); //這里會出現兩次, 因為return 1; }}// Call next hook in chainreturn ::CallNextHookEx(g_Hook, nCode, wParam, lParam); }BOOL SetHook() {if (g_Instance || g_Hook) // Already hooked!return TRUE;g_Instance = (HINSTANCE)::GetModuleHandle(NULL);g_Hook = ::SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, g_Instance, 0);if (!g_Hook){odprintf("SetHook error, error code=%ld", ::GetLastError()); //error codereturn FALSE;}return TRUE; // Hook has been created correctly }BOOL UnSetHook() {if (g_Hook) { // Check if hook handler is valid::UnhookWindowsHookEx(g_Hook); // Unhook is done hereg_Hook = NULL; // Remove hook handler to avoid to use it again}return TRUE; // Hook has been removed }int _tmain(int argc, _TCHAR* argv[]) {odprintf("Test of KeyboardProc, starting...");if (!SetHook())return -1;MSG msg;while(::GetMessage(&msg, NULL, 0, 0) > 0){TranslateMessage(&msg);DispatchMessage(&msg);}//clean:UnSetHook();return 0; }

總結

以上是生活随笔為你收集整理的win32程序测试键盘钩子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。