您的位置:首页 > 编程语言

ASM 写DLL 模拟鼠标操作代码

2009-07-24 09:39 417 查看
;====================myDLL.asm

.586
.model flat,stdcall
option casemap:none

include myDLL.inc

.const

INPUT_MOUSE equ 0h
INPUT_KEYBOARD equ 1h
INPUT_HARDWARE equ 2h

CTROL_ID equ 16Dh

.data

.data?

hInstance dd ?
;hMainWND dd ?
g_hDllMain dd ?

MOUSEINPUT struct
dxx dword ?
dy dword ?
mouseData dword ?
dwFlags dword ?
time dword ?
dwExtraInfo dword ?
MOUSEINPUT Ends

KEYBDINPUT struct
wVk dword ?
wScan dword ?
dwFlags dword ?
time dword ?
dwExtraInfo dword ?
KEYBDINPUT Ends

HARDWAREINPUT struct
uMsg dword ?
wParamL dword ?
wParamH dword ?
HARDWAREINPUT Ends

INPUT_MOUSE_DATA struct
dwtype dword ?
mi MOUSEINPUT <?,?,?,?,?,?>
INPUT_MOUSE_DATA Ends

INPUT_KEYBD_DATA struct
typee dword ?
ki KEYBDINPUT <?>
INPUT_KEYBD_DATA Ends

INPUT_HD_DATA struct
typee dword ?
hi HARDWAREINPUT <?>
INPUT_HD_DATA Ends

.code

;DLL的入口函数
;#########################################################################

DllEntry proc hModule:HINSTANCE, dwReason:DWORD, lpReserved:DWORD

.IF dwReason == DLL_PROCESS_ATTACH
mov eax, hModule
mov g_hDllMain, eax
mov eax, TRUE
.ELSEIF
mov eax, FALSE
.ENDIF
ret

DllEntry Endp

;--------------------以上这些内容为DLL函数导出为可注册DLL必须的过程
;#########################################################################
; Output Window procs

myDLL_Mouse proc hMainWND:DWORD,hCTROLID:DWORD
LOCAL keydata:KEYBDINPUT
LOCAL x:MOUSEINPUT
LOCAL y:HARDWAREINPUT
LOCAL inputdata: INPUT_MOUSE_DATA
LOCAL TRECT:RECT

pushad

;mov edx,206ECh

.IF hCTROLID==0
push CTROL_ID
pop hCTROLID
.endif

invoke GetDlgItem,hMainWND,hCTROLID ;获取窗口控件句柄,通过控件ID
mov edx,eax

invoke GetWindowRect,edx,addr TRECT

mov eax,TRECT.left
add eax,25
mov TRECT.left,eax
mov eax,TRECT.top
add eax,6
mov TRECT.top,eax
invoke SetCursorPos,TRECT.left,TRECT.top

mov inputdata.dwtype,INPUT_MOUSE
mov inputdata.mi.dxx,0
mov inputdata.mi.dy,0
mov inputdata.mi.mouseData,0
mov inputdata.mi.dwFlags,MOUSEEVENTF_MOVE or MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_LEFTUP
;invoke GetTickCount
mov inputdata.mi.time,0
;invoke GetMessageExtraInfo
mov inputdata.mi.dwExtraInfo,0

invoke SendInput,1,addr inputdata,sizeof inputdata

popad

ret

myDLL_Mouse endp

;#########################################################################

End DllEntry

;============================myDLL.inc

include windows.inc
include user32.inc
include kernel32.inc
include shell32.inc

includelib user32.lib
includelib kernel32.lib
includelib shell32.lib

;======================myDLL.Def

LIBRARY "myDLL.DLL"

DESCRIPTION "myDLL DLL"

EXPORTS

myDLL_Mouse

;=================== 调用方法其它ASM中调用代码

.DATA

szDLLFile db 'myDLL.dll',0
szlpModule db 'myDLL_Mouse',0
szDllKernel32 db 'Kernel32.dll',0
szlpLoadLibraryA db 'LoadLibraryA',0

.DATA?

hDLLFile dd ?
hlpModule dd ?
hlpLoadLibraryA dd ?
hDllKernel32 dd ?

.CODE

myDLL proc

invoke GetModuleHandle,addr szDllKernel32
mov hDllKernel32,eax

invoke GetProcAddress,hDllKernel32,addr szlpLoadLibraryA
mov hlpLoadLibraryA,eax

push offset szDLLFile
call hlpLoadLibraryA ;获取我的DLL句柄
;invoke LoadLibrary,addr szDLLFile

mov hDLLFile,eax
invoke GetProcAddress,hDLLFile,addr szlpModule
mov hlpModule,eax

mov eax,dword ptr[ebp+100h]
mov ebx,eax
push IDC_CLOSE
push hMainWND
call hlpModule

ret

myDLL endp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: