用C++写一个键盘函数控制函数
来源:互联网 发布:种植牙的利与弊 知乎 编辑:程序博客网 时间:2024/06/07 10:02
#define _WIN32_WINNT 0x0400#pragma comment( lib, "user32.lib" )#include <windows.h>#include <stdio.h>HHOOK hKeyboardHook;__declspec(dllexport) LRESULT CALLBACK KeyboardEvent (int nCode, WPARAM wParam, LPARAM lParam){ DWORD SHIFT_key=0; DWORD CTRL_key=0; DWORD ALT_key=0; if ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN))) { KBDLLHOOKSTRUCT hooked_key = *((KBDLLHOOKSTRUCT*)lParam); DWORD dwMsg = 1; dwMsg += hooked_key.scanCode << 16; dwMsg += hooked_key.flags << 24; char lpszKeyName[1024] = {0}; //lpszKeyName[0] = '['; int i = GetKeyNameText(dwMsg, (lpszKeyName+1),0xFF) + 1; //lpszKeyName[i] = ']'; int key = hooked_key.vkCode; SHIFT_key = GetAsyncKeyState(VK_SHIFT); CTRL_key = GetAsyncKeyState(VK_CONTROL); ALT_key = GetAsyncKeyState(VK_MENU); if (key >= 'A' && key <= 'Z') { if (GetAsyncKeyState(VK_SHIFT)>= 0) key +=32; if (CTRL_key !=0 && key == 'y' ) { MessageBox(NULL, "CTRL-y was pressed\nLaunch your app here", "H O T K E Y", MB_OK); CTRL_key=0; } if (CTRL_key !=0 && key == 'q' ) { MessageBox(NULL, "Shutting down", "H O T K E Y", MB_OK); PostQuitMessage(0); } //printf("key = %c\n", key); printf("ha ha, I intercepted your [%c] and changed it to [%c]\n", key, key+1); SHIFT_key = 0; CTRL_key = 0; ALT_key = 0; } //printf("lpszKeyName = %s\n", lpszKeyName ); // printf("%s", lpszKeyName ); } return CallNextHookEx(hKeyboardHook, nCode,wParam,lParam);}void MessageLoop(){ MSG message; while (GetMessage(&message,NULL,0,0)) { TranslateMessage( &message ); DispatchMessage( &message ); }}DWORD WINAPI my_HotKey(LPVOID lpParm){ HINSTANCE hInstance = GetModuleHandle(NULL); if (!hInstance) hInstance = LoadLibrary((LPCSTR) lpParm); if (!hInstance) return 1; hKeyboardHook = SetWindowsHookEx ( WH_KEYBOARD_LL, (HOOKPROC) KeyboardEvent, hInstance, NULL ); MessageLoop(); UnhookWindowsHookEx(hKeyboardHook); return 0;}int main(int argc, char** argv){ HANDLE hThread; DWORD dwThread; hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) my_HotKey, (LPVOID) argv[0], NULL, &dwThread); //ShowWindow(FindWindowA("ConsoleWindowClass", NULL), false); if (hThread) return WaitForSingleObject(hThread,INFINITE); else return 1;}
- 用C++写一个键盘函数控制函数
- c函数-写一个字符
- 一个女生用C语言写的爱情函数
- 一个女生用C语言写的爱情函数
- 一个女生用C语言写的爱情函数
- 一个女工程师用C语言写的爱情函数
- 一个写log的函数 log_func.c
- 一个女生写的c 函数
- 一个写log的函数 log_func.c .
- 自己写一个strcmp函数(C++)
- c语言:用fgetc函数从键盘逐个输入字符,用fputc函数写到磁盘文件
- 写一个atoi函数
- 写一个ServiceMain函数
- C函数指针妙用,用c语言写一个简易类
- 写一个简单的可变参数的C函数
- c语言写了一个简单的正弦波函数
- c语言写了一个简单的正弦波函数
- 写一个简单的可变参数的C函数
- 【OpenStack】OpenStack keystone的理解 2
- sql 2008 安装失败 mof语法错误 处理
- c++ primer 4 中10.6节算法改正
- DataGridViewRow 改变奇数行颜色
- cudaGraphicsGLRegisterBuffer与cudaGraphicsGLRegisterImage的对比
- 用C++写一个键盘函数控制函数
- 《C语言深度剖析》笔记之关键字篇
- DataGridView列排序
- MFC 选择路径
- 轻松掌握WebService技术后台—Soap图解法
- 基础知识1
- 2010VS连接2008sql数据库
- 四个程序员的一天
- unityios开发--NGUI屏幕自适应