给大家赠送一个我最近写的鼠标连点器的源代码!

本文分享了一款自制的鼠标连点器的源代码,提供了下载链接和部分核心代码展示。该软件支持自定义热键启动和停止,通过Windows消息处理实现鼠标点击功能。有兴趣的读者可以下载参考,代码中包含了多线程处理和热键注册等技术。

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

给大家赠送一个我最近写的鼠标连点器的源代码!

欢迎大家关注我的微信号

源代码下载地址

https://download.youkuaiyun.com/download/blackangelboy/10801071

程序界面如下图:

贴出部分核心源代码大家参照一下,这个小软件我开发了三天 ^_^ 历时15个小时开发完毕 ^_^ 大家喜欢就拿去参考参考,代码不妥之处请别见怪,部分源代码从网上搜集整合。因为是仓促开发,所以采用了暴力编程方式!超暴力编程呵呵^_^

LdianQIDlg.cpp源文件

// LdianQIDlg.cpp : implementation file
//

#include "stdafx.h"
#include "LdianQI.h"
#include "LdianQIDlg.h"
#include "DlgProxy.h"
#include "String.h"
#include <stdio.h>

//调用生成桌面快捷方式需要的头文件函数
#include <windows.h>
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")

//调用WAV声音需要的头文件函数
#include "Mmsystem.h"
#pragma comment(lib,"winmm.lib")

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern char StrKey;
extern char StrKeyStop;
extern CString Tmp;
extern CString TmpStop;
extern CString MouseOK;
extern CString MouseOKCombo;
extern CString MouseOKComboOK;
extern CString TimeGoodOK;
extern CString tempexe;
extern int  NumTime;
extern CString URLFile;
extern int  L_miao;
extern CString MouseCkool;
/////////////////////////////////////////////////////////////////////////////
// CLdianQIDlg dialog

IMPLEMENT_DYNAMIC(CLdianQIDlg, CDialog);

CLdianQIDlg::CLdianQIDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CLdianQIDlg::IDD, pParent)
{
    //{ {AFX_DATA_INIT(CLdianQIDlg)
    m_TXT = _T("");
    //}}AFX_DATA_INIT
    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_pAutoProxy = NULL;
}

CLdianQIDlg::~CLdianQIDlg()
{
    // If there is an automation proxy for this dialog, set
    //  its back pointer to this dialog to NULL, so it knows
    //  the dialog has been deleted.
    if (m_pAutoProxy != NULL)
        m_pAutoProxy->m_pDialog = NULL;
}

void CLdianQIDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{ {AFX_DATA_MAP(CLdianQIDlg)
    DDX_Control(pDX, IDC_EDITTIMENUM, m_Tims);
    DDX_Control(pDX, IDC_EDITTIMENUMTXT, m_TimeX);
    DDX_Control(pDX, IDOK2, m_menuB);
    DDX_Control(pDX, IDOK, m_menuA);
    DDX_Control(pDX, IDC_SLIDER1, m_Slider);
    DDX_Text(pDX, IDC_STATICX1, m_TXT);
    DDX_Control(pDX, IDC_EXPLORER1, m_URLplay);
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CLdianQIDlg, CDialog)
    //{ {AFX_MSG_MAP(CLdianQIDlg)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_CLOSE()
    ON_WM_TIMER()
    ON_WM_NCHITTEST()
    ON_WM_HSCROLL()
    ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
    ON_WM_CTLCOLOR()
    ON_BN_CLICKED(IDOK2, OnOk2)
    ON_CBN_EDITUPDATE(IDC_COMBO1, OnEditupdateCombo1)
    ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
    ON_CBN_EDITUPDATE(IDC_COMBO3, OnEditupdateCombo3)
    ON_CBN_SELCHANGE(IDC_COMBO3, OnSelchangeCombo3)
    ON_CBN_EDITUPDATE(IDC_COMBO2, OnEditupdateCombo2)
    ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
    ON_CBN_EDITUPDATE(IDC_COMBO4, OnEditupdateCombo4)
    ON_CBN_SELCHANGE(IDC_COMBO4, OnSelchangeCombo4)
    ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
    ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
    ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
    ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
    ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
    ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
    ON_BN_CLICKED(IDC_BUTTON2, OnButtonQZ)
    ON_BN_CLICKED(IDC_BUTTON3, OnButtonQZNO)
    ON_BN_CLICKED(IDC_BUTTON4, OnButtonMINI)
    ON_BN_CLICKED(IDC_BUTTON5, OnButtonJM)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLdianQIDlg message handlers

DWORD __stdcall ThreadProcKey(LPVOID lpParameter) 
{
CLdianQIDlg* Key = (CLdianQIDlg*)lpParameter;

    while(1)
        {
            Sleep(50);        
            Key->GetDlgItem(IDC_COMBO1)->GetWindowText(Tmp); 
            CString TmpX;
            Key->GetDlgItem(IDC_COMBO2)->GetWindowText(TmpX); 
                    if(Tmp!="")
                    {
                        Key->RegKeyCe();//执行热键0-9 A-Z检测
                        if(TmpX=="CTRL" || TmpX=="ctrl" )
                        {
                        RegisterHotKey(NULL,0x00000003,MOD_CONTROL,StrKey);
                        //AfxMessageBox("热键为CTRL"); 
                        }
                        if(TmpX=="ALT" || TmpX=="alt" )
                        {
                        RegisterHotKey(NULL,0x00000003,MOD_ALT,StrKey);
                        //AfxMessageBox("热键为ALT"); 
                        }
                        if(TmpX=="SHIFT" || TmpX=="shift")
                        {
                        RegisterHotKey(NULL,0x00000003,MOD_SHIFT,StrKey);
                        //AfxMessageBox("热键为SHIFT"); 
                        }
                        //RegisterHotKey(NULL,0x00090003,MOD_CONTROL,TEXT(StrKey));
                        //注册热键 MOD_ALT ;MOD_CONTROL ;MOD_SHIFT ;MOD_WIN 
                        //RegisterHotKey(GetSafeHwnd(),  HOTKEYID, MOD_CONTROL, TEXT('L'))
                        MSG msg;
                        while(GetMessage(&msg,NULL,0,0))//从消息队伍获取消息
                            {
                                       if(msg.message==WM_HOTKEY)//热键消息
                                    {            
                                        //AfxMessageBox("热键"+TmpX+" + "+Tmp+"已设置成功!开启执行"); 
                                        MouseOK="开始鼠标点击";
                                        MouseCkool="连续点击鼠标左键";
                                        goto lbit;
                                    }                            
                            }
                        lbit:
                        ;
                        UnregisterHotKey(NULL,0x00000003);//卸载掉注册的热键
                    }
        }
    return 0;
}

DWORD __stdcall ThreadProcKeyStop(LPVOID lpParameter) 
{
CLdianQIDlg* KeyStop = (CLdianQIDlg*)lpParameter;

    while(1)
        {
            Sleep(50);        
            KeyStop->GetDlgItem(IDC_COMBO3)->GetWindowText(TmpStop); 
            CString TmpXStop;
            KeyStop->GetDlgItem(IDC_COMBO4)->GetWindowText(TmpXStop); 
            if(Tmp!="")
            {
                KeyStop->RegKeyCeStop();//执行热键0-9 A-Z检测
                if(TmpXStop=="CTRL" || TmpXStop=="ctrl" )
                {
                RegisterHotKey(NULL,0x00000003,MOD_CONTROL,StrKeyStop);
                //AfxMessageBox("热键为CTRL"); 
                }
                if(TmpXStop=="ALT" || TmpXStop=="alt" )
                {
                RegisterHotKey(NULL,0x00000003,MOD_ALT,StrKeyStop);
                //AfxMessageBox("热键为ALT"); 
                }
                if(TmpXStop=="SHIFT" || TmpXStop=="shift")
                {
                RegisterHotKey(NULL,0x00000003,MOD_SHIFT,StrKeyStop);
                //AfxMessageBox("热键为SHIFT"); 
                }
                //RegisterHotKey(NULL,0x00090003,MOD_CONTROL,TEXT(StrKey));
                //注册热键 MOD_ALT ;MOD_CONTROL ;MOD_SHIFT ;MOD_WIN 
                //RegisterHotKey(GetSafeHwnd(),  HOTKEYID, MOD_CONTROL, TEXT('L'))
                MSG msg;
                while(GetMessage(&msg,NULL,0,0))//从消息队伍获取消息
                    {
                               if(msg.message==WM_HOTKEY)//热键消息
                            {            
                                KeyStop->KeyOkStop();
                                //AfxMessageBox("热键"+TmpXStop+" + "+TmpStop+"已设置成功!关闭执行"); 
                                goto lbitStop;
                            }                            
                    }
                lbitStop:
                ;
                UnregisterHotKey(NULL,0x00000004);//卸载掉注册的热键
            }
        }
    return 0;
}


DWORD __stdcall ThreadProcMuseOK(LPVOID lpParameter) 
{
CLdianQIDlg* MuseOK = (CLdianQIDlg*)lpParameter;

    while(1)
        {
            if(MouseOK=="开始鼠标点击")
                {
                      MuseOK->KeyOk();
                }
            if(MouseOKCombo=="启用鼠标快捷键")
                {
                      MuseOK->KeyMouse();
                }
            else if(MouseOKCombo=="暂停鼠标热键" || MouseOKComboOK=="暂停鼠标热键")
                        {
                            Sleep(10);
                            if(KEY_DOWN(MOUSE_MOVED))
                            {                
                                //MessageBox("您点击了鼠标左键!触发鼠标自动操作!");
                                MouseOKComboOK="开启鼠标热键动作";
                                MouseOKCombo="启用鼠标快捷键";
                            }
                        }
        }
    return 0;
}


DWORD __stdcall ThreadProcTime(LPVOID lpParameter) 
{
CLdianQIDlg* TimeDig = (CLdianQIDlg*)lpParameter;

    while(1)
        {
            TimeDig->WindowsNumTime();//执行计时功能函数
        }
    return 0;
}

//以下代码为生成桌面快捷方式-----------------------------------------------------------------------
BOOL CLdianQIDlg::GetDesktopPath(char *pszDesktopPath)
{
    LPITEMIDLIST  ppidl = NULL; 
    
    if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK)
    {
        BOOL flag =    SHGetPathFromIDList(ppidl, pszDesktopPath);
        CoTaskMemFree(ppidl);
        return flag;
    }
 
    return FALSE;
}

