游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1889|回复: 2

画笔程序外挂运行不了

[复制链接]

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2014-6-23 15:09:02 | 显示全部楼层 |阅读模式
最近自学了钩子程序,用的是2000年的画笔程序外挂教程。

(一)创建了ActiveKeyDLL
(二)创建了Simulate.EXE;添加了button外挂按钮,链接了ActiveKeyDLL。
但是打开画图工具,按下F9 ,鼠标并没有自动移动并画下字母“R”,程序不多  有没有哪位朋友加我好友,帮我看看,谢谢!

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2014-6-23 15:09:41 | 显示全部楼层
// ActiveKey.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include <afxwin.h>
#include <afxdllx.h>
#include "ActiveKey.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif

static AFX_EXTENSION_MODULE ActiveKeyDLL = { NULL, NULL };

#pragma data_seg("shareddata")
HHOOK glhHook=NULL;
HINSTANCE glhInstance=NULL;
#pragma data_seg()


extern "C"LRESULT WINAPI KeyboardProc(int nCode,WPARAM wParam,LPARAM LParam)
{
  if(nCode >=0)
  {
    if(wParam ==0X78 )
        {
          CPoint newPoint,oldPoint;
          GetCursorPos(&oldPoint);
          newPoint.x=oldPoint.x+40;
          newPoint.y=oldPoint.y+10;
          SetCursorPos(newPoint.x,newPoint.y);
          mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
          mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
          keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
          keybd_event(0x52,MapVirtualKey(0x52,0),0,0);
          keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);
          keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);
          SetCursorPos(oldPoint.x,oldPoint.y);
        }
  }
  return CallNextHookEx(glhHook,nCode,wParam,LParam);
}
CKeyHook::CKeyHook(){}
CKeyHook::~CKeyHook()
{
        if(glhHook)
                Stop();
}
HHOOK CKeyHook::Start()
{
   glhHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);
   return glhHook;
}
BOOL CKeyHook::Stop()
{
        BOOL bResult = true;
if(glhHook)
                bResult = UnhookWindowsHookEx(glhHook);
    return bResult;
  }

extern "C" int APIENTRY
        DLLMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
    {
                UNREFERENCED_PARAMETER(lpReserved);
                if(dwReason == DLL_PROCESS_ATTACH)
                {
                   TRACE0("ActiveKey.DLL Initializing!\n");
               
               
                if(!AfxInitExtensionModule(ActiveKeyDLL,hInstance))
                        return 0 ;
                new CDynLinkLibrary(ActiveKeyDLL);
                glhInstance =hInstance;
         }
                else if(dwReason ==DLL_PROCESS_DETACH)
                {
                  TRACE0("ActiveKey.DLL Terminating!\n");
                  AfxTermExtensionModule(ActiveKeyDLL);
                }
                return 1;
    }

1

主题

3

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2014-6-23 15:11:01 | 显示全部楼层

// 0simulateDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "0simulate.h"
#include "0simulateDlg.h"
#include "afxdialogex.h"
#include"ActiveKey.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框


class CAboutDlg : public CDialogEx
{
public:
        CAboutDlg();

// 对话框数据
        enum { IDD = IDD_ABOUTBOX };

        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg:oDataExchange(CDataExchange* pDX)
{
        CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CMy0simulateDlg 对话框




CMy0simulateDlg::CMy0simulateDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CMy0simulateDlg::IDD, pParent)
{
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMy0simulateDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMy0simulateDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, &CMy0simulateDlg::OnClickedButton1)
END_MESSAGE_MAP()


// CMy0simulateDlg 消息处理程序

BOOL CMy0simulateDlg::OnInitDialog()
{
        bSetup=FALSE;
        CDialogEx::OnInitDialog();

        // 将“关于...”菜单项添加到系统菜单中。

        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
                BOOL bNameValid;
                CString strAboutMenu;
                bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
                ASSERT(bNameValid);
                if (!strAboutMenu.IsEmpty())
                {
                        pSysMenu->AppendMenu(MF_SEPARATOR);
                        pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
                }
        }

        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);                        // 设置大图标
        SetIcon(m_hIcon, FALSE);                // 设置小图标

        // TODO: 在此添加额外的初始化代码

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CMy0simulateDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
                CAboutDlg dlgAbout;
                dlgAbout.DoModal();
        }
        else
        {
                CDialogEx::OnSysCommand(nID, lParam);
        }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CMy0simulateDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // 用于绘制的设备上下文

                SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

                // 使图标在工作区矩形中居中
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;

                // 绘制图标
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialogEx::OnPaint();
        }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMy0simulateDlg::OnQueryDragIcon()
{
        return static_cast<HCURSOR>(m_hIcon);
}

CKeyHook m_hook;
BOOL bSetup;

void CMy0simulateDlg::OnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        if(!bSetup)
        {
          m_hook.Start();
        }
        else
        {m_hook.Stop(); }
        bSetup=!bSetup;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-26 02:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表