#include <QCoreApplication>
#include <stdio.h>
#include <windows.h>
HHOOK keyHook=NULL;
HHOOK mouseHook=NULL;
bool fire=false;
bool pressGun=false;
void unHook();
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
if(pkbhs->vkCode==VK_ESCAPE)
{
unHook();
}
// pkbhs->flags 说明
// 0 指定的键是否扩展的键,如功能键或数字键盘上的键。值为 1,如果键是一个扩展的密钥 ;否则,它是 0。
// 1-3 保留。
// 4 指定是否已注入该事件。值为 1,如果该事件被注射 ;否则,它是 0。
// 5 上下文代码。值为 1,如果按下 ALT 键 ;否则,它是 0。
// 6 保留。
// 7 过渡状态。如果它被释放,则值为 0,如果按下的键和 1。
bool bPress = (0x1 & (pkbhs->flags >> 7));
// printf("KeyCode:%ld\nFlag :%ld\nPress :%ld\n", pkbhs->vkCode, pkbhs->flags, bPress);
if(!bPress){
if(pkbhs->vkCode==VK_F12)
{
fire=true;
// keybd_event(65,0,0,0);
}
}else{
if(pkbhs->vkCode==VK_F12)
{
fire=false;
// keybd_event(65,0,KEYEVENTF_KEYUP,0);
if(pressGun)
{
pressGun=false;
mouse_event (MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE , 0, -30, 0, 0 );
}
}
}
return CallNextHookEx(keyHook, nCode, wParam, lParam );
}
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{
MSLLHOOKSTRUCT *pkbhs = (MSLLHOOKSTRUCT *) lParam;
MSLLHOOKSTRUCT *pkbhs_tmp=(MSLLHOOKSTRUCT *) lParam;
if (nCode< 0){
return CallNextHookEx(mouseHook, nCode, wParam, lParam);
}
switch(wParam)
{
case WM_LBUTTONDOWN:
if(fire)
{
if(!pressGun){
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE , 0, 3, 0, 0 );
pressGun=true;
}else
{
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE , 0, 0, 0, 0 );
}
return 1;
}
break;
case WM_LBUTTONUP:
if(fire)
{
mouse_event (MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE , 0, 0, 0, 0 );
return 1;
}
break;
case WM_MOUSEMOVE:
// if(fire)
// {
// printf("X: %ld\n",pkbhs->pt.y);
// pkbhs->pt.y+=100;
// printf("X: %ld\n",pkbhs_tmp->pt.y);
// }
break;
}
return CallNextHookEx(mouseHook, nCode, wParam, lParam );
}
void unHook()
{
UnhookWindowsHookEx(keyHook);
UnhookWindowsHookEx(mouseHook);
}
void setHook()
{
keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0);
mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0);
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
printf("Hello Qt Hook begin\n");
setHook();
return a.exec();
}