BOOL CLdianQIDlg::GetIEQuickLaunchPath(char *pszIEQueickLaunchPath)
{    
    LPITEMIDLIST  ppidl;             
    
    if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)
    {
        BOOL flag =    SHGetPathFromIDList(ppidl, pszIEQueickLaunchPath);
        strcat(pszIEQueickLaunchPath, "\\Microsoft\\Internet Explorer\\Quick Launch");
        CoTaskMemFree(ppidl);
        return flag;
    }
 
    return FALSE;
}

BOOL CLdianQIDlg::GetProgramsPath(char *pszProgramsPath)
{
    LPITEMIDLIST  ppidl; 
    
    if (SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &ppidl) == S_OK)
    {
        BOOL flag = SHGetPathFromIDList(ppidl, pszProgramsPath);
        CoTaskMemFree(ppidl);
        return flag;
    }
 
    return FALSE;
}
/*
函数功能:对指定文件在指定的目录下创建其快捷方式
函数参数:
lpszFileName    指定文件,为NULL表示当前进程的EXE文件。
lpszLnkFileDir  指定目录,不能为NULL。
lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。
wHotkey         为0表示不设置快捷键
pszDescription  备注
iShowCmd        运行方式,默认为常规窗口
*/
BOOL CreateFileShortcut(LPCSTR lpszFileName, LPCSTR lpszLnkFileDir, LPCSTR lpszLnkFileName,    

LPCSTR lpszWorkDir, WORD wHotkey, LPCTSTR lpszDescription, int iShowCmd = SW_SHOWNORMAL)
{
    if (lpszLnkFileDir == NULL)
        return FALSE;
 
    HRESULT hr;
    IShellLink     *pLink;  //IShellLink对象指针
    IPersistFile   *ppf; //IPersisFil对象指针
    
    //创建IShellLink对象
    hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, 

(void**)&pLink);
    if (FAILED(hr))
        return FALSE;
    
    //从IShellLink对象中获取IPersistFile接口
    hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
    if (FAILED(hr))
    {
        pLink->Release();
        return FALSE;
    }
    
    //目标
    if (lpszFileName == NULL)
        pLink->SetPath(_pgmptr);
    else
        pLink->SetPath(lpszFileName);
    
    //工作目录
    if (lpszWorkDir != NULL)
        pLink->SetPath(lpszWorkDir);
    
    //快捷键
    if (wHotkey != 0)
        pLink->SetHotkey(wHotkey);
    
    //备注
    if (lpszDescription != NULL)
        pLink->SetDescription(lpszDescription);
    
    //显示方式
    pLink->SetShowCmd(iShowCmd);
 
 
    //快捷方式的路径 + 名称
    char szBuffer[MAX_PATH];
    if (lpszLnkFileName != NULL) //指定了快捷方式的名称
        sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, lpszLnkFileName);
    else   
    {
        //没有指定名称,就从取指定文件的文件名作为快捷方式名称。
        char *pstr;
        if (lpszFileName != NULL)
            pstr = strrchr(lpszFileName, '\\');
        else
            pstr = strrchr(_pgmptr, '\\');
 
        if (pstr == NULL)
        {    
            ppf->Release();
            pLink->Release();
            return FALSE;
        }
        //注意后缀名要从.exe改为.lnk
        sprintf(szBuffer, "%s\\%s", lpszLnkFileDir, pstr);
        int nLen = strlen(szBuffer);
        szBuffer[nLen - 3] = 'l';
        szBuffer[nLen - 2] = 'n';
        szBuffer[nLen - 1] = 'k';
    }
    //保存快捷方式到指定目录下
    WCHAR  wsz[MAX_PATH];  //定义Unicode字符串
    MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);
    
    hr = ppf->Save(wsz, TRUE);
    
    ppf->Release();
    pLink->Release();
    return SUCCEEDED(hr);
}
//以上代码为生成桌面快捷方式-----------------------------------------------------------------------

