C++实现一个按键精灵

// MMyKey.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
using namespace std;


//#define MAPVK_VK_TO_VSC 0
BYTE scan_code(DWORD pKey)
{
    const DWORD result = MapVirtualKey(pKey, MAPVK_VK_TO_VSC);
    return static_cast<BYTE>(result);
}
void press_key(DWORD pKey)
{
    keybd_event(static_cast<BYTE>(pKey), scan_code(pKey), 0, 0);
}
void release_key(DWORD pKey)
{
    keybd_event(static_cast<BYTE>(pKey), scan_code(pKey), KEYEVENTF_KEYUP, 0);
}
bool isInvalid = true;
// for testing
//#define PRESS(x) press_key(x); std::cout << "Press: " #x << std::endl
//#define RELEASE(x) release_key(x); std::cout << "Release: " #x << std::end
#define PRESS(x) press_key(x);
#define RELEASE(x) release_key(x);
// test


//HHOOK g_ms_hook = 0;
HHOOK g_kb_hook = 0;




LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
{

    //printf((w==WM_KEYDOWN)?"按下%c\n":"抬起%c\n",((PKBDLLHOOKSTRUCT)l)->vkCode);

//F1结束'p'真的是F1

if (((PKBDLLHOOKSTRUCT)l)->vkCode == 'p') {
isInvalid = true;
cout << "不喝" << endl;

}

//F2开始‘q'真的是F2

else if(((PKBDLLHOOKSTRUCT)l)->vkCode == 'q') {
isInvalid = false;
cout << "喝" << endl;
}
    return CallNextHookEx (g_kb_hook, code, w, l);
}
/*LRESULT CALLBACK ms_proc (int code, WPARAM w, LPARAM l)
{
    if(w == WM_LBUTTONDOWN)
        printf("按下左键\n");
    else if(w == WM_LBUTTONUP)
        printf("抬起左键\n");
    else
        printf("x:%d\ty:%d\n",((PMSLLHOOKSTRUCT)l)->pt.x,((PMSLLHOOKSTRUCT)l)->pt.y);
    return CallNextHookEx (g_ms_hook, code, w, l);
}*/
DWORD WINAPI mySwitch(PVOID pvParam) {
MSG msg;
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
        DispatchMessage (&msg);
Sleep(10);  
}
/*while(1) {
cout << "myswitch" << endl;
Sleep(50); 
}*/
return 0;
}
DWORD WINAPI anjian(PVOID pvParam) {
while (1)
    {
    if(!isInvalid) {
        PRESS('7');
        Sleep(10); // hold it for 1/100'th of a second
        RELEASE('7');
        Sleep(10); // wait for a second
        PRESS('8');
        Sleep(10); // hold it for 1/100'th of a second
        RELEASE('8');
Sleep(10); // wait for a second
        PRESS('9');
        Sleep(10); // hold it for 1/100'th of a second
        RELEASE('9');
        Sleep(50); // wait for a second
    }
Sleep(10);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{


g_kb_hook = SetWindowsHookEx (WH_KEYBOARD_LL,kb_proc,GetModuleHandle (NULL),0);
    //g_ms_hook = SetWindowsHookEx (WH_MOUSE_LL, ms_proc,GetModuleHandle(NULL),0);
if (g_kb_hook == NULL)
    {
        printf("安装钩子出错\n");
        return 0;
    }
else {
cout << "/*************************客官你要喝豆浆吗?*********************/" << endl;
cout << "/********************************F2喝****************************/" << endl;
cout << "/*******************************F1不喝****************************/" << endl;
}
    /*HANDLE hThread1 = CreateThread(NULL,       //默认安全级别  
                            0,          //默认栈大小  
                            mySwitch,//线程函数   
                            NULL,       //函数没有参数  
                            0,          //创建后直接运行  
                            NULL);      //线程标识,不需要  
*/
HANDLE hThread2 = CreateThread(NULL,       //默认安全级别  
                            0,          //默认栈大小  
                            anjian,//线程函数   
                            NULL,       //函数没有参数  
                            0,          //创建后直接运行  
                            NULL);      //线程标识,不需要  
MSG msg;
while (GetMessage (&msg, NULL, 0, 0)) {
TranslateMessage (&msg);
        DispatchMessage (&msg);
Sleep(10);  
}


UnhookWindowsHookEx (g_kb_hook);
//CloseHandle(hThread1);
CloseHandle(hThread2);
return 0;
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值