seeyou_shj 发表于 2023-11-6 13:40

完整版的鼠标连点器(修改版)

本帖最后由 seeyou_shj 于 2023-11-7 13:24 编辑

上次发的鼠标连点器实现源码,利用Sleep函数延时。根据TinaZerotwo的说法,Sleep()函数来等待按键事件,这会导致线程被阻塞,无法响应其他事件。更好的方式是使用消息循环或事件驱动的机制来监听键盘事件。于是我修改了一下,利用系统自带的timer实现定时触发。因为timer需要有界面支持,所以自己做了一个简单的界面。

源码和可执行文件都放在打包文件里,可以自行编译,也可以自行修改以实现自己的目的。

源码也贴在这里:

#include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

#define IDT_TIMER1 1

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
      static TCHAR szAppName[] = TEXT( "demo" ) ;
      HWND      hwnd ;
      MSG            msg ;
      WNDCLASS    wndclass ;

      wndclass.lpfnWndProc    = WndProc ;
      wndclass.style            = CS_HREDRAW | CS_VREDRAW ;
      wndclass.hInstance      = hInstance ;
      wndclass.cbClsExtra      = 0 ;
      wndclass.cbWndExtra      = 0 ;
      wndclass.hbrBackground    = (HBRUSH) GetStockObject(WHITE_BRUSH) ;
      wndclass.hCursor      = LoadCursor( NULL, IDC_ARROW ) ;
      wndclass.hIcon            = LoadIcon( NULL, IDI_APPLICATION ) ;
      wndclass.lpszClassName    = szAppName ;
      wndclass.lpszMenuName    = NULL ;
      
      if( !RegisterClass(&wndclass) )
      {
                MessageBox( NULL, TEXT("无法注册窗口类!"), TEXT("错误"), MB_OK | MB_ICONERROR ) ;
                return 0 ;
      }

      hwnd = CreateWindow( szAppName, TEXT("test"), WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL ) ;

      ShowWindow( hwnd, iCmdShow ) ;
      UpdateWindow( hwnd ) ;

      while( GetMessage(&msg, NULL, 0, 0) )
      {
                TranslateMessage( &msg ) ;
                DispatchMessage( &msg ) ;
      }

      return msg.wParam ;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
static HWND btn,btn2;
static POINT p;
static HWND hdc;

      switch( message )
      {
      case WM_CREATE:
    btn = CreateWindow( TEXT("button"), TEXT("开始点击"),
                              WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                              20, 20, 120, 20,
                              hwnd, (HMENU)3, ((LPCREATESTRUCT) lParam) -> hInstance, NULL ) ;
                return 0 ;
      case WM_COMMAND:
                switch(LOWORD(wParam))
                {
                case 3:
                        switch(HIWORD(wParam))
                        {
                              case BN_CLICKED:
          MessageBox( NULL, TEXT("将鼠标置于需要连续点击的位置,按下UP键开始鼠标连续点击。DOWN键结束本次点击。"), TEXT("提示信息!"), MB_OK | MB_ICONERROR ) ;
          while(!(GetAsyncKeyState(VK_UP) & 0x8000)){
            Sleep(20);
          }
          GetCursorPos(&p);
          hdc = WindowFromPoint(p);
          ScreenToClient(hdc, &p);
          SetTimer(hwnd,IDT_TIMER1,10,(TIMERPROC)NULL);
                                        break ;
                        }
                        break ;
                }
                return 0 ;
      case WM_TIMER:
                switch (wParam)
                {
                        case IDT_TIMER1:
                              SendMessage(hdc,WM_LBUTTONDOWN,MK_LBUTTON,MAKELONG(p.x,p.y));
      SendMessage(hdc,WM_LBUTTONUP,MK_LBUTTON,MAKELONG(p.x,p.y));
      if(GetAsyncKeyState(VK_DOWN) & 0x8000){
          KillTimer(hwnd,IDT_TIMER1);
      }
                              break;
                }
                return 0 ;
      case WM_DESTROY:
                KillTimer(hwnd,IDT_TIMER1);
                PostQuitMessage(0) ;
                return 0 ;
      }

      return DefWindowProc( hwnd, message, wParam, lParam ) ;
}

苏紫方璇 发表于 2023-11-7 00:58

代码插入可以看这个帖子,此贴已帮您修改了
【公告】发帖代码插入以及添加链接教程(有福利)
https://www.52pojie.cn/thread-713042-1-1.html
(出处: 吾爱破解论坛)

seeyou_shj 发表于 2023-11-7 10:48

学习大安 发表于 2023-11-6 17:45
我没DLL环境我下个

应该是使用了GUI界面的原因,缺少什么dll请告知我,我一起打包。你也可以自行编译,编译方法:

g++ click.cpp -lgdi32

我用的mingw编译的。

pxhzai 发表于 2023-11-6 13:45

这不该发到原创区?

460906606 发表于 2023-11-6 13:57

谢谢分享

forget5300 发表于 2023-11-6 14:09

感谢分享

xingdonga 发表于 2023-11-6 14:34

下载了,支持

skyua 发表于 2023-11-6 14:39

感谢分享

dblkings 发表于 2023-11-6 14:59


感谢分享

f122741 发表于 2023-11-6 15:00

多谢分享

学习大安 发表于 2023-11-6 16:02

下载了 有成品吗

auth98 发表于 2023-11-6 16:11

感谢分享
页: [1] 2 3 4 5 6
查看完整版本: 完整版的鼠标连点器(修改版)