zoukankan      html  css  js  c++  java
  • 鼠标自动点击

    今天突然想看下汇编.....  呵呵写的很原始..不过能用..算是我第一个WIN32汇编程序..纪念一下

      1 .686p
      2 .mmx
      3 .xmm
      4 .Model Flat, StdCall
      5 Option Casemap :None
      6 
      7 
      8 include windows.inc
      9 include user32.inc
     10 include kernel32.inc
     11 include gdi32.inc
     12 include shell32.inc
     13 
     14 
     15 includelib user32.lib
     16 includelib kernel32.lib
     17 includelib gdi32.lib
     18 includelib shell32.lib
     19 
     20 
     21 
     22 
     23 ;***************************************************************************;
     24 ICON                    equ                  100
     25 UM_HOOK                 equ                  ( WM_USER + 2001 )
     26 UM_ACTIVATE             equ                  ( WM_USER + 2002 )
     27 ;***************************************************************************;
     28 
     29 
     30 
     31 ;***************************************************************************;
     32     WinMain         PROTO :DWORD, :DWORD, :DWORD, :DWORD
     33     WndProc         PROTO :DWORD, :DWORD, :DWORD, :DWORD
     34     HookProc        proto :DWORD, :DWORD, :DWORD
     35     InstallTrayIcon proto
     36     ActiveApp       proto
     37 ;***************************************************************************;
     38 
     39 
     40 ;***************************************************************************;
     41 .const
     42     szClassName             db                   'MouseClicker_Class', 0
     43     szWndName               db                   'MouseClicker', 0
     44     szTrayIcon              db                   'WM_TRAYICON', 0
     45     szText                  db                   'F3开始, F4停止. 最小化可隐藏窗口!', 0
     46     szSingle                db                   '0x437c2a59, 0x7d09, 0x4d4d, 0x83, 0x8d, 0x21, 0xe, 0x8d, 0xa3, 0xe2, 0xec', 0
     47 ;***************************************************************************;
     48 
     49 
     50 ;***************************************************************************;
     51 .data?
     52     g_hInstance             dd                  ?
     53     g_hWnd                  dd                  ?
     54     g_wmTrayIcon            dd                  ?
     55     g_hHook                 dd                  ?
     56     g_stNotifyIconData      NOTIFYICONDATA     <?>
     57     g_run                   dd                  ?
     58     g_hMutex                dd                  ?
     59 ;***************************************************************************;
     60 
     61 
     62 .code
     63 START:
     64 
     65 ;***************************************************************************;
     66     invoke CreateMutex, NULL, 0, offset szSingle
     67     mov g_hMutex, eax
     68     .if eax == NULL
     69         invoke ExitProcess, 0
     70     .endif
     71     invoke GetLastError
     72     .if eax == ERROR_ALREADY_EXISTS
     73         invoke ActiveApp
     74         invoke ExitProcess, 0
     75     .endif
     76 
     77 
     78 
     79     invoke GetModuleHandle, NULL
     80     mov g_hInstance, eax
     81     invoke WinMain, g_hInstance, NULL, NULL, SW_SHOWDEFAULT
     82     invoke ExitProcess, 0
     83 ;***************************************************************************;
     84 
     85 
     86 ;***************************************************************************;
     87 WinMain proc _hInst :DWORD, _hPrevInst :DWORD, _CmdLine :DWORD, _CmdShow :DWORD
     88     local @wc     :WNDCLASSEX
     89     local @msg    :MSG
     90 
     91     mov @wc.cbSize, sizeof WNDCLASSEX
     92     mov @wc.style, CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
     93     mov @wc.lpfnWndProc, offset WndProc
     94     mov @wc.cbClsExtra, NULL
     95     mov @wc.cbWndExtra, NULL
     96     push _hInst
     97     pop @wc.hInstance
     98     mov @wc.hbrBackground, COLOR_BTNFACE + 1
     99     mov @wc.lpszMenuName, NULL
    100     mov @wc.lpszClassName, offset szClassName
    101     invoke LoadIcon, _hInst, ICON
    102     mov @wc.hIcon, eax
    103     invoke LoadCursor, NULL, IDC_ARROW
    104     mov @wc.hCursor, eax
    105     mov @wc.hIconSm, 0
    106     invoke RegisterClassEx, addr @wc
    107     invoke CreateWindowEx, NULL, offset szClassName, offset szWndName, WS_OVERLAPPEDWINDOW and (not WS_MAXIMIZEBOX), 200, 200, 300, 100, NULL, NULL, _hInst, NULL
    108     invoke ShowWindow, g_hWnd, SW_SHOWNORMAL
    109     invoke UpdateWindow, g_hWnd
    110 
    111     StartLoop:
    112         invoke GetMessage, addr @msg, NULL, 0, 0
    113             cmp eax, 0
    114             je ExitLoop
    115                 invoke TranslateMessage, addr @msg
    116                 invoke DispatchMessage, addr @msg
    117             jmp StartLoop
    118     ExitLoop:
    119 
    120     mov eax, @msg.wParam
    121     ret
    122 WinMain endp
    123 ;***************************************************************************;
    124 
    125 
    126 ;***************************************************************************;
    127 WndProc proc _hWnd :DWORD, _uMsg :DWORD, _wParam :DWORD, _lParam :DWORD
    128     local @stPs:PAINTSTRUCT
    129     ;local @stRect:RECT
    130     local @hDc
    131     mov eax, _uMsg
    132 ;***************************************************************************;
    133     .if eax == WM_CREATE
    134         push _hWnd
    135         pop g_hWnd
    136         mov g_run, 0
    137         invoke SetProp, _hWnd, offset szSingle, 1
    138         invoke InstallTrayIcon
    139         .if eax != 0
    140             invoke SetWindowsHookEx, WH_KEYBOARD_LL, HookProc, g_hInstance, 0
    141             .if eax != 0
    142                 mov g_hHook, eax
    143                 ret
    144             .else
    145                 mov g_stNotifyIconData.uFlags, 0
    146                 invoke Shell_NotifyIcon, NIM_DELETE, offset g_stNotifyIconData
    147             .endif
    148         .endif
    149         invoke PostQuitMessage, NULL
    150 ;***************************************************************************;
    151     .elseif eax == WM_DESTROY
    152         invoke PostQuitMessage, NULL
    153 ;***************************************************************************;
    154     .elseif eax == WM_CLOSE
    155         invoke UnhookWindowsHookEx, g_hHook
    156         invoke KillTimer, _hWnd, 1
    157         mov g_stNotifyIconData.uFlags, 0
    158         invoke Shell_NotifyIcon, NIM_DELETE, offset g_stNotifyIconData
    159         invoke RemoveProp, _hWnd, offset szSingle
    160         invoke CloseHandle, g_hMutex
    161         invoke DestroyWindow, _hWnd
    162 ;***************************************************************************;
    163     .elseif eax == WM_PAINT
    164         invoke BeginPaint, _hWnd, addr @stPs
    165         mov @hDc, eax
    166         invoke SetBkMode, @hDc, TRANSPARENT
    167         ;invoke GetClientRect, _hWnd, addr @stRect
    168         ;invoke DrawText, @hDc, offset szText, -1, addr @stRect, DT_SINGLELINE or DT_CENTER or DT_VCENTER
    169         invoke TextOut, @hDc, 30, 25, offset szText, 33
    170         invoke EndPaint, _hWnd, addr @stPs
    171 ;***************************************************************************;
    172     .elseif eax == WM_SYSCOMMAND && _wParam == SC_MINIMIZE
    173         invoke ShowWindow, _hWnd, SW_HIDE
    174 ;***************************************************************************;
    175     .elseif eax == WM_TIMER
    176         invoke mouse_event, MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    177         invoke mouse_event, MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    178 ;***************************************************************************;
    179     .elseif eax == g_wmTrayIcon
    180         and _lParam, 0FFFFh
    181         .if _lParam == WM_LBUTTONDBLCLK
    182             invoke IsIconic, _hWnd
    183             .if eax != 0
    184                 invoke ShowWindow, _hWnd, SW_RESTORE
    185             .else
    186                 invoke IsWindowVisible, _hWnd
    187                 .if eax != 0
    188                     invoke ShowWindow, _hWnd, SW_HIDE
    189                 .else
    190                     invoke ShowWindow, _hWnd, SW_SHOW
    191                     invoke BringWindowToTop, _hWnd
    192                     invoke SetForegroundWindow, _hWnd
    193                 .endif
    194             .endif
    195         .endif
    196 ;***************************************************************************;
    197     .elseif eax == UM_ACTIVATE
    198         invoke IsIconic, _hWnd
    199         .if eax != 0
    200             invoke ShowWindow, _hWnd, SW_RESTORE
    201         .else
    202             invoke IsWindowVisible, _hWnd
    203             .if eax == 0
    204                 invoke ShowWindow, _hWnd, SW_SHOW
    205                 invoke BringWindowToTop, _hWnd
    206                 invoke SetForegroundWindow, _hWnd
    207             .endif
    208         .endif
    209 ;***************************************************************************;
    210     .elseif eax == UM_HOOK
    211         mov esi, _lParam
    212         assume esi : ptr KBDLLHOOKSTRUCT
    213         .if [esi].vkCode == VK_F3
    214             .if g_run == 0
    215                 mov g_run, 1
    216                 invoke SetTimer, _hWnd, 1, 99, NULL
    217             .endif
    218         .elseif [esi].vkCode == VK_F4
    219             .if g_run == 1
    220                 invoke KillTimer, _hWnd, 1
    221                 mov g_run, 0
    222             .endif
    223         .endif
    224         assume esi : nothing
    225 ;***************************************************************************;
    226     .else
    227         invoke DefWindowProc, _hWnd, _uMsg, _wParam, _lParam
    228 ;***************************************************************************;
    229     .endif
    230     ret
    231 WndProc endp
    232 ;***************************************************************************;
    233 
    234 
    235 
    236 ;***************************************************************************;
    237 HookProc proc _nCode, _wParam, _lParam
    238     invoke CallNextHookEx, g_hHook, _nCode, _wParam, _lParam
    239     push eax
    240     .if _nCode == HC_ACTION && _wParam == WM_KEYUP
    241         invoke SendMessage, g_hWnd, UM_HOOK, _wParam, _lParam
    242     .endif
    243     pop eax
    244     ret
    245 HookProc endp
    246 ;***************************************************************************;
    247 
    248 
    249 ;***************************************************************************;
    250 InstallTrayIcon proc
    251     local @dwIcon :DWORD
    252     invoke RtlZeroMemory, offset g_stNotifyIconData, sizeof g_stNotifyIconData
    253     mov g_stNotifyIconData.cbSize, sizeof g_stNotifyIconData
    254     mov g_stNotifyIconData.uFlags, NIF_MESSAGE or NIF_ICON
    255     push g_hWnd
    256     pop g_stNotifyIconData.hwnd
    257     invoke RegisterWindowMessage, offset szTrayIcon
    258     .if eax != 0
    259         mov g_stNotifyIconData.uCallbackMessage, eax
    260         mov g_wmTrayIcon, eax
    261         invoke GetSystemMetrics, SM_CXSMICON
    262         mov  @dwIcon, eax
    263         invoke LoadImage, g_hInstance, ICON, IMAGE_ICON, @dwIcon, @dwIcon, LR_DEFAULTCOLOR
    264         .if eax != 0
    265             mov g_stNotifyIconData.hIcon, eax
    266             invoke Shell_NotifyIcon, NIM_ADD, offset g_stNotifyIconData
    267         .endif
    268     .endif
    269     ret
    270 InstallTrayIcon endp
    271 ;***************************************************************************;
    272 
    273 
    274 ;***************************************************************************;
    275 ActiveApp proc
    276     local @hWndPre :DWORD
    277     invoke GetDesktopWindow
    278     invoke GetWindow, eax, GW_CHILD
    279     mov @hWndPre, eax
    280     invoke IsWindow, eax
    281     .while eax != 0
    282         invoke GetProp, @hWndPre, offset szSingle
    283         .if eax != 0
    284             invoke PostMessage, @hWndPre, UM_ACTIVATE, 0, 0
    285             .break
    286         .endif
    287         invoke GetWindow, @hWndPre, GW_HWNDNEXT
    288         mov @hWndPre, eax
    289         invoke IsWindow, eax
    290     .endw
    291     ret
    292 ActiveApp endp
    293 ;***************************************************************************;
    294 
    295 END START
  • 相关阅读:
    javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
    windows查看端口占用 windows端口占用 查找端口占用程序 强制结束端口占用 查看某个端口被占用的解决方法 如何查看Windows下端口占用情况
    javaWeb项目中的路径格式 请求url地址 客户端路径 服务端路径 url-pattern 路径 获取资源路径 地址 url
    ServletRequest HttpServletRequest 请求方法 获取请求参数 请求转发 请求包含 请求转发与重定向区别 获取请求头字段
    HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码
    Servlet主要相关类核心类 容器调用的过程浅析 servlet解读 怎么调用 Servlet是什么 工作机制
    linq查询语句转mongodb
    winddows rabbitmq安装与配置
    Redis For Windows安装及密码
    出现,视图必须派生自 WebViewPage 或 WebViewPage错误解决方法
  • 原文地址:https://www.cnblogs.com/javado/p/2815936.html
Copyright © 2011-2022 走看看