资源简介

Qt实现全局钩子,拦截鼠标键盘消息,修改消息,在Qt 4.86上编译通过,适合学习,分享快乐,谢谢。

资源截图

代码片段和文件信息

#include 
#include 
#include 

HHOOK keyHook=NULL;
HHOOK mouseHook=NULL;
bool fire=false;
bool pressGun=false;
void unHook();

LRESULT CALLBACK keyProc(int nCodeWPARAM wParamLPARAM 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(65000);
        }
    }else{
        if(pkbhs->vkCode==VK_F12)
        {
            fire=false;
//            keybd_event(650KEYEVENTF_KEYUP0);
            if(pressGun)
            {
                pressGun=false;
                mouse_event (MOUSEEVENTF_LEFTUP | MOUSEEVENTF_MOVE  0 -30 0 0 );
            }
        }

    }

    return CallNextHookEx(keyHook nCode wParam lParam );



}

LRESULT CALLBACK mouseProc(int nCodeWPARAM wParamLPARAM 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_LLkeyProcGetModuleHandle(NULL)0);
    mouseHook =SetWindowsHookEx( WH_MOUSE_LLmouseProcGetModuleHandle(NULL)0);
}

int main(int argc char *argv[])
{
    QCoreApplication a(argc argv);

    printf(“Hello Qt Hook begin\n“);

    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     175847  2017-10-11 15:36  keyHook\debug\keyHook.exe

     文件     105390  2017-10-11 15:36  keyHook\debug\main.o

     文件        327  2017-10-11 10:14  keyHook\keyHook.pro

     文件      18440  2017-10-12 08:14  keyHook\keyHook.pro.user

     文件      17640  2014-06-03 23:19  keyHook\keyHook.pro.user.3.0-pre1

     文件       3293  2017-10-11 15:36  keyHook\main.cpp

     文件       6380  2017-10-11 15:36  keyHook\Makefile

     文件       5008  2017-10-11 15:36  keyHook\Makefile.Debug

     文件       5054  2017-10-11 15:36  keyHook\Makefile.Release

     目录          0  2017-10-11 15:36  keyHook\debug

     目录          0  2017-10-11 09:25  keyHook\release

     目录          0  2017-10-12 08:14  keyHook

----------- ---------  ---------- -----  ----

               337379                    12


评论

共有 条评论