BOOL CLdianQIDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);            // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    // TODO: Add extra initialization here
    
    // TODO: Add extra initialization here


    CenterWindow();//程序启动时窗体处于屏幕的中心位置

    {//检测是否开启了打开了相同程序
            HWND  wnd;
            wnd=::FindWindow(NULL,"鼠标连点器——海马软件QQ:9254793");
            if(wnd!=NULL)
            {
                //::ShowWindow(wnd,SW_HIDE);//将窗口隐藏
                MessageBox("为了不至于您的计算机鼠标精神错乱!^_^\r\n\r\n所以每次只允许开启一个鼠标连点器!","程序开启出错提示",MB_OK|MB_ICONINFORMATION);
                //CDialog::OnClose();
                KAI="程序已经开启";
                SetTimer(2,10,NULL);
                //return TRUE;  // return TRUE unless you set the focus to a control
            }
            else
            {
                SetWindowText("鼠标连点器——海马软件QQ:9254793");    //设置窗体标题
            }
    }

    ////对文件地址的"\"替换成"\\"
    for(int i=0;i<tempexe.GetLength();i++)
    {
      int index = tempexe.Find("\\");
      if(index == -1)
         continue;
          else
          {
              if(i==1)
              {
                tempexe.Replace("\\","\\\\\\\\"); //前面的参数是要替换的字符串,后面的参数是你指定的新字符串
              }
              if(i>1)
              {
                  goto lid;
              }
              //MessageBox(tempexe,"程序地址2",MB_OK|MB_ICONINFORMATION);
              GetDlgItem(IDC_STATICFILE)->SetWindowText(tempexe); 
          }  
    }
    lid:
    ;

    CString StrFileOk;
    GetDlgItem(IDC_STATICFILE)->GetWindowText(StrFileOk); 
    //MessageBox(StrFileOk,"程序地址3",MB_OK|MB_ICONINFORMATION);
    char *filepath;
    filepath=(LPSTR)(LPCTSTR)StrFileOk;//强制转换
    //方法一 获取程序的大小
    HANDLE handle = CreateFile(filepath, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    if (handle != INVALID_HANDLE_VALUE)
    {
        int size = GetFileSize(handle,NULL);
        CString TXNUM;
        TXNUM.Format(_T("%d"),size);
        //MessageBox("程序大

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值