简单的 windows外挂程序

本文介绍了如何在Windows环境下编写外挂程序,以拦截并处理其他程序的鼠标和键盘事件。通过设置低级键盘和鼠标钩子,实现了在游戏中自动执行重复动作的功能。详细步骤包括定义相关结构、处理函数、消息处理及钩子的安装。最后,提供了一个简单的示例程序,演示了定时快速点击指定坐标的外挂功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在windows应用中,有时候需要拦截送给别的程序的鼠标和键盘事件,这时候就可以使用外挂。外挂程序可以应用于一些游戏中,用来重复一些简单机械的动作。下面我来讲讲如何实现这种技术。

首先,包含下列 code:

#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <winuser.h>
#include <winable.h>
//#include <windows.h>


#define WH_KEYBOARD_LL     13
#define WH_MOUSE_LL        14
typedef struct tagKBDLLHOOKSTRUCT {
    DWORD   vkCode;
    DWORD   scanCode;
    DWORD   flags;
    DWORD   time;
    DWORD   dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

#pragma comment( lib, "user32.lib" )


这部分程序把windows没有公开的结构和macro进行定义。


第二步,定义拦截窗口以及处理函数:

HHOOK hMouseHook,hKbdHook;
CWnd *pWnd;
HKL dwhkl;
__declspec(dllexport) LRESULT CALLBACK MouseEvent (int nCode, WPARAM wParam, LPARAM lParam)
{
    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    if (pMouseStruct != NULL)
{
        //TRACE("Mouse position X = %d  Mouse Position Y = %d\n", pMouseStruct->pt.x,pMouseStruct->pt.y);

pWnd->SendMessage(WM_CAPTURE_MOUSE_MSG,pMouseStruct->pt.x,pMouseStruct->pt.y);
}
    return CallNextHookEx(hMouseHook,nCode,wParam,lParam);
}


__declspec(dllexport) LRESULT CALLBACK KeyboardEvent (int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT* pKbdStruct=(KBDLLHOOKSTRUCT*)lParam;
if(pKbdStruct!=NULL)
{
//TRACE("keyboard:%04x\n",pKbdStruct->vkCode);
pWnd->SendMessage(WM_CAPTURE_KEYBOARD_MSG,pKbdStruct->vkCode,(long)pKbdStruct);
}
    return CallNextHookEx(hKbdHook,nCode,wParam,lParam);
}

其中,dwhkl为硬件键盘布局。


第三步,加入对鼠标和键盘消息的处理函数:

.h

afx_msg void OnMessageMouseCapture(WPARAM,LPARAM);
afx_msg void OnMessageKeyboardCapture(WPARAM,LPARAM);

.cpp

ON_MESSAGE(WM_CAPTURE_MOUSE_MSG,OnMessageMouseCapture)
ON_MESSAGE(WM_CAPTURE_KEYBOARD_MSG,OnMessageKeyboardCapture)

并按自己的需要实现这两个函数。


第四步:在程序或者窗口初始化时,初始化键盘外挂。

dwhkl=LoadKeyboardLayout("00000409",KLF_ACTIVATE);
hMouseHook = SetWindowsHookEx (  
        WH_MOUSE_LL,
        (HOOKPROC) MouseEvent,  
        AfxGetInstanceHandle(),                 
        NULL                       
        );

hKbdHook= SetWindowsHookEx (  
        WH_KEYBOARD_LL,
        (HOOKPROC) KeyboardEvent,  
        AfxGetInstanceHandle(),                 
        NULL                       
        );


我写了一个简单的示范程序,用于定时快速的点击用户指定的一个坐标,感兴趣的同学可以下载,简单界面如附件。

(不好意思,不知道怎么attach源程序,试着用了代码片,不知道能不能行,<script src="https://code.youkuaiyun.com/snippets/472775.js"></script>)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值