首页
社区
课程
招聘
[旧帖] [原创汇编语言写的按键模拟器1.2.1版发布 0.00雪花
发表于: 2012-3-16 16:34 1626

[旧帖] [原创汇编语言写的按键模拟器1.2.1版发布 0.00雪花

2012-3-16 16:34
1626
自己用win32 asm汇编语言编的按键模拟器,增加了鼠标功能

相关源代码,请参考以下链接:
http://bbs.pediy.com/showthread.php?t=147296

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 70
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
最近看到不少人提到,api在自绘控件中经常不出效果,我把汇编语言编的按键模拟器1.2版中此部分的源代码拿出来供参考

       
        invoke        InitCommonControls
        invoke        GetModuleHandle,0
        mov        hInstance,eax
        invoke        GetCommandLine
        mov        CommandLine,eax
        invoke        _WinMain,hInstance,0,CommandLine,SW_SHOWNORMAL
        invoke        ExitProcess,0

;*****************************************************************************
_WinMain proc        uses esi edi ebx ,hInst,PrehInst,CmdLine,CmdShow
        LOCAL        @stWc:WNDCLASSEX
        LOCAL        @stMsg:MSG
       
        invoke        RtlZeroMemory,addr @stWc,sizeof @stWc
        invoke        LoadMenu,hInstance,IDM_MAIN
        mov        hMenu,eax
       
       
        mov        @stWc.cbSize,sizeof @stWc
        mov        @stWc.style,CS_VREDRAW OR CS_HREDRAW OR CS_DBLCLKS
        mov        @stWc.lpfnWndProc,offset _WndProc

        invoke        LoadBitmap,hInstance,IDB_MAIN
        mov        hBmpWinMain,eax
        invoke        CreatePatternBrush,eax
        mov        hBrushWinMain,eax
        ;INVOKE        GetSysColorBrush,eax;COLOR_3DFACE;,COLOR_3DDKSHADOW;,COLOR_GRAYTEXT;,COLOR_BTNTEXT;,;COLOR_BACKGROUND;,COLOR_MENUTEXT;,COLOR_MENU
        mov        @stWc.hbrBackground,eax
        mov        @stWc.lpszClassName,offset szClassName

        push        hInstance
        pop        @stWc.hInstance
        invoke        LoadIcon,hInstance,IDI_ICON1;,IDI_APPLICATION
        mov        @stWc.hIcon,eax
        mov        @stWc.hIconSm,eax
        invoke        LoadCursor,0,IDC_ARROW
        mov        @stWc.hCursor,eax
       
        invoke        RegisterClassEx,addr @stWc
        invoke        CreateWindowEx,WS_EX_WINDOWEDGE,addr szClassName,addr szWindowName,\
                WS_DLGFRAME or  WS_CAPTION  or WS_MINIMIZEBOX or WS_SYSMENU or WS_VISIBLE  ,\;WS_BORDER or WS_MAXIMIZEBOX or WS_THICKFRAME OR DS_MODALFRAME
                150,150,655,475,0,hMenu,hInstance,0
        mov        hWinMain,eax
        invoke        ShowWindow,hWinMain,SW_SHOWNORMAL
        invoke        UpdateWindow,hWinMain
       
        .while        TRUE
                invoke        GetMessage,addr @stMsg,0,0,0
                .break .if !eax
                invoke        TranslateMessage,addr @stMsg
                invoke        DispatchMessage,addr @stMsg
        .endw
        mov        eax,@stMsg.wParam

        ret
_WinMain endp
;*********************************

_WndProc                 proc uses ebx esi edi,_hWnd,_uMsg,wParam,lParam

        LOCAL        @dwIndex1
        LOCAL        @stLvi:LV_ITEM
        LOCAL        @stDI:DRAWITEMSTRUCT
        LOCAL        @stRect:RECT
        LOCAL        @stPS:PAINTSTRUCT
        LOCAL        @hDC1:HDC
        LOCAL        @stRect1:RECT
        LOCAL        @stRectSE:RECT
        LOCAL        @stTME:TRACKMOUSEEVENT
        LOCAL        @stPt:POINT
        LOCAL        @hWndTip
        LOCAL        @stPt1:POINT
        LOCAL        @hDCCaption

       
        mov        eax,_uMsg
        .if        eax == WM_CLOSE
                invoke        PostQuitMessage,0
                invoke        DestroyWindow,_hWnd

        .ELSEIF        EAX == WM_DRAWITEM
                mov        eax,wParam
                mov        esi,lParam
                assume        esi:ptr DRAWITEMSTRUCT

                .if        [ESI].CtlType == ODT_BUTTON
                        push        [esi].hwndItem
                        pop        eax
                        .if        eax == hBtMouseSet
                                invoke        _WM_DRAWITEMMODEProc,lParam,hBmpMain,addr szBtMouseSet,        0ff01ffh,0ffffffh,0ff01ffh,0ffffffh;,0afad00h,001111ffh
                        .elseif eax == hBtMouseYes
                                invoke        _WM_DRAWITEMMODEProc,lParam,hBmpMain,addr szBtMouseYes,0bfff11h,00ff1151h,0bfff11h,00ff1151h;,,01fff11h,001111ffh       

                        .endif
                .endif
               
                assume        esi:nothing
                mov        eax,TRUE
                RET

        .else
                invoke        DefWindowProc,_hWnd,_uMsg,wParam,lParam
                ret       
        .endif
       
        xor        eax,eax
        ret

_WndProc endp        
;*********************************

_WM_DRAWITEMSETProc proc uses esi edi ebx ,lParam,_hBmp,_pszString,_dwOnHBCr,_dwOnTextCr,_dwOffHBCr,_dwOFFTextCr                               
                        LOCAL        @stDI:        DRAWITEMSTRUCT
                        LOCAL        @hRgn
                        LOCAL        @hDC
                        LOCAL        @hRectRgn
                        LOCAL        @stRect:RECT
                                mov        esi,lParam
                                assume        esi:ptr DRAWITEMSTRUCT
                               
                                invoke        CreateEllipticRgn,[esi].rcItem.left,[esi].rcItem.top,[esi].rcItem.right,[esi].rcItem.bottom
                                  mov        @hRgn,eax
                       
                               
                                .if [esi].itemState==ODS_FOCUS
                                         
                                        INVOKE        CreateSolidBrush,_dwOnHBCr
                                          invoke        FillRgn,[esi].hdc,@hRgn,eax
                                 
                                        invoke        SetBkMode,[esi].hdc,TRANSPARENT
                                         
                                          invoke        SetTextColor,[esi].hdc ,_dwOnTextCr
                                        invoke        DrawText,[esi].hdc,_pszString,-1,addr [esi].rcItem, DT_VCENTER  OR DT_CENTER  or DT_SINGLELINE;
                                  invoke        SetWindowRgn,[esi].hwndItem,@hRgn,TRUE
                               
                                .ELSE
                               
                                        INVOKE        CreateSolidBrush,_dwOffHBCr
                                          invoke        FillRgn,[esi].hdc,@hRgn,eax
                                         
                                        invoke        SetBkMode,[esi].hdc,TRANSPARENT
                                         
                                          invoke        SetTextColor,[esi].hdc ,_dwOFFTextCr
                                        invoke        DrawText,[esi].hdc,_pszString,-1,addr [esi].rcItem,DT_VCENTER OR DT_CENTER or DT_SINGLELINE
                                  invoke        SetWindowRgn,[esi].hwndItem,@hRgn,TRUE
                               
                                .endif

                        invoke        DeleteObject,@hRgn
                        invoke        DeleteObject,_hBmp

                        assume        esi:nothing
                       
                        ret
_WM_DRAWITEMSETProc endp
2012-3-16 16:47
0
雪    币: 506
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主能写个直接从廐层驱动直接发按鎌的东东不。
ring3层的好多用不了啊。
2012-3-16 16:55
0
雪    币: 309
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵,好东西,能断续改进就好了
2012-3-16 18:39
0
雪    币: 183
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
楼主汇编功底真NX
2012-3-16 18:44
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看不大懂,相信楼主是一个高手了
2012-3-16 19:17
0
雪    币: 15
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
汇编的干活 真的看不懂 顶一下楼主吧
2012-4-7 22:00
0
游客
登录 | 注册 方可回帖
返回
//