Уроки Iczelion'а от Sulaiman Chang на диалекте FASM

Тема в разделе "FASM", создана пользователем Mikl___, 12 дек 2016.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 17. Динамические библиотеки

    Текст tut_17a
    Код (ASM):
    1. format PE GUI 4.0 DLL
    2. entry DllMain
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         DllErrBoxTitle  db 'DllMsgBox - Error',0
    8.  
    9. section '.code' code readable executable
    10.         proc    DllMain, hinstDll, fdwReason, lpvReserved
    11.                 mov  eax,TRUE
    12.                 return
    13.         endp
    14.      
    15.         proc    DllErrBox, hWnd, errMsg
    16.                 invoke  MessageBox,[hWnd],[errMsg],DllErrBoxTitle,MB_OK + MB_ICONERROR
    17.                 return
    18.         endp
    19.  
    20. section '.idata' import data readable
    21.         library USER32, 'USER32.DLL'
    22.  
    23.         import  USER32,\
    24.                 MessageBox,     'MessageBoxA'
    25.  
    26. section '.edata' export data readable
    27.         export  'TUT_17.DLL',\
    28.                 DllErrBox,      'DllErrBox'
    29.  
    30. section '.reloc' fixups data discardable
    Текст tut_17b.asm
    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         msg1    db '[code]',13,10
    8.                 db '      Invoke DllErrBox,HWND_DESKTOP,msg1',13,10,13,10
    9.                 db '      import TUT_17A,\',13,10
    10.                 db '      DllErrBox,   ''DllErrBox''',13,10
    11.                 db '[/codе]',0
    12.  
    13. section '.code' code readable executable
    14.         start:
    15.                 invoke  DllErrBox,HWND_DESKTOP,msg1
    16.                 invoke  ExitProcess,0
    17.  
    18. section '.idata' import data readable
    19.         library KERNEL32,'KERNEL32.DLL',\
    20.                 TUT_17A, 'TUT_17A.DLL'
    21.      
    22.         import  KERNEL32,\
    23.                 ExitProcess,    'ExitProcess'
    24.      
    25.         import  TUT_17A,\
    26.                 DllErrBox,      'DllErrBox'
    Текст tut_17c.asm
    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         dllName         db 'TUT_17A.DLL',0              ;dll name that to be loaded
    8.         funcName        db 'DllErrBox',0                ;function / proc name that wish to be called
    9.         funcAddr        dd ?                            ;store function address
    10.      
    11.         msgBoxTitle     db 'Error',0
    12.         msgBoxDll       db 'The Requested DLL not found!',0
    13.         msgBoxProc      db 'The Requested Procedure not found!',0
    14.      
    15.         msg1            db '[code]',13,10
    16.                         db '      invoke  LoadLibrary,dllName',13,10
    17.                         db '      invoke  GetProcAddress,eax,funcName',13,10
    18.                         db '      invoke  funcAddr,HWND_DESKTOP,msg1',13,10
    19.                         db '[/codе]',0
    20.  
    21. section '.code' code readable executable
    22.         start:
    23.                 invoke  LoadLibrary,dllName
    24.                         cmp  eax,NULL                   ;the dll not found
    25.                         je   dll_not_found
    26.                 invoke  GetProcAddress,eax,funcName
    27.                         cmp  eax,NULL                   ;requested function not found
    28.                         je   proc_not_found
    29.                         mov  [funcAddr],eax
    30.                 invoke  funcAddr,HWND_DESKTOP,msg1
    31.                         jmp  exit
    32.              
    33.                 dll_not_found:
    34.                         invoke  MessageBox,HWND_DESKTOP,msgBoxDll,msgBoxTitle,MB_OK + MB_ICONERROR
    35.                                 jmp  exit
    36.                 proc_not_found:
    37.                         invoke  MessageBox,HWND_DESKTOP,msgBoxProc,msgBoxTitle,MB_OK + MB_ICONERROR
    38.                                 jmp  exit
    39.         exit:
    40.                         invoke  ExitProcess,0
    41.  
    42. section '.idata' import data readable
    43.         library KERNEL32,'KERNEL32.DLL',\
    44.                 USER32,  'USER32.DLL'
    45.      
    46.         import  KERNEL32,\
    47.                 GetProcAddress, 'GetProcAddress',\
    48.                 LoadLibrary,    'LoadLibraryA',\
    49.                 ExitProcess,    'ExitProcess'
    50.  
    51.         import  USER32,\
    52.                 MessageBox,     'MessageBoxA'
    Результат
    [​IMG]
    tut_17b.asm​
    [​IMG]

    tut_17c.asm​
     

    Вложения:

    • tut_17b.gif
      tut_17b.gif
      Размер файла:
      3 КБ
      Просмотров:
      2.437
    • tut_17c.gif
      tut_17c.gif
      Размер файла:
      3,1 КБ
      Просмотров:
      2.414
    rococo795 нравится это.
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 18. Простые управляющие элементы

    исходный текст и ехе-файл здесь
    Код (ASM):
    1. format PE GUI
    2. include 'win32ax.inc'
    3.  pb1             equ 1
    4.  sb1             equ 2
    5.  tm1             equ 3
    6.  btn1            equ 4
    7.  PBS_SMOOTH      equ 1
    8.  PBS_VERTICAL    equ 4
    9.    start:       xor ebx,ebx
    10.                 mov edi,wTitle
    11.                 mov esi,400000h
    12.                 ; +------------------------------+
    13.                 ; | registering the window class |
    14.                 ; +------------------------------+
    15.                 invoke RegisterClass,esp,ebx,window_procedure,ebx,\
    16.                        ebx,esi,ebx,10005h,COLOR_BTNFACE+1,ebx,edi
    17.                        push ebx
    18.                        push esi
    19.                        shl esi,9
    20.                 invoke CreateWindowEx,ebx,edi,edi,\
    21.                        WS_OVERLAPPEDWINDOW+WS_VISIBLE- WS_MAXIMIZEBOX - WS_SIZEBOX,\
    22.                        esi,esi,394,240,ebx,ebx
    23.                        pop esi
    24.                        mov  edi,eax
    25.                 invoke CreateWindowEx,WS_EX_DLGMODALFRAME,progressclass,ebx,WS_CHILD + WS_VISIBLE,\
    26.                        10,10,367,22,eax,pb1,esi,ebx
    27.                        mov  [pb1H],eax
    28.                 invoke SendMessage,eax,PBM_SETSTEP,2,ebx
    29.                 invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_STATICEDGE,progressclass,ebx,WS_CHILD + WS_VISIBLE + PBS_SMOOTH,\
    30.                        10,40,367,22,edi,pb1,esi,ebx
    31.                        mov  [pb2H],eax
    32.                 invoke SendMessage,eax,PBM_SETSTEP,2,ebx
    33.                 invoke CreateWindowEx,ebx,progressclass,ebx,WS_CHILD + WS_VISIBLE + PBS_VERTICAL,\
    34.                        305,80,25,100,edi,pb1,esi,ebx
    35.                        mov  [pb3H],eax
    36.                 invoke SendMessage,eax,PBM_SETSTEP,2,ebx
    37.                 invoke CreateWindowEx,ebx,progressclass,ebx,WS_CHILD + WS_VISIBLE + PBS_SMOOTH + PBS_VERTICAL,\
    38.                        350,80,25,100,edi,pb1,esi,ebx
    39.                        mov  [pb4H],eax
    40.                 invoke SendMessage,eax,PBM_SETSTEP,2,ebx
    41.                 invoke CreateStatusWindow,WS_CHILD + WS_VISIBLE,ebx,edi,sb1
    42.                        mov  [sb1H],eax
    43.                 invoke CreateWindowEx,ebx,"BUTTON","Click To Start",\
    44.                        WS_CHILD + WS_VISIBLE + BS_PUSHBUTTON,\
    45.                        10,90,100,30,edi,btn1,esi,ebx
    46.                        mov  [btn1H],eax
    47.                 invoke CreateSolidBrush,0FF0000h
    48.                        mov [blueBrush],eax
    49.                        mov ebp,esp
    50.                 ;+---------------------------+
    51.                 ;| entering the message loop |
    52.                 ;+---------------------------+
    53. window_message_loop_start: invoke  GetMessage,ebp,ebx,ebx,ebx
    54.                        invoke  DispatchMessage,ebp
    55.                        jmp window_message_loop_start
    56.    ;+----------------------+
    57.    ;| the window procedure |
    58.    ;+----------------------+
    59. proc window_procedure hWnd, uMsg, wParam, lParam
    60. local ps:PAINTSTRUCT
    61. local buffer[20]:BYTE
    62. local oldBrush:DWORD
    63.                 xor ebx,ebx
    64.                 mov eax,[uMsg]
    65.                 mov edi,[hWnd]
    66.                 dec eax;cmp [uMsg],WM_DESTROY=2
    67.                 dec eax
    68.                 je  .wmDESTROY
    69.                 sub eax,WM_PAINT-WM_DESTROY;cmp [uMsg],WM_PAINT=0Fh
    70.                 je  .wmPAINT
    71.                 sub eax,WM_COMMAND-WM_PAINT;cmp [uMsg],WM_COMMAND=111h
    72.                 je  .wmCOMMAND
    73.                 dec eax;cmp [uMsg],WM_TIMER=113h
    74.                 dec eax
    75.                 je  .wmTIMER
    76. .wmDefault:     leave
    77.                 jmp [DefWindowProc]
    78. .wmDESTROY:     invoke ExitProcess,ebx
    79. .wmPAINT:       invoke BeginPaint,edi,esp
    80.                 invoke SelectObject,dword[ps],[blueBrush]
    81.                 mov [oldBrush],eax
    82.                 finit
    83.                 fld [angle]
    84.                 fsincos
    85.                 push 80.0
    86.                 push 80.0
    87.                 fmul dword[esp]
    88.                 fistp dword[esp]
    89.                 fmul dword[esp+4]
    90.                 fchs
    91.                 fist dword[esp+4]
    92.                 add dword[esp+4],130
    93.                 add dword[esp],190
    94.                 invoke Pie,dword[ps],110,80,270,180,190,80
    95.                 invoke SelectObject,dword[ps],[oldBrush]
    96.                 invoke EndPaint,edi,esp
    97.                 jmp .wmBYE
    98. .wmCOMMAND:     cmp [wParam],BN_CLICKED shl 16 or 4
    99.                 jne .wmBYE
    100. .wmCOMMAND_btn1: invoke SetTimer,edi,tm1,100,ebx
    101.                 invoke EnableWindow,[btn1H],ebx
    102.                 jmp .wmBYE
    103. .wmTIMER:       lea esi,[SendMessage]
    104.                 mov edi,3
    105. @@:             push ebx ebx PBM_STEPIT [pb1H+edi*4]
    106.                 call dword[esi];invoke SendMessage,[pb1H],PBM_STEPIT,ebx,ebx
    107.                 push ebx ebx PBM_GETPOS [pb1H+edi*4]
    108.                 call dword[esi];invoke SendMessage,[pb1H],PBM_GETPOS,ebx,ebx
    109.                 dec edi
    110.                 jns @b
    111.                 lea edi,[buffer]
    112.                 cinvoke wsprintf,edi,template,eax
    113.                 push edi ebx SB_SETTEXT [sb1H]
    114.                 call dword[esi];invoke SendMessage,[sb1H],SB_SETTEXT,ebx,ebp
    115.                 invoke InvalidateRect,[hWnd],ebx,ebx
    116.                 finit
    117.                 fld [delta]
    118.                 fadd [angle]
    119.                 fst [angle]
    120.                 sub [pb1StepCurrent],2
    121.                 jne .wmBYE
    122.                 invoke  KillTimer,[hWnd],tm1
    123.                 push aText1 edi SB_SETTEXT [sb1H]
    124.                 call dword[esi];invoke SendMessage,[sb1H],SB_SETTEXT,ebx," 100% Completed"
    125.                 invoke MessageBox,[hWnd],aText2,aCaption,MB_OK + MB_ICONWARNING
    126. .wmBYE:         ret
    127. endp          
    128. ;------------------------------------------------------------
    129. template db " Process : %i %%",0
    130. aCaption db 'Virus Detected - Norton Antivirus',0
    131. aText1  db ' 100% Completed',0
    132. aText2  db      'Norton Antivirus detected "tut_18.exe" contained virus.',13,10
    133.                 db 'Please remove this application!',0
    134. wTitle          db 'Iczelion Tutorial #18: Common Controls',0
    135.         pb1H            rd 1
    136.         pb2H            rd 1
    137.         pb3H            rd 1
    138.         pb4H            rd 1
    139.         pb1StepCurrent  dd 100                    ;current step value
    140.         sb1H            rd 1
    141.         btn1H           rd 1
    142.         angle           dd 1.5795229730548682671159401454822;90.5*pi/180
    143.         delta           dd 0.12548917321839229658081336625433;7.19*pi/180
    144.         progressclass   db 'msctls_progress32',0
    145.         blueBrush       rd 1
    146. ;-------------------------------------------------------------
    147. data import
    148.     library     KERNEL32, 'KERNEL32.DLL',\
    149.                 USER32,   'USER32.DLL',\
    150.                 gdi32,    'gdi32.dll',\
    151.                 COMCTL32, 'COMCTL32.DLL'
    152.     import      KERNEL32,\
    153.                 ExitProcess,            'ExitProcess'
    154.     import      gdi32,\
    155.                 Pie,                            'Pie',\
    156.                 SelectObject,           'SelectObject',\
    157.                 CreateSolidBrush,       'CreateSolidBrush'
    158.     import      USER32,\
    159.                 RegisterClass,          'RegisterClassA',\
    160.                 CreateWindowEx,         'CreateWindowExA',\
    161.                 DefWindowProc,          'DefWindowProcA',\
    162.                 SendMessage,            'SendMessageA',\
    163.                 GetMessage,                     'GetMessageA',\
    164.                 SetTimer,                       'SetTimer',\
    165.                 KillTimer,                      'KillTimer',\
    166.                 wsprintf,                       'wsprintfA',\
    167.                 MessageBox,                     'MessageBoxA',\
    168.                 EnableWindow,           'EnableWindow',\
    169.                 DestroyWindow,          'DestroyWindow',\
    170.                 DispatchMessage,        'DispatchMessageA',\
    171.                 BeginPaint,                     'BeginPaint',\
    172.                 EndPaint,                       'EndPaint',\
    173.                 InvalidateRect,         'InvalidateRect',\
    174.                 PostQuitMessage,        'PostQuitMessage'
    175.     import      COMCTL32,\
    176.                 CreateStatusWindow,     'CreateStatusWindow'
    177. end data
    Результат
    [​IMG]
     

    Вложения:

    • 18.png
      18.png
      Размер файла:
      68,1 КБ
      Просмотров:
      2.438
    • tut_18.zip
      Размер файла:
      3,3 КБ
      Просмотров:
      798
    Последнее редактирование: 17 дек 2016
    rococo795 нравится это.
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 19. Tree View Control

    исходный текст и ехе-файл здесь
    Код (ASM):
    1. format PE GUI
    2. include 'win32ax.inc'
    3. ;------------------------------------------------
    4.    start:       xor ebx,ebx
    5.                 mov edi,wTitle
    6.                 mov esi,400000h
    7.                 ; +------------------------------+
    8.                 ; | registering the window class |
    9.                 ; +------------------------------+
    10.                 invoke RegisterClass,esp,ebx,window_procedure,ebx,\
    11.                 ebx,esi,ebx,10005h,COLOR_BTNFACE+1,ebx,edi
    12.                 ; +--------------------------+
    13.                 ; | creating the main window |
    14.                 ; +--------------------------+
    15.                 push ebx esi ebx ebx 400 200
    16.                 shl esi,9
    17.                 invoke CreateWindowEx,WS_EX_CLIENTEDGE,edi,edi,WS_OVERLAPPEDWINDOW+WS_VISIBLE,\
    18.                 esi,esi
    19.                 mov ebp,esp
    20.    ;+---------------------------+
    21.    ;| entering the message loop |
    22.    ;+---------------------------+
    23.    @@:          invoke  GetMessage,ebp,ebx,ebx,ebx
    24.                 invoke  DispatchMessage,ebp
    25.                 jmp  @r
    26.    ;+----------------------+
    27.    ;| the window procedure |
    28.    ;+----------------------+
    29. proc window_procedure hWnd, uMsg, wParam, lParam
    30.                 mov esi,[tv1H]
    31.                 cmp  [uMsg],WM_CREATE
    32.                 je   wmCREATE
    33.                 cmp  [uMsg],WM_DESTROY
    34.                 je   wmDESTROY
    35.                 cmp  [uMsg],WM_NOTIFY
    36.                 je   wmNOTIFY
    37.                 cmp  [uMsg],WM_MOUSEMOVE
    38.                 je   wmMOUSEMOVE
    39.                 cmp  [uMsg],WM_LBUTTONUP
    40.                 je   wmLBUTTONUP
    41. wmDEFAULT:     leave
    42.                 jmp [DefWindowProc]
    43. wmMOUSEMOVE:   cmp  [imgl1Drag],0
    44.                 je  wmDEFAULT
    45.                 movzx eax,word[lParam]
    46.                 movzx ecx,word[lParam+2]
    47.                 lea edi,[tv1HitInfo]
    48.                 mov  [edi+TV_HITTESTINFO.pt.x],eax
    49.                 mov  [edi+TV_HITTESTINFO.pt.y],ecx
    50.                 invoke  ImageList_DragMove,eax,ecx
    51.                 invoke  ImageList_DragShowNolock,0
    52.                 invoke  SendMessage,esi,TVM_HITTEST,0,edi
    53.                 or eax,eax
    54.                 jz      @f
    55.                 invoke  SendMessage,esi,TVM_SELECTITEM,TVGN_DROPHILITE,eax
    56.   @@:           invoke  ImageList_DragShowNolock,TRUE
    57.                 jmp  wmBYE
    58. wmNOTIFY:       mov  edi,[lParam]
    59.                 cmp  [edi + NM_TREEVIEW.hdr.code],TVN_BEGINDRAG
    60.                 jne  wmBYE
    61.                 invoke  SendMessage,esi,TVM_CREATEDRAGIMAGE,0,[edi + NM_TREEVIEW.itemNew.hItem]
    62.                 mov  [imgl1DragH],eax
    63.                 invoke  ImageList_BeginDrag,eax,0,0,0
    64.                 invoke  ImageList_DragEnter,esi,[edi + NM_TREEVIEW.ptDrag.x],[edi + NM_TREEVIEW.ptDrag.y]
    65.                 invoke  SetCapture,[hWnd];eax
    66.                 or  [imgl1Drag],TRUE
    67.                 jmp  wmBYE
    68. wmLBUTTONUP:    cmp [imgl1Drag],0
    69.                 jz  wmBYE
    70.                 invoke  ImageList_DragLeave,esi
    71.                 invoke  ImageList_EndDrag
    72.                 invoke  ImageList_Destroy,[imgl1DragH]
    73.                 invoke  SendMessage,esi,TVM_GETNEXTITEM,TVGN_DROPHILITE,0
    74.                 invoke  SendMessage,esi,TVM_SELECTITEM,TVGN_CARET,eax
    75.                 invoke  SendMessage,esi,TVM_SELECTITEM,TVGN_DROPHILITE,0
    76.                 invoke  ReleaseCapture
    77.                 and [imgl1Drag],0
    78.                 jmp  wmBYE
    79. wmCREATE:       invoke  CreateWindowEx,0,ctlClsNameTv,0,\
    80.                 WS_VISIBLE + WS_CHILD + WS_BORDER + TVS_HASBUTTONS + TVS_LINESATROOT + TVS_HASLINES,\
    81.                 0,0,200,400,[hWnd],0,400000h,0
    82.                 mov  [tv1H],eax
    83.                 mov esi,eax
    84.                 invoke  ImageList_Create,16,16,ILC_COLOR16,2,10      ;with mask
    85.                 mov  edi,eax
    86.                 invoke  LoadBitmap,400000h,31
    87.                 invoke  ImageList_Add,edi,eax,0,eax         ;with mask
    88.                 invoke  DeleteObject
    89.                 invoke  SendMessage,esi,TVM_SETIMAGELIST,0,edi
    90.                 lea edi,[tv1Insert]
    91.                 mov  [edi+TV_INSERTSTRUCT.item.mask],TVIF_TEXT+TVIF_IMAGE+TVIF_SELECTEDIMAGE
    92.                 mov  [edi+TV_INSERTSTRUCT.item.pszText],tv1Txt1
    93.                 mov  [edi+TV_INSERTSTRUCT.item.iImage],0
    94.                 or  [edi+TV_INSERTSTRUCT.item.iSelectedImage],1
    95.                 invoke  SendMessage,[tv1H],TVM_INSERTITEM,0,edi
    96.                 mov  [edi+TV_INSERTSTRUCT.hParent],eax
    97.                 mov  [edi+TV_INSERTSTRUCT.hInsertAfter],TVI_LAST
    98.                 mov  [edi+TV_INSERTSTRUCT.item.pszText],tv1Txt2
    99.                 invoke  SendMessage,esi,TVM_INSERTITEM,0,edi
    100.                 mov  [edi+TV_INSERTSTRUCT.item.pszText],tv1Txt3
    101.                 invoke  SendMessage,esi,TVM_INSERTITEM,0,edi
    102.                 and [imgl1Drag],0
    103. wmBYE:          xor eax,eax
    104.                 ret
    105. wmDESTROY:      invoke  ExitProcess,0
    106. endp
    107. ;--------------------------------------------------------------------
    108. wTitle        db 'Iczelion Tutorial #19:Tree View Control in FASM',0
    109.         ctlClsNameTv    db 'SysTreeView32',0
    110.         tv1H            rd 1
    111.         tv1Txt1         db 'Node - Parent',0
    112.         tv1Txt2         db 'Node - Child 1',0
    113.         tv1Txt3         db 'Node - Child 2',0
    114.         imgl1Drag       dd FALSE
    115.         tv1Insert       TV_INSERTSTRUCT 0,TVI_ROOT
    116.         tv1HitInfo      TV_HITTESTINFO
    117.         imgl1DragH      rd 1
    118. ;---------------------------------------------------------------------
    119. data import
    120.     library     KERNEL32, 'KERNEL32.DLL',\
    121.                 USER32,   'USER32.DLL',\
    122.                 GDI32,    'GDI32.DLL',\
    123.                 COMCTL32, 'COMCTL32.DLL'
    124.  
    125.     import      KERNEL32,\
    126.                 ExitProcess,            'ExitProcess'
    127.     import      USER32,\
    128.                 RegisterClass,          'RegisterClassA',\
    129.                 CreateWindowEx,         'CreateWindowExA',\
    130.                 DefWindowProc,          'DefWindowProcA',\
    131.                 LoadBitmap,             'LoadBitmapA',\
    132.                 SendMessage,            'SendMessageA',\
    133.                 GetMessage,             'GetMessageA',\
    134.                 MessageBox,             'MessageBoxA',\
    135.                 SetCapture,             'SetCapture',\
    136.                 ReleaseCapture,         'ReleaseCapture',\
    137.                 GetParent,              'GetParent',\
    138.                 DestroyWindow,          'DestroyWindow',\
    139.                 DispatchMessage,        'DispatchMessageA'
    140.     import      GDI32,\
    141.                 DeleteObject,           'DeleteObject'
    142.     import      COMCTL32,\
    143.                 ImageList_Create,       'ImageList_Create',\
    144.                 ImageList_Add,          'ImageList_Add',\
    145.                 ImageList_AddMasked,    'ImageList_AddMasked',\
    146.                 ImageList_GetImageCount,'ImageList_GetImageCount',\
    147.                 ImageList_BeginDrag,    'ImageList_BeginDrag',\
    148.                 ImageList_EndDrag,      'ImageList_EndDrag',\
    149.                 ImageList_DragEnter,    'ImageList_DragEnter',\
    150.                 ImageList_DragMove,     'ImageList_DragMove',\
    151.                 ImageList_DragLeave,    'ImageList_DragLeave',\
    152.                 ImageList_DragShowNolock,'ImageList_DragShowNolock',\
    153.                 ImageList_Destroy,      'ImageList_Destroy'
    154. end data
    155. ;---------------------------------------
    156. section '.rsrc' resource data readable
    157.         directory       RT_BITMAP, appBmp
    158.      
    159.         resource        appBmp,\
    160.                         31,LANG_NEUTRAL,bmpA
    161.      
    162.         bitmap          bmpA, 'Images\list.bmp'
    [​IMG]
    list.bmp
    Результат
    [​IMG]
     

    Вложения:

    • tut_19.zip
      Размер файла:
      3,5 КБ
      Просмотров:
      756
    • list.png
      list.png
      Размер файла:
      296 байт
      Просмотров:
      2.286
    • 19.png
      19.png
      Размер файла:
      17 КБ
      Просмотров:
      2.298
    Последнее редактирование: 17 дек 2016
    rococo795 нравится это.
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 20. Сабклассинг окна

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         wndH            dd ?
    8.         insH            dd ?
    9.         wndClsName      db 'TUT_20',0
    10.         wndTitle        db 'Tutorial 20',0
    11.         wndProcAddr     dd ?
    12.  
    13.         wndCls  WNDCLASS
    14.         wndMsg  MSG
    15.        
    16.         ctlClsNameEdit  db 'EDIT',0
    17.        
    18.         edit1H          dd ?
    19.         edit1Txt1       db 'A simple HEX edit control!',0
    20.        
    21.        
    22. section '.code' code readable executable
    23.    start:
    24.         invoke  GetModuleHandle,0
    25.                 mov  [insH],eax
    26.                 mov  [wndCls.hInstance],eax
    27.                 mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    28.                 mov  [wndCls.lpfnWndProc],window_procedure
    29.                 mov  [wndCls.lpszClassName],wndClsName
    30.                 mov  [wndCls.hbrBackground],COLOR_BTNFACE+1
    31.         invoke  LoadIcon,NULL,IDI_APPLICATION
    32.                 mov  [wndCls.hIcon],eax
    33.         invoke  LoadCursor,NULL,IDC_ARROW
    34.                 mov  [wndCls.hCursor],eax
    35.         invoke  RegisterClass,wndCls
    36.  
    37.         invoke  CreateWindowEx,WS_EX_CLIENTEDGE,\
    38.                 wndClsName,wndTitle,\
    39.                 WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    40.                 CW_USEDEFAULT,CW_USEDEFAULT,\
    41.                 400,240,\
    42.                 NULL,NULL,[insH],NULL
    43.                 mov  [wndH],eax
    44.  
    45.    ;+---------------------------+
    46.    ;| entering the message loop |
    47.    ;+---------------------------+
    48.    window_message_loop_start:
    49.         invoke  GetMessage,wndMsg,NULL,0,0
    50.                 or    eax,eax
    51.                 je    window_message_loop_end
    52.         invoke  TranslateMessage,wndMsg
    53.         invoke  DispatchMessage,wndMsg
    54.                 jmp     window_message_loop_start
    55.  
    56.    window_message_loop_end:
    57.         invoke  ExitProcess,0
    58.  
    59.    ;+----------------------+
    60.    ;| the window procedure |
    61.    ;+----------------------+
    62.    proc window_procedure,hWnd,uMsg,wParam,lParam
    63.                 push ebx esi edi
    64.                 cmp  [uMsg],WM_CREATE
    65.                 je   wmCREATE
    66.                 cmp  [uMsg],WM_DESTROY
    67.                 je   wmDESTROY
    68.        
    69.  
    70.         wmDEFAULT:
    71.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    72.                         jmp  wmBYE
    73.         wmCREATE:
    74.                 invoke  CreateWindowEx,WS_EX_CLIENTEDGE,ctlClsNameEdit,NULL,\
    75.                         WS_CHILD + WS_VISIBLE + WS_BORDER,\
    76.                         20,20,300,24,\
    77.                         [hWnd],NULL,[insH],NULL
    78.                         mov  [edit1H],eax
    79.                 invoke  SetFocus,eax
    80.                 invoke  SetWindowLong,[edit1H],GWL_WNDPROC,edit1_procedure
    81.                         mov  [wndProcAddr],eax
    82.                         jmp  wmBYE
    83.         wmDESTROY:
    84.                 invoke  PostQuitMessage,0
    85.  
    86.         wmBYE:
    87.                 pop edi esi ebx
    88.                 return
    89.    endp
    90.    
    91.    proc edit1_procedure,hWnd,uMsg,wParam,lParam
    92.                 push ebx esi edi
    93.                 cmp  [uMsg],WM_CHAR
    94.                 je   edit1_wmCHAR
    95.                 cmp  [uMsg],WM_KEYDOWN
    96.                 je   edit1_wmKEYDOWN
    97.                 jmp  @f
    98.        
    99.         edit1_wmCHAR:
    100.                         mov  eax,[wParam]
    101.                         cmp  al,VK_BACK         ;compare with virtual key BACKSPACE
    102.                         je   @f
    103.                         cmp  al,0x30            ;compare with ascii 0
    104.                         jb   edit1_wmBYE
    105.                         cmp  al,0x39            ;compare with ascii 9
    106.                         jbe  @f
    107.                         cmp  al,0x41            ;compare with ascii A
    108.                         jb   edit1_wmBYE
    109.                         cmp  al,0x46            ;compare with ascii F
    110.                         jbe  @f
    111.                         cmp  al,0x61            ;compare with ascii a
    112.                         jb   edit1_wmBYE
    113.                         cmp  al,0x66            ;compare with ascii f
    114.                         jbe  wmCHAR_add
    115.                         jmp  edit1_wmBYE        ;something else
    116.                
    117.                 wmCHAR_add:
    118.                         sub  [wParam],0x20      ;so our AL become big letter
    119.                         jmp  @f
    120.                 @@:
    121.                         invoke  CallWindowProc,[wndProcAddr],[hWnd],[uMsg],[wParam],[lParam]
    122.                                 jmp  edit1_wmBYE
    123.        
    124.         edit1_wmKEYDOWN:
    125.                         mov  eax,[wParam]
    126.                         cmp  al,VK_RETURN       ;compare with virtual key RETURN
    127.                         jne  @b
    128.                 invoke  MessageBox,[hWnd],edit1Txt1,wndTitle,MB_OK
    129.                 invoke  SetFocus,[hWnd]
    130.        
    131.         edit1_wmBYE:
    132.                         pop  edi esi ebx
    133.                         return
    134.    endp
    135.  
    136. section '.idata' import data readable
    137.     library     KERNEL32, 'KERNEL32.DLL',\
    138.                 USER32,   'USER32.DLL'
    139.    
    140.     import      KERNEL32,\
    141.                 GetModuleHandle,        'GetModuleHandleA',\
    142.                 ExitProcess,            'ExitProcess'
    143.     import      USER32,\
    144.                 RegisterClass,          'RegisterClassA',\
    145.                 CreateWindowEx,         'CreateWindowExA',\
    146.                 DefWindowProc,          'DefWindowProcA',\
    147.                 LoadCursor,             'LoadCursorA',\
    148.                 LoadIcon,               'LoadIconA',\
    149.                 SendMessage,            'SendMessageA',\
    150.                 GetMessage,             'GetMessageA',\
    151.                 MessageBox,             'MessageBoxA',\
    152.                 SetFocus,               'SetFocus',\
    153.                 SetWindowLong,          'SetWindowLongA',\
    154.                 CallWindowProc,         'CallWindowProcA',\
    155.                 DestroyWindow,          'DestroyWindow',\
    156.                 TranslateMessage,       'TranslateMessage',\
    157.                 DispatchMessage,        'DispatchMessageA',\
    158.                 PostQuitMessage,        'PostQuitMessage'
    159.  
    Результат
    [​IMG]
     

    Вложения:

    • tut_20.gif
      tut_20.gif
      Размер файла:
      4,1 КБ
      Просмотров:
      2.572
    rococo795 нравится это.
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 21. Пайп

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. struct SECURITY_ATTRIBUTES
    7.         .nLength                dd ?
    8.         .lpSecurityDescriptor   dd ?
    9.         .bInheritHandle         dd ?
    10. ends
    11.  
    12. MI_CSCRIPT      equ 100
    13.  
    14. section '.data' data readable writeable
    15.         wndH            dd ?
    16.         insH            dd ?
    17.         wndClsName      db 'TUT_21',0
    18.         wndTitle        db 'Tutorial 21',0
    19.  
    20.         wndCls  WNDCLASS
    21.         wndMsg  MSG
    22.  
    23.         pipeSecAttr     SECURITY_ATTRIBUTES
    24.         pipeReadH       dd ?
    25.         pipeWriteH      dd ?
    26.         pipeRead        dd ?
    27.         pipeBuffer      rb 0x400
    28.  
    29.         pro1StartInfo   STARTUPINFO
    30.         pro1Info        PROCESS_INFORMATION
    31.         pro1CmdLine     db 'cscript',0
    32.  
    33.         ctlClsNameEdit  db 'EDIT',0
    34.        
    35.         edit1H          dd ?
    36.        
    37.         errStr1         db 'Error - Pipe Creation Failed!',0
    38.         errStr2         db 'Error - Process Creation Failed!',0
    39.        
    40. section '.code' code readable executable
    41.    start:
    42.         invoke  GetModuleHandle,0
    43.                 mov  [insH],eax
    44.                 mov  [wndCls.hInstance],eax
    45.                 mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    46.                 mov  [wndCls.lpfnWndProc],window_procedure
    47.                 mov  [wndCls.lpszClassName],wndClsName
    48.                 mov  [wndCls.lpszMenuName],30
    49.                 mov  [wndCls.hbrBackground],COLOR_APPWORKSPACE
    50.         invoke  LoadIcon,NULL,IDI_APPLICATION
    51.                 mov  [wndCls.hIcon],eax
    52.         invoke  LoadCursor,NULL,IDC_ARROW
    53.                 mov  [wndCls.hCursor],eax
    54.         invoke  RegisterClass,wndCls
    55.  
    56.         invoke  CreateWindowEx,WS_EX_CLIENTEDGE,\
    57.                 wndClsName,wndTitle,\
    58.                 WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    59.                 CW_USEDEFAULT,CW_USEDEFAULT,\
    60.                 600,350,\
    61.                 NULL,NULL,[insH],NULL
    62.                 mov  [wndH],eax
    63.  
    64.    ;+---------------------------+
    65.    ;| entering the message loop |
    66.    ;+---------------------------+
    67.    window_message_loop_start:
    68.         invoke  GetMessage,wndMsg,NULL,0,0
    69.                 or    eax,eax
    70.                 je    window_message_loop_end
    71.         invoke  TranslateMessage,wndMsg
    72.         invoke  DispatchMessage,wndMsg
    73.                 jmp     window_message_loop_start
    74.  
    75.    window_message_loop_end:
    76.         invoke  ExitProcess,0
    77.  
    78.    ;+----------------------+
    79.    ;| the window procedure |
    80.    ;+----------------------+
    81.    proc window_procedure,hWnd,uMsg,wParam,lParam
    82.                 push ebx esi edi
    83.                 cmp  [uMsg],WM_CREATE
    84.                 je   wmCREATE
    85.                 cmp  [uMsg],WM_SIZE
    86.                 je   wmSIZE
    87.                 cmp  [uMsg],WM_COMMAND
    88.                 je   wmCOMMAND
    89.                 cmp  [uMsg],WM_CTLCOLOREDIT
    90.                 je   wmCTLCOLOREDIT
    91.                 cmp  [uMsg],WM_DESTROY
    92.                 je   wmDESTROY
    93.        
    94.  
    95.         wmDEFAULT:
    96.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    97.                         jmp  wmBYE
    98.         wmCTLCOLOREDIT:
    99.                 invoke  SetTextColor,[wParam],0x00C9B5AF
    100.                 invoke  SetBkColor,[wParam],0x00000000
    101.                 invoke  GetStockObject,BLACK_BRUSH
    102.                         jmp  wmBYE
    103.         wmCOMMAND:
    104.                         cmp  [wParam],0xFFFF and MI_CSCRIPT
    105.                         je   wmCOMMAND_MI_CSCRIPT
    106.                         jmp  wmBYE
    107.                
    108.                 wmCOMMAND_MI_CSCRIPT:
    109.                                 mov  [pipeSecAttr.nLength], sizeof.SECURITY_ATTRIBUTES
    110.                                 mov  [pipeSecAttr.lpSecurityDescriptor],NULL
    111.                                 mov  [pipeSecAttr.bInheritHandle],TRUE
    112.                         invoke  CreatePipe,pipeReadH,pipeWriteH,pipeSecAttr,NULL
    113.                                 cmp  eax,NULL
    114.                                 je   MI_CSCRIPT_error_pipe
    115.                                 mov  [pro1StartInfo.cb],sizeof.STARTUPINFO
    116.                         invoke  GetStartupInfo,pro1StartInfo
    117.                                 mov  eax,[pipeWriteH]
    118.                                 mov  [pro1StartInfo.hStdOutput],eax
    119.                                 mov  [pro1StartInfo.hStdError],eax
    120.                                 mov  [pro1StartInfo.dwFlags],STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES
    121.                                 mov  [pro1StartInfo.wShowWindow],SW_HIDE
    122.                                 ;+----------------+
    123.                                 ;| create process |
    124.                                 ;+----------------+
    125.                         invoke  CreateProcess,NULL,pro1CmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,pro1StartInfo,pro1Info
    126.                                 cmp  eax,NULL
    127.                                 je   MI_CSCRIPT_error_process
    128.                         @@:
    129.                         invoke  CloseHandle,[pipeWriteH]
    130.                                 cmp  eax,TRUE
    131.                                 jne  @b
    132.                         invoke  RtlZeroMemory,pipeBuffer,0x400
    133.                         invoke  ReadFile,[pipeReadH],pipeBuffer,1023,pipeRead,NULL
    134.                                 cmp  eax,NULL
    135.                                 je   @f
    136.                         invoke  SendMessage,[edit1H],EM_SETSEL,-1,0
    137.                         invoke  SendMessage,[edit1H],EM_REPLACESEL,FALSE,pipeBuffer
    138.                         ;invoke SendMessage,[edit1H],WM_SETTEXT,0,pipeBuffer            ;edit control only contain pipeBuffer
    139.                                 jmp  @f
    140.                        
    141.                         MI_CSCRIPT_error_pipe:
    142.                                 invoke  MessageBox,[hWnd],errStr1,wndTitle,MB_OK
    143.                                         jmp  wmBYE
    144.                         MI_CSCRIPT_error_process:
    145.                                 invoke  MessageBox,[hWnd],errStr2,wndTitle,MB_OK
    146.                         @@:
    147.                                 invoke  CloseHandle,[pipeReadH]
    148.                                 invoke  CloseHandle,[pro1Info.hProcess]
    149.                                 invoke  CloseHandle,[pro1Info.hThread]
    150.                                         jmp  wmBYE
    151.                
    152.         wmSIZE:
    153.                         mov  edx,[lParam]
    154.                         mov  ecx,edx
    155.                         shr  ecx,16             ;height - high order
    156.                         and  edx,0xFFFF         ;width  - low order
    157.                 invoke  MoveWindow,[edit1H],0,0,edx,ecx,TRUE
    158.                         jmp  wmBYE
    159.         wmCREATE:
    160.                 invoke  CreateWindowEx,NULL,ctlClsNameEdit,NULL,\
    161.                         WS_CHILD + WS_VISIBLE + WS_HSCROLL + WS_VSCROLL + ES_MULTILINE + ES_AUTOHSCROLL + ES_AUTOVSCROLL,\
    162.                         0,0,0,0,\
    163.                         [hWnd],NULL,[insH],NULL
    164.                         mov  [edit1H],eax
    165.                         jmp  wmBYE
    166.         wmDESTROY:
    167.                 invoke  PostQuitMessage,0
    168.  
    169.         wmBYE:
    170.                 pop edi esi ebx
    171.                 return
    172.    endp
    173.  
    174. section '.idata' import data readable
    175.     library     KERNEL32, 'KERNEL32.DLL',\
    176.                 USER32,   'USER32.DLL',\
    177.                 GDI32,    'GDI32.DLL'
    178.    
    179.     import      KERNEL32,\
    180.                 GetModuleHandle,        'GetModuleHandleA',\
    181.                 CreatePipe,             'CreatePipe',\
    182.                 CloseHandle,            'CloseHandle',\
    183.                 CreateProcess,          'CreateProcessA',\
    184.                 GetStartupInfo,         'GetStartupInfoA',\
    185.                 RtlZeroMemory,          'RtlZeroMemory',\
    186.                 ReadFile,               'ReadFile',\
    187.                 ExitProcess,            'ExitProcess'
    188.     import      USER32,\
    189.                 RegisterClass,          'RegisterClassA',\
    190.                 CreateWindowEx,         'CreateWindowExA',\
    191.                 DefWindowProc,          'DefWindowProcA',\
    192.                 LoadCursor,             'LoadCursorA',\
    193.                 LoadIcon,               'LoadIconA',\
    194.                 SendMessage,            'SendMessageA',\
    195.                 GetMessage,             'GetMessageA',\
    196.                 MessageBox,             'MessageBoxA',\
    197.                 MoveWindow,             'MoveWindow',\
    198.                 DestroyWindow,          'DestroyWindow',\
    199.                 TranslateMessage,       'TranslateMessage',\
    200.                 DispatchMessage,        'DispatchMessageA',\
    201.                 PostQuitMessage,        'PostQuitMessage'
    202.     import      GDI32,\
    203.                 SetTextColor,           'SetTextColor',\
    204.                 SetBkColor,             'SetBkColor',\
    205.                 GetStockObject,         'GetStockObject'
    206.  
    207. section '.rsrc' resource data readable
    208.         directory       RT_MENU,appMenu
    209.        
    210.         resource        appMenu,\
    211.                         30,LANG_NEUTRAL,menuMain
    212.  
    213.         menu    menuMain
    214.                 menuitem        '&Action',0,MFR_POPUP + MFR_END
    215.                 menuitem                '&Cscript',MI_CSCRIPT,MFR_END[FONT=Georgia]
    Результат[/FONT]
    [​IMG]
     

    Вложения:

    • tut_21.gif
      tut_21.gif
      Размер файла:
      9,1 КБ
      Просмотров:
      2.360
    rococo795 нравится это.
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 22. Суперклассинг

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         wndH            dd ?
    8.         insH            dd ?
    9.         wndClsName      db 'TUT_22',0
    10.         wndTitle        db 'Tutorial 22',0
    11.         wndProcAddr     dd ?
    12.  
    13.         wndCls  WNDCLASS
    14.         wndMsg  MSG
    15.        
    16.         ctlClsNameEdit          db 'EDIT',0
    17.         ctlClsNameEditHex       db 'EDIT_HEX',0
    18.        
    19.         editH:          times 6 dd ?
    20.         editHBuffer     dw 16   ;2 bytes here
    21.                         rb 14   ;14 + 2 = 16 bytes required, 15 for text, 1 for null terminated byte
    22.        
    23. section '.code' code readable executable
    24.    start:
    25.         invoke  GetModuleHandle,0
    26.                 mov  [insH],eax
    27.                 mov  [wndCls.hInstance],eax
    28.                 mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    29.                 mov  [wndCls.lpfnWndProc],window_procedure
    30.                 mov  [wndCls.lpszClassName],wndClsName
    31.                 mov  [wndCls.hbrBackground],COLOR_BTNFACE+1
    32.         invoke  LoadIcon,NULL,IDI_APPLICATION
    33.                 mov  [wndCls.hIcon],eax
    34.         invoke  LoadCursor,NULL,IDC_ARROW
    35.                 mov  [wndCls.hCursor],eax
    36.         invoke  RegisterClass,wndCls
    37.  
    38.         invoke  CreateWindowEx,WS_EX_CLIENTEDGE,\
    39.                 wndClsName,wndTitle,\
    40.                 WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    41.                 CW_USEDEFAULT,CW_USEDEFAULT,\
    42.                 400,240,\
    43.                 NULL,NULL,[insH],NULL
    44.                 mov  [wndH],eax
    45.  
    46.    ;+---------------------------+
    47.    ;| entering the message loop |
    48.    ;+---------------------------+
    49.    window_message_loop_start:
    50.         invoke  GetMessage,wndMsg,NULL,0,0
    51.                 or    eax,eax
    52.                 je    window_message_loop_end
    53.         invoke  TranslateMessage,wndMsg
    54.         invoke  DispatchMessage,wndMsg
    55.                 jmp     window_message_loop_start
    56.  
    57.    window_message_loop_end:
    58.         invoke  ExitProcess,0
    59.  
    60.    ;+----------------------+
    61.    ;| the window procedure |
    62.    ;+----------------------+
    63.    proc window_procedure,hWnd,uMsg,wParam,lParam
    64.         editCls WNDCLASSEX
    65.         counter dd 0
    66.         enter
    67.                 push ebx esi edi
    68.                 cmp  [uMsg],WM_CREATE
    69.                 je   wmCREATE
    70.                 cmp  [uMsg],WM_DESTROY
    71.                 je   wmDESTROY
    72.        
    73.  
    74.         wmDEFAULT:
    75.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    76.                         jmp  wmBYE
    77.         wmCREATE:
    78.                         mov  [editCls.cbSize],sizeof.WNDCLASSEX
    79.                         lea  ebx,[editCls]
    80.                 invoke  GetClassInfoEx,NULL,ctlClsNameEdit,ebx
    81.                         push [editCls.lpfnWndProc]
    82.                         pop  [wndProcAddr]
    83.                         mov  [editCls.lpfnWndProc],edit_hex_procedure
    84.                         push [insH]
    85.                         pop  [editCls.hInstance]
    86.                         mov  [editCls.lpszClassName],ctlClsNameEditHex
    87.                 invoke  RegisterClassEx,ebx
    88.                         xor  ebx,ebx
    89.                         mov  edi,20
    90.                 @@:
    91.                         cmp  ebx,3
    92.                         je   @f
    93.                 invoke  CreateWindowEx,WS_EX_CLIENTEDGE,ctlClsNameEditHex,NULL,\
    94.                         WS_CHILD + WS_VISIBLE + WS_BORDER,\
    95.                         20,edi,300,24,\
    96.                         [hWnd],NULL,[insH],NULL
    97.                         mov  [editH + 4 * ebx],eax
    98.                 invoke  SendMessage,eax,EM_LIMITTEXT,15,0               ;limit to 15 chars
    99.                         inc  ebx
    100.                         add  edi,30
    101.                         jmp  @b
    102.                 @@:
    103.                 invoke  SetFocus,[editH]
    104.                         jmp  wmBYE
    105.         wmDESTROY:
    106.                 invoke  PostQuitMessage,0
    107.  
    108.         wmBYE:
    109.                 pop edi esi ebx
    110.                 return
    111.    endp
    112.    
    113.    proc edit_hex_procedure,hWnd,uMsg,wParam,lParam
    114.                 push ebx esi edi
    115.                 cmp  [uMsg],WM_CHAR
    116.                 je   edit_hex_wmCHAR
    117.                 cmp  [uMsg],WM_KEYDOWN
    118.                 je   edit_hex_wmKEYDOWN
    119.                 jmp  @f
    120.        
    121.  
    122.         edit_hex_wmCHAR:
    123.                         mov  eax,[wParam]
    124.                         cmp  al,VK_BACK         ;compare with virtual key BACKSPACE
    125.                         je   @f
    126.                         cmp  al,0x30            ;compare with ascii 0
    127.                         jb   edit_hex_wmBYE
    128.                         cmp  al,0x39            ;compare with ascii 9
    129.                         jbe  @f
    130.                         cmp  al,0x41            ;compare with ascii A
    131.                         jb   edit_hex_wmBYE
    132.                         cmp  al,0x46            ;compare with ascii F
    133.                         jbe  @f
    134.                         cmp  al,0x61            ;compare with ascii a
    135.                         jb   edit_hex_wmBYE
    136.                         cmp  al,0x66            ;compare with ascii f
    137.                         jbe  wmCHAR_add
    138.                         jmp  edit_hex_wmBYE     ;something else
    139.                
    140.                 wmCHAR_add:
    141.                         sub  [wParam],0x20      ;so our AL become big letter
    142.                         jmp  @f
    143.                 @@:
    144.                         invoke  CallWindowProc,[wndProcAddr],[hWnd],[uMsg],[wParam],[lParam]
    145.                                 jmp  edit_hex_wmBYE
    146.        
    147.  
    148.         edit_hex_wmKEYDOWN:
    149.                         mov  eax,[wParam]
    150.                         cmp  al,VK_RETURN       ;compare with virtual key RETURN
    151.                         je   wmKEYDOWN_VK_RETURN
    152.                         cmp  al,VK_TAB
    153.                         je   wmKEYDOWN_VK_TAB
    154.                         jne  @b
    155.  
    156.                 wmKEYDOWN_VK_TAB:
    157.                         invoke  GetKeyState,VK_SHIFT
    158.                                 test eax,0x80000000
    159.                                 je   VK_TAB_NEXT
    160.                                 jmp  VK_TAB_PREV
    161.                        
    162.                         VK_TAB_NEXT:
    163.                                 invoke  GetWindow,[hWnd],GW_HWNDNEXT
    164.                                         cmp  eax,NULL
    165.                                         jne  VK_TAB_BYE
    166.                                 invoke  GetWindow,[hWnd],GW_HWNDFIRST
    167.                                         jmp  VK_TAB_BYE
    168.                         VK_TAB_PREV:
    169.                                 invoke  GetWindow,[hWnd],GW_HWNDPREV
    170.                                         cmp  eax,NULL
    171.                                         jne  VK_TAB_BYE
    172.                                 invoke  GetWindow,[hWnd],GW_HWNDLAST
    173.                                         jmp  VK_TAB_BYE
    174.                        
    175.                         VK_TAB_BYE:
    176.                                 invoke  SetFocus,eax
    177.                                         xor  eax,eax
    178.                                         jmp  edit_hex_wmBYE
    179.  
    180.                 wmKEYDOWN_VK_RETURN:
    181.                         invoke  SendMessage,[hWnd],EM_GETLINE,0,editHBuffer
    182.                         invoke  MessageBox,[hWnd],editHBuffer,wndTitle,MB_OK
    183.                         invoke  SetFocus,[hWnd]
    184.                                 jmp  edit_hex_wmBYE
    185.  
    186.         edit_hex_wmBYE:
    187.                         pop  edi esi ebx
    188.                         return
    189.    endp
    190.  
    191. section '.idata' import data readable
    192.     library     KERNEL32, 'KERNEL32.DLL',\
    193.                 USER32,   'USER32.DLL'
    194.    
    195.     import      KERNEL32,\
    196.                 GetModuleHandle,        'GetModuleHandleA',\
    197.                 ExitProcess,            'ExitProcess'
    198.     import      USER32,\
    199.                 RegisterClass,          'RegisterClassA',\
    200.                 RegisterClassEx,        'RegisterClassExA',\
    201.                 CreateWindowEx,         'CreateWindowExA',\
    202.                 DefWindowProc,          'DefWindowProcA',\
    203.                 LoadCursor,             'LoadCursorA',\
    204.                 LoadIcon,               'LoadIconA',\
    205.                 SendMessage,            'SendMessageA',\
    206.                 GetMessage,             'GetMessageA',\
    207.                 MessageBox,             'MessageBoxA',\
    208.                 GetClassInfoEx,         'GetClassInfoExA',\
    209.                 GetKeyState,            'GetKeyState',\
    210.                 GetWindow,              'GetWindow',\
    211.                 SetFocus,               'SetFocus',\
    212.                 SetWindowLong,          'SetWindowLongA',\
    213.                 CallWindowProc,         'CallWindowProcA',\
    214.                 DestroyWindow,          'DestroyWindow',\
    215.                 TranslateMessage,       'TranslateMessage',\
    216.                 DispatchMessage,        'DispatchMessageA',\
    217.                 PostQuitMessage,        'PostQuitMessage'[FONT=Georgia]
    Результат

    [​IMG][/FONT]
     

    Вложения:

    • tut_22.gif
      tut_22.gif
      Размер файла:
      4,2 КБ
      Просмотров:
      2.393
    rococo795 нравится это.
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 23. Иконка в system tray

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. WUM_SHELLNOTIFY equ WM_USER + 5
    7. MI_RESTORE    equ 1000
    8. MI_EXIT        equ 1001
    9. SBI_TRAY    equ 0
    10.  
    11. section '.data' data readable writeable
    12.     wndH        dd ?
    13.     insH        dd ?
    14.     wndClsName    db 'TUT_23',0
    15.     wndTitle    db 'Tutorial 23',0
    16.  
    17.     wndCls    WNDCLASS
    18.     wndMsg    MSG
    19.    
    20.     menuH        dd ?
    21.     menuPt        POINT
    22.     menuRect    RECT
    23.     miRESTORE    db '&Restore',0
    24.     miEXIT        db '&Exit',0
    25.    
    26.     statBarData    NOTIFYICONDATA
    27.    
    28. section '.code' code readable executable
    29.    start:
    30.     invoke    GetModuleHandle,0
    31.         mov  [insH],eax
    32.         mov  [wndCls.hInstance],eax
    33.         mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    34.         mov  [wndCls.lpfnWndProc],window_procedure
    35.         mov  [wndCls.lpszClassName],wndClsName
    36.         mov  [wndCls.hbrBackground],COLOR_BTNFACE+1
    37.     invoke    LoadIcon,NULL,IDI_APPLICATION
    38.         mov  [wndCls.hIcon],eax
    39.     invoke    LoadCursor,NULL,IDC_ARROW
    40.         mov  [wndCls.hCursor],eax
    41.     invoke    RegisterClass,wndCls
    42.  
    43.     invoke    CreateWindowEx,WS_EX_CLIENTEDGE,\
    44.         wndClsName,wndTitle,\
    45.         WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    46.         CW_USEDEFAULT,CW_USEDEFAULT,\
    47.         400,240,\
    48.         NULL,NULL,[insH],NULL
    49.         mov  [wndH],eax
    50.  
    51.    ;+---------------------------+
    52.    ;| entering the message loop |
    53.    ;+---------------------------+
    54.    window_message_loop_start:
    55.     invoke    GetMessage,wndMsg,NULL,0,0
    56.         or    eax,eax
    57.         je    window_message_loop_end
    58.     invoke    TranslateMessage,wndMsg
    59.     invoke    DispatchMessage,wndMsg
    60.         jmp    window_message_loop_start
    61.  
    62.    window_message_loop_end:
    63.     invoke    ExitProcess,0
    64.  
    65.    ;+----------------------+
    66.    ;| the window procedure |
    67.    ;+----------------------+
    68.    proc window_procedure,hWnd,uMsg,wParam,lParam
    69.         push ebx esi edi
    70.         cmp  [uMsg],WUM_SHELLNOTIFY
    71.         je   wumSHELLNOTIFY
    72.         cmp  [uMsg],WM_COMMAND
    73.         je   wmCOMMAND
    74.         cmp  [uMsg],WM_SIZE
    75.         je   wmSIZE
    76.         cmp  [uMsg],WM_CREATE
    77.         je   wmCREATE
    78.         cmp  [uMsg],WM_DESTROY
    79.         je   wmDESTROY
    80.    
    81.  
    82.     wmDEFAULT:
    83.         invoke    DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    84.             jmp  wmBYE
    85.    
    86.  
    87.     wumSHELLNOTIFY:
    88.             cmp  [wParam],SBI_TRAY
    89.             jne  wmBYE
    90.             cmp  [lParam],WM_RBUTTONDOWN
    91.             je   wumSHELLNOTIFY_WM_RBUTTONDOWN
    92.             cmp  [lParam],WM_LBUTTONDBLCLK
    93.             je   wumSHELLNOTIFY_WM_LBUTTONDBLCLK
    94.             jmp  wmBYE
    95.        
    96.         wumSHELLNOTIFY_WM_LBUTTONDBLCLK:
    97.             invoke    SendMessage,[hWnd],WM_COMMAND,MI_RESTORE,0
    98.                 jmp  wmBYE
    99.        
    100.         wumSHELLNOTIFY_WM_RBUTTONDOWN:
    101.             invoke    GetCursorPos,menuPt
    102.             invoke    SetForegroundWindow,[hWnd]
    103.             invoke    TrackPopupMenu,[menuH],TPM_RIGHTALIGN + TPM_RIGHTBUTTON,\
    104.                 [menuPt.x],[menuPt.y],NULL,[hWnd],NULL
    105.             invoke    PostMessage,[hWnd],WM_NULL,0,0
    106.                 jmp  wmBYE
    107.        
    108.     wmCOMMAND:
    109.             cmp  [lParam],0        ;message is not from control
    110.             jne  wmBYE
    111.         invoke    Shell_NotifyIcon,NIM_DELETE,statBarData
    112.             mov  eax,[wParam]
    113.             cmp  ax,MI_RESTORE
    114.             je   wmCOMMAND_MI_RESTORE
    115.         invoke    DestroyWindow,[hWnd]
    116.             jmp  wmBYE
    117.        
    118.         wmCOMMAND_MI_RESTORE:
    119.             invoke    ShowWindow,[hWnd],SW_RESTORE
    120.                 jmp  wmBYE
    121.     wmSIZE:
    122.             cmp  [wParam],SIZE_MINIMIZED
    123.             jne  wmBYE
    124.             mov  [statBarData.cbSize],sizeof.NOTIFYICONDATA
    125.             push [hWnd]
    126.             pop  [statBarData.hWnd]
    127.             mov  [statBarData.uID],SBI_TRAY
    128.             mov  [statBarData.uFlags],NIF_ICON + NIF_MESSAGE + NIF_TIP
    129.             mov  [statBarData.uCallbackMessage],WUM_SHELLNOTIFY
    130.         invoke    LoadIcon,NULL,IDI_WINLOGO
    131.             mov  [statBarData.hIcon],eax
    132.         invoke    lstrcpy,statBarData.szTip,wndTitle
    133.         invoke    ShowWindow,[hWnd],SW_HIDE
    134.         invoke    Shell_NotifyIcon,NIM_ADD,statBarData
    135.             jmp  wmBYE
    136.     wmCREATE:
    137.         invoke    CreatePopupMenu
    138.             mov  [menuH],eax
    139.         invoke    AppendMenu,[menuH],MF_STRING,MI_RESTORE,miRESTORE
    140.         invoke    AppendMenu,[menuH],MF_STRING,MI_EXIT,miEXIT
    141.             jmp  wmBYE
    142.     wmDESTROY:
    143.         invoke    DestroyMenu,[menuH]
    144.         invoke    PostQuitMessage,0
    145.  
    146.     wmBYE:
    147.         pop edi esi ebx
    148.         return
    149.    endp
    150.  
    151. section '.idata' import data readable
    152.     library    KERNEL32, 'KERNEL32.DLL',\
    153.         USER32,   'USER32.DLL',\
    154.         SHELL32,  'SHELL32.DLL'
    155.    
    156.     import    KERNEL32,\
    157.         GetModuleHandle,    'GetModuleHandleA',\
    158.         lstrcpy,        'lstrcpyA',\
    159.         ExitProcess,        'ExitProcess'
    160.     import    USER32,\
    161.         RegisterClass,        'RegisterClassA',\
    162.         CreateWindowEx,        'CreateWindowExA',\
    163.         DefWindowProc,        'DefWindowProcA',\
    164.         LoadCursor,        'LoadCursorA',\
    165.         LoadIcon,        'LoadIconA',\
    166.         SendMessage,        'SendMessageA',\
    167.         GetMessage,        'GetMessageA',\
    168.         MessageBox,        'MessageBoxA',\
    169.         CreatePopupMenu,    'CreatePopupMenu',\
    170.         DestroyMenu,        'DestroyMenu',\
    171.         AppendMenu,        'AppendMenuA',\
    172.         GetCursorPos,        'GetCursorPos',\
    173.         SetForegroundWindow,    'SetForegroundWindow',\
    174.         TrackPopupMenu,        'TrackPopupMenu',\
    175.         PostMessage,        'PostMessageA',\
    176.         ShowWindow,        'ShowWindow',\
    177.         DestroyWindow,        'DestroyWindow',\
    178.         TranslateMessage,    'TranslateMessage',\
    179.         DispatchMessage,    'DispatchMessageA',\
    180.         PostQuitMessage,    'PostQuitMessage'
    181.    import    SHELL32,\
    182.         Shell_NotifyIcon,    'Shell_NotifyIcon'
    Результат

    [​IMG]

    [​IMG]

    [​IMG]
     

    Вложения:

    • tut_23a.gif
      tut_23a.gif
      Размер файла:
      1,2 КБ
      Просмотров:
      2.289
    • tut_23b.gif
      tut_23b.gif
      Размер файла:
      1,6 КБ
      Просмотров:
      2.274
    • tut_23c.gif
      tut_23c.gif
      Размер файла:
      1,6 КБ
      Просмотров:
      2.326
    rococo795 нравится это.
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 24. Windows-хуки

    Текст tut_24a.asm
    Код (ASM):
    1. format PE GUI 4.0 DLL
    2. entry DllMain
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. struct MOUSEHOOKSTRUCT
    7.         .pt             POINT
    8.         .hwnd           dd ?
    9.         .wHitTestCode   dd ?
    10.         .dwExtraInfo    dd ?
    11. ends
    12.  
    13. WMU_MOUSEHOOK equ WM_USER + 6
    14.  
    15. section '.data' data readable writeable
    16.         insH            dd ?                    ;handle for instance
    17.  
    18. section '.sdata' readable writeable shareable
    19.         hookH   dd ?
    20.         wndH    dd ?
    21.  
    22. section '.code' code readable executable
    23.    proc DllMain, hinstDll, fdwReason, lpvReserved
    24.                 push [hinstDll]
    25.                 pop  [insH]
    26.                 mov  eax,TRUE
    27.                 return
    28.    endp
    29.        
    30.    proc mouse_procedure,nCode,wParam,lParam
    31.         invoke  CallNextHookEx,[hookH],[nCode],[wParam],[lParam]
    32.                 mov  edx,[lParam]
    33.         invoke  WindowFromPoint,[edx + MOUSEHOOKSTRUCT.pt.x],[edx + MOUSEHOOKSTRUCT.pt.y]
    34.         invoke  PostMessage,[wndH],WMU_MOUSEHOOK,eax,0
    35.                 xor  eax,eax            ;must clear eax here
    36.                 return
    37.    endp
    38.    
    39.    proc mouse_hook_install,wndTempH
    40.                 push [wndTempH]
    41.                 pop  [wndH]
    42.         invoke  SetWindowsHookEx,WH_MOUSE,mouse_procedure,[insH],NULL
    43.                 mov  [hookH],eax
    44.                 return
    45.    endp
    46.  
    47.    proc mouse_hook_uninstall
    48.         invoke  UnhookWindowsHookEx,[hookH]
    49.                 return
    50.    endp
    51.  
    52. section '.idata' import data readable
    53.         library USER32, 'USER32.DLL'
    54.  
    55.         import  USER32,\
    56.                 CallNextHookEx,         'CallNextHookEx',\
    57.                 WindowFromPoint,        'WindowFromPoint',\
    58.                 PostMessage,            'PostMessageA',\
    59.                 SetWindowsHookEx,       'SetWindowsHookExA',\
    60.                 UnhookWindowsHookEx,    'UnhookWindowsHookEx'
    61.  
    62. section '.edata' export data readable
    63.         export  'TUT_24A.DLL',\
    64.                 mouse_procedure,        'mouse_procedure',\
    65.                 mouse_hook_install,     'mouse_hook_install',\
    66.                 mouse_hook_uninstall,   'mouse_hook_uninstall'
    67.  
    68. section '.reloc' fixups data discardable
    69.  
    Текст tut_24b.asm
    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. WMU_MOUSEHOOK   equ WM_USER + 6
    7. DLG_MAIN        equ 101
    8. EDIT_CLSNAME    equ 1001
    9. EDIT_HANDLE     equ 1002
    10. EDIT_WNDPROC    equ 1003
    11. BTN_HOOK        equ 1004
    12. BTN_EXIT        equ 1005
    13.  
    14. section '.data' data readable writeable
    15.         insH            dd ?
    16.         wndClsName      db 'TUT_24B',0
    17.         wndTitle        db 'Tutorial 24B',0
    18.  
    19.         wndCls  WNDCLASS
    20.         wndMsg  MSG
    21.        
    22.         hookFlag        dd FALSE
    23.         hookH           dd ?
    24.         rect            RECT
    25.         txtUnhook       db '&Unhook',0
    26.         txtHook         db '&Hook',0
    27.  
    28.         buf1    rb 128
    29.         buf2    rb 128
    30.         f1      db '0x%lX',0
    31.  
    32. section '.code' code readable executable
    33.    start:
    34.         invoke  GetModuleHandle,NULL
    35.                 mov  [insH],eax
    36.         invoke  DialogBoxParam,eax,DLG_MAIN,NULL,dialog_procedure,NULL
    37.         invoke  ExitProcess,0
    38.  
    39.    proc dialog_procedure,hDlg,uMsg,wParam,lParam
    40.                 push ebx esi edi
    41.                 cmp  [uMsg],WMU_MOUSEHOOK
    42.                 je   wmuMOUSEHOOK
    43.                 cmp  [uMsg],WM_CLOSE
    44.                 je   wmCLOSE
    45.                 cmp  [uMsg],WM_INITDIALOG
    46.                 je   wmINITDIALOG
    47.                 cmp  [uMsg],WM_COMMAND
    48.                 je   wmCOMMAND
    49.                 jmp  wmBYE
    50.  
    51.         wmCLOSE:
    52.                         cmp  [hookFlag],TRUE
    53.                         jne  @f
    54.                 invoke  mouse_hook_uninstall
    55.                 @@:
    56.                 invoke  EndDialog,[hDlg],NULL
    57.                         jmp  wmBYE
    58.  
    59.         wmuMOUSEHOOK:
    60.                 invoke  GetDlgItemText,[hDlg],EDIT_HANDLE,buf2,128
    61.                 invoke  wsprintf,buf1,f1,[wParam]
    62.                 invoke  lstrcmpi,buf1,buf2
    63.                         cmp  eax,0
    64.                         je   @f
    65.                 invoke  SetDlgItemText,[hDlg],EDIT_HANDLE,buf1
    66.                 @@:
    67.                 invoke  GetDlgItemText,[hDlg],EDIT_CLSNAME,buf2,128
    68.                 invoke  GetClassName,[wParam],buf1,128
    69.                 invoke  lstrcmpi,buf1,buf2
    70.                         cmp  eax,0
    71.                         je   @f
    72.                 invoke  SetDlgItemText,[hDlg],EDIT_CLSNAME,buf1
    73.                 @@:
    74.                 invoke  GetDlgItemText,[hDlg],EDIT_WNDPROC,buf2,128
    75.                 invoke  GetClassLong,[wParam],GCL_WNDPROC
    76.                 invoke  wsprintf,buf1,f1,eax
    77.                 invoke  lstrcmpi,buf1,buf2
    78.                         cmp  eax,0
    79.                         je   @f
    80.                 invoke  SetDlgItemText,[hDlg],EDIT_WNDPROC,buf1
    81.                 @@:
    82.                         jmp  wmBYE
    83.         wmINITDIALOG:
    84.                 invoke  GetWindowRect,[hDlg],rect
    85.                 invoke  SetWindowPos,[hDlg],HWND_TOPMOST,[rect.left],[rect.top],[rect.right],[rect.bottom],SWP_SHOWWINDOW
    86.                         jmp  wmBYE
    87.  
    88.         wmCOMMAND:
    89.                         cmp  [lParam],0
    90.                         je   wmBYE
    91.                         mov  eax,[wParam]
    92.                         mov  edx,eax
    93.                         shr  edx,16
    94.                         cmp  dx,BN_CLICKED
    95.                         jne  wmBYE
    96.                         cmp  ax,BTN_EXIT
    97.                         je   wmCOMMAND_BTN_EXIT
    98.                         jmp  wmCOMMAND_BTN_HOOK
    99.  
    100.                 wmCOMMAND_BTN_EXIT:
    101.                         invoke  SendMessage,[hDlg],WM_CLOSE,0,0
    102.                                 jmp  wmBYE
    103.                
    104.                 wmCOMMAND_BTN_HOOK:
    105.                                 cmp  [hookFlag],TRUE
    106.                                 jne  BTN_HOOK_FALSE
    107.                         invoke  mouse_hook_uninstall
    108.                         invoke  SetDlgItemText,[hDlg],BTN_HOOK,txtHook
    109.                                 mov  [hookFlag],FALSE
    110.                         invoke  SetDlgItemText,[hDlg],EDIT_CLSNAME,NULL
    111.                         invoke  SetDlgItemText,[hDlg],EDIT_HANDLE,NULL
    112.                         invoke  SetDlgItemText,[hDlg],EDIT_WNDPROC,NULL
    113.                                 jmp  wmBYE
    114.  
    115.                         BTN_HOOK_FALSE:
    116.                                 invoke  mouse_hook_install,[hDlg]
    117.                                         cmp  eax,NULL
    118.                                         je   wmBYE
    119.                                         mov  [hookFlag],TRUE
    120.                                 invoke  SetDlgItemText,[hDlg],BTN_HOOK,txtUnhook
    121.                                         jmp  wmBYE
    122.                
    123.         wmBYE:
    124.                 pop  edi esi ebx
    125.                 return
    126.    endp
    127.  
    128. section '.idata' import data readable
    129.     library     KERNEL32, 'KERNEL32.DLL',\
    130.                 USER32,   'USER32.DLL',\
    131.                 TUT_24A,  'TUT_24A.DLL'
    132.    
    133.     import      KERNEL32,\
    134.                 GetModuleHandle,        'GetModuleHandleA',\
    135.                 lstrcmpi,               'lstrcmpiA',\
    136.                 ExitProcess,            'ExitProcess'
    137.     import      USER32,\
    138.                 RegisterClass,          'RegisterClassA',\
    139.                 CreateWindowEx,         'CreateWindowExA',\
    140.                 SendMessage,            'SendMessageA',\
    141.                 wsprintf,               'wsprintfA',\
    142.                 DialogBoxParam,         'DialogBoxParamA',\
    143.                 GetWindowRect,          'GetWindowRect',\
    144.                 GetClassName,           'GetClassNameA',\
    145.                 GetClassLong,           'GetClassLongA',\
    146.                 EndDialog,              'EndDialog',\
    147.                 GetDlgItemText,         'GetDlgItemTextA',\
    148.                 SetDlgItemText,         'SetDlgItemTextA',\
    149.                 SetWindowPos,           'SetWindowPos'
    150.    import       TUT_24A,\
    151.                 mouse_hook_install,     'mouse_hook_install',\
    152.                 mouse_hook_uninstall,   'mouse_hook_uninstall'
    153. section '.rsrc' resource data readable
    154.         directory       RT_DIALOG,appDialog
    155.        
    156.         resource        appDialog,\
    157.                         DLG_MAIN,LANG_NEUTRAL,dlgMain
    158.  
    159.         dialog dlgMain,'Mouse Hook Demo',0,0,229,85,\
    160.                 WS_CAPTION + WS_POPUP + WS_SYSMENU + DS_MODALFRAME
    161.                 dialogitem      'BUTTON','Window Information',-1,7,7,214,67,WS_VISIBLE + BS_GROUPBOX
    162.                 dialogitem      'STATIC','Class Name :',-1,21,22,42,8,SS_LEFT + WS_VISIBLE
    163.                 dialogitem      'EDIT','',EDIT_CLSNAME,69,20,139,12,ES_LEFT + ES_AUTOHSCROLL + ES_READONLY + WS_VISIBLE + WS_BORDER + WS_TABSTOP
    164.                 dialogitem      'STATIC','Handle :',-1,36,37,28,8,SS_LEFT + WS_VISIBLE
    165.                 dialogitem      'EDIT','',EDIT_HANDLE,69,36,76,12,ES_LEFT + ES_AUTOHSCROLL + ES_READONLY + WS_VISIBLE + WS_BORDER + WS_TABSTOP
    166.                 dialogitem      'STATIC','Window Proc :',-1,15,52,48,8,SS_LEFT + WS_VISIBLE
    167.                 dialogitem      'EDIT','',EDIT_WNDPROC,69,52,76,12,ES_LEFT + ES_AUTOHSCROLL + ES_READONLY + WS_VISIBLE + WS_BORDER + WS_TABSTOP
    168.                 dialogitem      'BUTTON','&Hook',BTN_HOOK,159,35,50,14,BS_DEFPUSHBUTTON + WS_VISIBLE + WS_TABSTOP
    169.                 dialogitem      'BUTTON','&Exit',BTN_EXIT,159,51,50,15,BS_PUSHBUTTON + WS_VISIBLE + WS_TABSTOP
    170.         enddialog
    171.  
    Результат
    [​IMG]
     

    Вложения:

    • tut_24.gif
      tut_24.gif
      Размер файла:
      3,5 КБ
      Просмотров:
      3.019
    rococo795 нравится это.
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 25. Вывод картинки на экран

    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         wndH            dd ?                    ;handle for window
    8.         insH            dd ?                    ;handle for instance
    9.         wndClsName      db 'TUT_25',0
    10.         wndTitle        db 'Tutorial 25',0
    11.  
    12.         wndCls  WNDCLASS
    13.         wndMsg  MSG
    14.        
    15.         bmp1H           dd ?                    ;handle for BMP file
    16.         bmp1Ps          PAINTSTRUCT
    17.         bmp1Rect        RECT
    18.         dcH             dd ?
    19.         dcMemH          dd ?
    20.        
    21.        
    22. section '.code' code readable executable
    23.    start:
    24.         invoke  GetModuleHandle,0
    25.                 mov  [insH],eax
    26.                 mov  [wndCls.hInstance],eax
    27.                 mov  [wndCls.style],CS_HREDRAW + CS_VREDRAW
    28.                 mov  [wndCls.lpfnWndProc],window_procedure
    29.                 mov  [wndCls.lpszClassName],wndClsName
    30.                 mov  [wndCls.hbrBackground],COLOR_WINDOW+1
    31.         invoke  LoadIcon,NULL,IDI_APPLICATION
    32.                 mov  [wndCls.hIcon],eax
    33.         invoke  LoadCursor,NULL,IDC_ARROW
    34.                 mov  [wndCls.hCursor],eax
    35.         invoke  RegisterClass,wndCls
    36.  
    37.         invoke  CreateWindowEx,\
    38.                 WS_EX_CLIENTEDGE,\
    39.                 wndClsName,\
    40.                 wndTitle,\
    41.                 WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    42.                 CW_USEDEFAULT,\
    43.                 CW_USEDEFAULT,\
    44.                 CW_USEDEFAULT,\
    45.                 CW_USEDEFAULT,\
    46.                 NULL,\
    47.                 NULL,\
    48.                 [insH],\
    49.                 NULL
    50.                 mov  [wndH],eax
    51.  
    52.    ;+---------------------------+
    53.    ;| entering the message loop |
    54.    ;+---------------------------+
    55.    window_message_loop_start:
    56.         invoke  GetMessage,wndMsg,NULL,0,0
    57.                 or    eax,eax
    58.                 je    window_message_loop_end
    59.         invoke  TranslateMessage,wndMsg
    60.         invoke  DispatchMessage,wndMsg
    61.                 jmp     window_message_loop_start
    62.  
    63.    window_message_loop_end:
    64.         invoke  ExitProcess,0
    65.  
    66.    ;+----------------------+
    67.    ;| the window procedure |
    68.    ;+----------------------+
    69.    proc window_procedure,hWnd,uMsg,wParam,lParam
    70.                 push ebx esi edi
    71.                 cmp  [uMsg],WM_CREATE
    72.                 je   wmCREATE
    73.                 cmp  [uMsg],WM_PAINT
    74.                 je   wmPAINT
    75.                 cmp  [uMsg],WM_DESTROY
    76.                 je   wmDESTROY
    77.        
    78.  
    79.         wmDEFAULT:
    80.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    81.                         jmp  wmBYE
    82.  
    83.         wmCREATE:
    84.                 invoke  LoadBitmap,[insH],300
    85.                         mov  [bmp1H],eax
    86.                         jmp  wmBYE
    87.  
    88.         wmPAINT:
    89.                 invoke  BeginPaint,[hWnd],bmp1Ps
    90.                         mov  [dcH],eax
    91.                 invoke  CreateCompatibleDC,[dcH]
    92.                         mov  [dcMemH],eax
    93.                 invoke  SelectObject,[dcMemH],[bmp1H]
    94.                 invoke  GetClientRect,[hWnd],bmp1Rect
    95.                 invoke  BitBlt,[dcH],0,0,[bmp1Rect.right],[bmp1Rect.bottom],[dcMemH],0,0,SRCCOPY
    96.                 invoke  DeleteDC,[dcMemH]
    97.                 invoke  EndPaint,[hWnd],bmp1Ps
    98.                         jmp  wmBYE
    99.  
    100.         wmDESTROY:
    101.                 invoke  DeleteObject,[bmp1H]
    102.                 invoke  PostQuitMessage,0
    103.  
    104.         wmBYE:
    105.                 pop edi esi ebx
    106.                 return
    107.    endp
    108.  
    109. section '.idata' import data readable
    110.     library     KERNEL32, 'KERNEL32.DLL',\
    111.                 USER32,   'USER32.DLL',\
    112.                 GDI32,    'GDI32.DLL'
    113.    
    114.     import      KERNEL32,\
    115.                 GetModuleHandle,        'GetModuleHandleA',\
    116.                 FindResource,           'FindResourceA',\
    117.                 LoadResource,           'LoadResource',\
    118.                 LockResource,           'LockResource',\
    119.                 ExitProcess,            'ExitProcess'
    120.     import      USER32,\
    121.                 RegisterClass,          'RegisterClassA',\
    122.                 CreateWindowEx,         'CreateWindowExA',\
    123.                 DefWindowProc,          'DefWindowProcA',\
    124.                 LoadCursor,             'LoadCursorA',\
    125.                 LoadIcon,               'LoadIconA',\
    126.                 LoadBitmap,             'LoadBitmapA',\
    127.                 LoadMenu,               'LoadMenuA',\
    128.                 BeginPaint,             'BeginPaint',\
    129.                 EndPaint,               'EndPaint',\
    130.                 GetClientRect,          'GetClientRect',\
    131.                 MessageBox,             'MessageBoxA',\
    132.                 SendMessage,            'SendMessageA',\
    133.                 GetMessage,             'GetMessageA',\
    134.                 DestroyWindow,          'DestroyWindow',\
    135.                 TranslateMessage,       'TranslateMessage',\
    136.                 DispatchMessage,        'DispatchMessageA',\
    137.                 PostQuitMessage,        'PostQuitMessage'
    138.     import      GDI32,\
    139.                 CreateCompatibleDC,     'CreateCompatibleDC',\
    140.                 SelectObject,           'SelectObject',\
    141.                 BitBlt,                 'BitBlt',\
    142.                 DeleteDC,               'DeleteDC',\
    143.                 DeleteObject,           'DeleteObject'
    144.  
    145. section '.rsrc' resource data readable
    146.         directory       RT_BITMAP, appBmp
    147.        
    148.         resource        appBmp,\
    149.                         300,LANG_NEUTRAL,bmp1
    150.        
    151.         bitmap          bmp1, "tweety78.bmp"
    Результат
    [​IMG]
     

    Вложения:

    • tut_25.gif
      tut_25.gif
      Размер файла:
      12,3 КБ
      Просмотров:
      2.364
    rococo795 нравится это.
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 26. Экран-заставка

    Код (ASM):
    1. format PE GUI 4.0 DLL
    2. entry DllMain
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         insH            dd ?                    ;handle for instance
    8.         wndCls          WNDCLASS
    9.         wndClsName      db 'TUT_26A',0
    10.         wndMsg          MSG
    11.         wndH            dd ?
    12.  
    13.         bmpH            dd ?
    14.         bmpOldH         dd ?
    15.         bmp             BITMAP
    16.         bmp1Rect        RECT
    17.  
    18.         ps              PAINTSTRUCT
    19.         dcH             dd ?
    20.         dcMemH          dd ?
    21.  
    22.         dlgY            dd ?
    23.         dlgX            dd ?
    24.         dlgRect         RECT
    25.         desktopRect     RECT
    26.        
    27.         timerId         dd ?
    28.  
    29. section '.code' code readable executable
    30.    proc DllMain,hinstDll,fdwReason,lpvReserved
    31.         cmp  [fdwReason],DLL_PROCESS_ATTACH
    32.         jne  @f
    33.         push [hinstDll]
    34.         pop  [insH]
    35.         call show_bitmap
    36.         @@:
    37.         mov  eax,TRUE
    38.         return
    39.    endp
    40.  
    41.    proc show_bitmap
    42.                 push [insH]
    43.                 pop  [wndCls.hInstance]
    44.                 mov  [wndCls.style],CS_HREDRAW + CS_VREDRAW
    45.                 mov  [wndCls.lpfnWndProc],splash_procedure
    46.                 mov  [wndCls.lpszClassName],wndClsName
    47.                 mov  [wndCls.hbrBackground],COLOR_WINDOW + 1
    48.         invoke  LoadIcon,NULL,IDI_APPLICATION
    49.                 mov  [wndCls.hIcon],eax
    50.         invoke  LoadCursor,NULL,IDC_ARROW
    51.                 mov  [wndCls.hCursor],eax
    52.         invoke  RegisterClass,wndCls
    53.        
    54.         invoke  CreateWindowEx,NULL,wndClsName,NULL,\
    55.                 WS_POPUP + WS_VISIBLE,\
    56.                 CW_USEDEFAULT,CW_USEDEFAULT,600,371,\
    57.                 NULL,NULL,[insH],NULL
    58.                 mov  [wndH],eax
    59.  
    60.         ;+---------------------------+
    61.         ;| entering the message loop |
    62.         ;+---------------------------+
    63.         window_message_loop_start:
    64.                 invoke  GetMessage,wndMsg,NULL,0,0
    65.                         or    eax,eax
    66.                         je    window_message_loop_end
    67.                 invoke  TranslateMessage,wndMsg
    68.                 invoke  DispatchMessage,wndMsg
    69.                         jmp     window_message_loop_start
    70.  
    71.         window_message_loop_end:
    72.                 return
    73.    endp
    74.  
    75.    proc splash_procedure,hWnd,uMsg,wParam,lParam
    76.                 push ebx esi edi
    77.                 cmp  [uMsg],WM_CREATE
    78.                 je   wmCREATE
    79.                 cmp  [uMsg],WM_LBUTTONDOWN
    80.                 je   wmLBUTTONDOWN
    81.                 cmp  [uMsg],WM_PAINT
    82.                 je   wmPAINT
    83.                 cmp  [uMsg],WM_TIMER
    84.                 je   wmTIMER
    85.                 cmp  [uMsg],WM_DESTROY
    86.                 je   wmDESTROY
    87.        
    88.         wmDEFAULT:
    89.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    90.                         jmp  wmBYE
    91.        
    92.         wmCREATE:
    93.                 invoke  GetWindowRect,[hWnd],dlgRect
    94.                 invoke  GetDesktopWindow
    95.                 invoke  GetWindowRect,eax,desktopRect
    96.                         push FALSE                      ;MoveWindow :: no repaint
    97.                        
    98.                         mov  eax,[dlgRect.bottom]
    99.                         sub  eax,[dlgRect.top]
    100.                         mov  [dlgY],eax
    101.                         push eax                        ;MoveWindow :: new height for window
    102.                        
    103.                         mov  eax,[dlgRect.right]
    104.                         sub  eax,[dlgRect.left]
    105.                         mov  [dlgX],eax
    106.                         push eax                        ;MoveWindow :: new width for window
    107.                        
    108.                         mov  eax,[desktopRect.bottom]
    109.                         sub  eax,[dlgY]
    110.                         shr  eax,1
    111.                         push eax                        ;MoveWindow :: new position of the top of the window
    112.                        
    113.                         mov  eax,[desktopRect.right]
    114.                         sub  eax,[dlgX]
    115.                         shr  eax,1
    116.                         push eax                        ;MoveWindow :: new position of the left side of the window
    117.                         push [hWnd]                     ;MoveWindow :: handle for window
    118.                         call [MoveWindow]
    119.                
    120.                 invoke  LoadBitmap,[insH],300
    121.                         mov  [bmpH],eax
    122.                
    123.                 invoke  SetTimer,[hWnd],1,2000,NULL
    124.                         mov  [timerId],eax
    125.                         jmp  wmBYE
    126.  
    127.         wmPAINT:
    128.                 invoke  BeginPaint,[hWnd],ps
    129.                         mov  [dcH],eax
    130.                 invoke  CreateCompatibleDC,eax
    131.                         mov  [dcMemH],eax
    132.                 invoke  SelectObject,eax,[bmpH]
    133.                         mov  [bmpOldH],eax
    134.                 invoke  GetObject,[bmpH],sizeof.BITMAP,bmp
    135.                 ;invoke BitBlt,[dcH],0,0,[bmp.bmWidth],[bmp.bmHeight],[dcMemH],0,0,SRCCOPY
    136.                         ;the usage of StretchBlt is here
    137.                         ;-------------------------------
    138.                         invoke  StretchBlt,[dcH],0,0,600,371,\
    139.                                 [dcMemH],0,0,[bmp.bmWidth],[bmp.bmHeight],SRCCOPY
    140.                 invoke  SelectObject,[dcMemH],[bmpOldH]
    141.                 invoke  DeleteObject,[dcMemH]
    142.                 invoke  EndPaint,[hWnd],ps
    143.                         jmp  wmBYE
    144.  
    145.         wmLBUTTONDOWN:
    146.                 invoke  DestroyWindow,[hWnd]
    147.                         jmp  wmBYE
    148.  
    149.         wmTIMER:
    150.                 invoke  SendMessage,[hWnd],WM_LBUTTONDOWN,NULL,NULL
    151.                 invoke  KillTimer,[hWnd],[timerId]
    152.                         jmp  wmBYE
    153.        
    154.         wmDESTROY:
    155.                         cmp  [bmpH],NULL
    156.                         je   @f
    157.                 invoke  DeleteObject,[bmpH]
    158.                 @@:
    159.                 invoke  PostQuitMessage,NULL
    160.                         jmp  wmBYE
    161.        
    162.         wmBYE:
    163.                 pop  edi esi ebx
    164.                 return
    165.    endp
    166.  
    167. section '.idata' import data readable
    168.         library KERNEL32, 'KERNEL32.DLL',\
    169.                 USER32,   'USER32.DLL',\
    170.                 GDI32,    'GDI32.DLL'
    171.  
    172.     import      KERNEL32,\
    173.                 GetModuleHandle,        'GetModuleHandleA',\
    174.                 ExitProcess,            'ExitProcess'
    175.     import      USER32,\
    176.                 RegisterClass,          'RegisterClassA',\
    177.                 RegisterClassEx,        'RegisterClassExA',\
    178.                 CreateWindowEx,         'CreateWindowExA',\
    179.                 DefWindowProc,          'DefWindowProcA',\
    180.                 LoadCursor,             'LoadCursorA',\
    181.                 LoadIcon,               'LoadIconA',\
    182.                 LoadBitmap,             'LoadBitmapA',\
    183.                 LoadMenu,               'LoadMenuA',\
    184.                 BeginPaint,             'BeginPaint',\
    185.                 EndPaint,               'EndPaint',\
    186.                 GetWindowRect,          'GetWindowRect',\
    187.                 GetDesktopWindow,       'GetDesktopWindow',\
    188.                 MoveWindow,             'MoveWindow',\
    189.                 SetTimer,               'SetTimer',\
    190.                 KillTimer,              'KillTimer',\
    191.                 ShowWindow,             'ShowWindow',\
    192.                 MessageBox,             'MessageBoxA',\
    193.                 SendMessage,            'SendMessageA',\
    194.                 GetMessage,             'GetMessageA',\
    195.                 DestroyWindow,          'DestroyWindow',\
    196.                 TranslateMessage,       'TranslateMessage',\
    197.                 DispatchMessage,        'DispatchMessageA',\
    198.                 PostQuitMessage,        'PostQuitMessage'
    199.     import      GDI32,\
    200.                 CreateCompatibleDC,     'CreateCompatibleDC',\
    201.                 SelectObject,           'SelectObject',\
    202.                 GetObject,              'GetObjectA',\
    203.                 GetCurrentObject,       'GetCurrentObject',\
    204.                 StretchBlt,             'StretchBlt',\
    205.                 BitBlt,                 'BitBlt',\
    206.                 DeleteDC,               'DeleteDC',\
    207.                 DeleteObject,           'DeleteObject'
    208.  
    209. section '.edata' export data readable
    210.         export  'TUT_24A.DLL',\
    211.                 show_bitmap,            'show_bitmap',\
    212.                 splash_procedure,       'splash_procedure'
    213.  
    214. section '.reloc' fixups data discardable
    215.  
    216. section '.rsrc' resource data readable
    217.         directory       RT_BITMAP, appBmp
    218.        
    219.         resource        appBmp,\
    220.                         300,LANG_NEUTRAL,bmp1
    221.        
    222.         bitmap          bmp1, "splash.bmp"
    223.  
    224.  
    225.  
    226. code for tut_26b.asm
    227. format PE GUI 4.0
    228. entry start
    229.  
    230. include '%fasminc%\win32a.inc'
    231.  
    232. section '.data' data readable writeable
    233.         wndH            dd ?
    234.         insH            dd ?
    235.         wndClsName      db 'TUT_26B',0
    236.         wndTitle        db 'Tutorial 26B',0
    237.  
    238.         wndCls  WNDCLASS
    239.         wndMsg  MSG
    240.        
    241.         libName         db 'TUT_26A.DLL',0
    242.        
    243. section '.code' code readable executable
    244.    start:
    245.         invoke  LoadLibrary,libName
    246.                 cmp  eax,NULL
    247.                 je   @f
    248.         invoke  FreeLibrary,eax
    249.         @@:
    250.         invoke  GetModuleHandle,0
    251.                 mov  [insH],eax
    252.                 mov  [wndCls.hInstance],eax
    253.                 mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    254.                 mov  [wndCls.lpfnWndProc],window_procedure
    255.                 mov  [wndCls.lpszClassName],wndClsName
    256.                 mov  [wndCls.hbrBackground],COLOR_BTNFACE+1
    257.         invoke  LoadIcon,NULL,IDI_APPLICATION
    258.                 mov  [wndCls.hIcon],eax
    259.         invoke  LoadCursor,NULL,IDC_ARROW
    260.                 mov  [wndCls.hCursor],eax
    261.         invoke  RegisterClass,wndCls
    262.  
    263.         invoke  CreateWindowEx,0,\
    264.                 wndClsName,wndTitle,\
    265.                 WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    266.                 CW_USEDEFAULT,CW_USEDEFAULT,400,240,\
    267.                 NULL,NULL,[insH],NULL
    268.                 mov  [wndH],eax
    269.         invoke  ShowWindow,eax,SW_MAXIMIZE
    Продолжение ниже
     

    Вложения:

    • tut_26.jpg
      tut_26.jpg
      Размер файла:
      19,9 КБ
      Просмотров:
      2.347
    rococo795 нравится это.
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308
    Код (ASM):
    1.    ;+---------------------------+
    2.    ;| entering the message loop |
    3.    ;+---------------------------+
    4.    window_message_loop_start:
    5.         invoke  GetMessage,wndMsg,NULL,0,0
    6.                 or    eax,eax
    7.                 je    window_message_loop_end
    8.         invoke  TranslateMessage,wndMsg
    9.         invoke  DispatchMessage,wndMsg
    10.                 jmp     window_message_loop_start
    11.  
    12.    window_message_loop_end:
    13.         invoke  ExitProcess,0
    14.        
    15.    ;+----------------------+
    16.    ;| the window procedure |
    17.    ;+----------------------+
    18.    proc window_procedure,hWnd,uMsg,wParam,lParam
    19.                 push ebx esi edi
    20.                 cmp  [uMsg],WM_DESTROY
    21.                 je   wmDESTROY
    22.        
    23.  
    24.         wmDEFAULT:
    25.                 invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    26.                         jmp  wmBYE
    27.  
    28.         wmDESTROY:
    29.                 invoke  PostQuitMessage,0
    30.  
    31.         wmBYE:
    32.                 pop edi esi ebx
    33.                 return
    34.    endp
    35.  
    36. section '.idata' import data readable
    37.     library     KERNEL32, 'KERNEL32.DLL',\
    38.                 USER32,   'USER32.DLL'
    39.    
    40.     import      KERNEL32,\
    41.                 GetModuleHandle,        'GetModuleHandleA',\
    42.                 LoadLibrary,            'LoadLibraryA',\
    43.                 FreeLibrary,            'FreeLibrary',\
    44.                 ExitProcess,            'ExitProcess'
    45.     import      USER32,\
    46.                 RegisterClass,          'RegisterClassA',\
    47.                 CreateWindowEx,         'CreateWindowExA',\
    48.                 DefWindowProc,          'DefWindowProcA',\
    49.                 LoadCursor,             'LoadCursorA',\
    50.                 LoadIcon,               'LoadIconA',\
    51.                 SendMessage,            'SendMessageA',\
    52.                 GetMessage,             'GetMessageA',\
    53.                 MessageBox,             'MessageBoxA',\
    54.                 ShowWindow,             'ShowWindow',\
    55.                 DestroyWindow,          'DestroyWindow',\
    56.                 TranslateMessage,       'TranslateMessage',\
    57.                 DispatchMessage,        'DispatchMessageA',\
    58.                 PostQuitMessage,        'PostQuitMessage'
    Результат
    [​IMG]
     
    Последнее редактирование: 12 дек 2016
    rococo795 нравится это.
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 27. Тултип-контрол

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. section '.data' data readable writeable
    7.         wndH            dd ?
    8.         insH            dd ?
    9.         wndClsName      db 'TUT_27',0
    10.         wndTitle        db 'Tutorial 27',0
    11.  
    12.         wndCls  WNDCLASS
    13.         wndMsg  MSG
    14.        
    15.         tipsH           dd ?
    16.        
    17.         ctlClsNameTips  db 'Tooltips_class32',0
    18.        
    19.         tipsTxt1        db 'This is the upper left area of the dialog',0
    20.         tipsTxt2        db 'This is the upper right area of the dialog',0
    21.         tipsTxt3        db 'This is the lower left area of the dialog',0
    22.         tipsTxt4        db 'This is the lower right area of the dialog',0
    23.  
    24.         ti      TOOLINFO
    25.         id      dd ?
    26.         rect    RECT
    27.         buffer  rb 0xFF
    28.        
    29. section '.code' code readable executable
    30.    start:
    31.         invoke  GetModuleHandle,0
    32.                 mov  [insH],eax
    33.         invoke  DialogBoxParam,eax,101,NULL,dialog_procedure,NULL
    34.         invoke  ExitProcess,0
    35.  
    36.    proc dialog_procedure,hDlg,uMsg,wParam,lParam
    37.                 push ebx esi edi
    38.                 cmp  [uMsg],WM_INITDIALOG
    39.                 je   wmINITDIALOG
    40.                 cmp  [uMsg],WM_CLOSE
    41.                 je   wmCLOSE
    42.                 pop  edi esi ebx
    43.                 mov  eax,FALSE
    44.                 return
    45.        
    46.         wmCLOSE:
    47.                 invoke  EndDialog,[hDlg],NULL
    48.                         jmp  wmBYE
    49.  
    50.         wmINITDIALOG:
    51.                 invoke  InitCommonControls
    52.                 invoke  CreateWindowEx,NULL,ctlClsNameTips,NULL,\
    53.                         TTS_ALWAYSTIP,\
    54.                         CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\
    55.                         NULL,NULL,[insH],NULL
    56.                         mov  [tipsH],eax
    57.                         mov  [id],0
    58.                         mov  [ti.cbSize],sizeof.TOOLINFO
    59.                         mov  [ti.uFlags],TTF_SUBCLASS
    60.                         push [hDlg]
    61.                         pop  [ti.hwnd]
    62.                 invoke  GetWindowRect,[hDlg],rect
    63.                 stdcall SetDlgToolArea,[hDlg],ti,tipsTxt1,[id],rect
    64.                         inc  [id]
    65.                 stdcall SetDlgToolArea,[hDlg],ti,tipsTxt2,[id],rect
    66.                         inc  [id]
    67.                 stdcall SetDlgToolArea,[hDlg],ti,tipsTxt3,[id],rect
    68.                         inc  [id]
    69.                 stdcall SetDlgToolArea,[hDlg],ti,tipsTxt4,[id],rect
    70.                 invoke  EnumChildWindows,[hDlg],EnumChild,ti
    71.                         jmp  wmBYE
    72.         wmBYE:
    73.                 pop  edi esi ebx
    74.                 mov  eax,TRUE
    75.                 return
    76.    endp
    77.    proc EnumChild,hwnd,lParam
    78.                 push edi
    79.                 mov  edi,[lParam]
    80.                 push [hwnd]
    81.                 pop  [edi + TOOLINFO.uId]
    82.                 or   [edi + TOOLINFO.uFlags],TTF_IDISHWND
    83.         invoke  GetWindowText,[hwnd],buffer,0xFF
    84.                 mov  [edi + TOOLINFO.lpszText],buffer
    85.         invoke  SendMessage,[tipsH],TTM_ADDTOOL,NULL,edi
    86.                 pop  edi
    87.                 return
    88.    endp
    89.  
    90.    proc SetDlgToolArea,hDlg,lpti,lpText,id,lprect
    91.         push edi esi
    92.         mov  edi,[lpti]
    93.         mov  esi,[lprect]
    94.         cmp  [id],0
    95.         je   id_0
    96.         cmp  [id],1
    97.         je   id_1
    98.         cmp  [id],2
    99.         je   id_2
    100.         cmp  [id],3
    101.         je   id_3
    102.         jmp  id_exit
    103.        
    104.         id_0:
    105.                 mov  [edi + TOOLINFO.rect.left],0
    106.                 mov  [edi + TOOLINFO.rect.top],0
    107.                 mov  eax,[esi + RECT.right]
    108.                 sub  eax,[esi + RECT.left]
    109.                 shr  eax,1
    110.                 mov  [edi + TOOLINFO.rect.right],eax
    111.                 mov  eax,[esi + RECT.bottom]
    112.                 sub  eax,[esi + RECT.top]
    113.                 shr  eax,1
    114.                 mov  [edi + TOOLINFO.rect.bottom],eax
    115.                 jmp  id_exit
    116.         id_1:
    117.                 mov  eax,[esi + RECT.right]
    118.                 sub  eax,[esi + RECT.left]
    119.                 shr  eax,1
    120.                 inc  eax
    121.                 mov  [edi + TOOLINFO.rect.left],eax
    122.                 mov  [edi + TOOLINFO.rect.top],0
    123.                 mov  eax,[esi + RECT.right]
    124.                 sub  eax,[esi + RECT.left]
    125.                 mov  [edi + TOOLINFO.rect.right],eax
    126.                 mov  eax,[esi + RECT.bottom]
    127.                 sub  eax,[esi + RECT.top]
    128.                 mov  [edi + TOOLINFO.rect.bottom],eax
    129.                 jmp  id_exit
    130.         id_2:
    131.                 mov  [edi + TOOLINFO.rect.left],0
    132.                 mov  eax,[esi + RECT.bottom]
    133.                 sub  eax,[esi + RECT.top]
    134.                 shr  eax,1
    135.                 inc  eax
    136.                 mov  [edi + TOOLINFO.rect.top],eax
    137.                 mov  eax,[esi + RECT.right]
    138.                 sub  eax,[esi + RECT.left]
    139.                 shr  eax,1
    140.                 mov  [edi + TOOLINFO.rect.right],eax
    141.                 mov  eax,[esi + RECT.bottom]
    142.                 sub  eax,[esi + RECT.top]
    143.                 mov  [edi + TOOLINFO.rect.bottom],eax
    144.                 jmp  id_exit
    145.         id_3:
    146.                 mov  eax,[esi + RECT.right]
    147.                 sub  eax,[esi + RECT.left]
    148.                 shr  eax,1
    149.                 inc  eax
    150.                 mov  [edi + TOOLINFO.rect.left],eax
    151.                 mov  eax,[esi + RECT.bottom]
    152.                 sub  eax,[esi + RECT.top]
    153.                 shr  eax,1
    154.                 inc  eax
    155.                 mov  [edi + TOOLINFO.rect.top],eax
    156.                 mov  eax,[esi + RECT.right]
    157.                 sub  eax,[esi + RECT.left]
    158.                 mov  [edi + TOOLINFO.rect.right],eax
    159.                 mov  eax,[esi + RECT.bottom]
    160.                 sub  eax,[esi + RECT.top]
    161.                 mov  [edi + TOOLINFO.rect.bottom],eax
    162.                 jmp  id_exit
    163.         id_exit:
    164.                         push [lpText]
    165.                         pop  [edi + TOOLINFO.lpszText]
    166.                 invoke  SendMessage,[tipsH],TTM_ADDTOOL,NULL,[lpti]
    167.                         pop  esi edi
    168.                         return
    169.    endp
    170.  
    171. section '.idata' import data readable
    172.     library     KERNEL32, 'KERNEL32.DLL',\
    173.                 USER32,   'USER32.DLL',\
    174.                 COMCTL32, 'COMCTL32.DLL'
    175.    
    176.     import      KERNEL32,\
    177.                 GetModuleHandle,        'GetModuleHandleA',\
    178.                 ExitProcess,            'ExitProcess'
    179.     import      USER32,\
    180.                 RegisterClass,          'RegisterClassA',\
    181.                 CreateWindowEx,         'CreateWindowExA',\
    182.                 DialogBoxParam,         'DialogBoxParamA',\
    183.                 EndDialog,              'EndDialog',\
    184.                 GetWindowRect,          'GetWindowRect',\
    185.                 EnumChildWindows,       'EnumChildWindows',\
    186.                 GetWindowText,          'GetWindowTextA',\
    187.                 SendMessage,            'SendMessageA'
    188.     import      COMCTL32,\
    189.                 InitCommonControls,     'InitCommonControls'
    190.  
    191. section '.rsrc' resource data readable
    192.         directory       RT_DIALOG,appDialog
    193.        
    194.         resource        appDialog,\
    195.                         101,LANG_NEUTRAL,dlgMain
    196.  
    197.         dialog dlgMain,'Tooltip Example',0,0,229,96,\
    198.                 WS_CAPTION + WS_POPUP + WS_SYSMENU + DS_MODALFRAME
    199.                 dialogitem      'BUTTON','&Ok',1000,55,68,50,14,BS_PUSHBUTTON + WS_VISIBLE + WS_TABSTOP
    200.                 dialogitem      'BUTTON','&Exit',1001,123,68,50,14,BS_PUSHBUTTON + WS_VISIBLE + WS_TABSTOP
    201.         enddialog
    Результат
    [​IMG]
     

    Вложения:

    • tut_27.gif
      tut_27.gif
      Размер файла:
      3,6 КБ
      Просмотров:
      2.351
    rococo795 нравится это.
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 28. Debug API часть первая

    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. include '%fasminc%\win32a.inc'
    5.  
    6. struct EXCEPTION_RECORD
    7.         .ExceptionCode          dd ?
    8.         .ExceptionFlags         dd ?
    9.         .ExceptionRecord        dd ?
    10.         .ExceptionAddress       dd ?
    11.         .NumberParameters       dd ?
    12.         .ExceptionInformation   rd 15
    13. ends
    14.  
    15. struct EXCEPTION_DEBUG_INFO
    16.         .ExceptionRecord        EXCEPTION_RECORD
    17.         .dwFirstChance          dd ?
    18. ends
    19.  
    20. struct CREATE_PROCESS_DEBUG_INFO
    21.         .hFile                  dd ?
    22.         .hProcess               dd ?
    23.         .hThread                dd ?
    24.         .lpBaseOfImage          dd ?
    25.         .dwDebugInfoFileOffset  dd ?
    26.         .nDebugInfoSize         dd ?
    27.         .lpThreadLocalBase      dd ?
    28.         .lpStartAddress         dd ?
    29.         .lpImageName            dd ?
    30.         .fUnicode               dw ?
    31. ends
    32.  
    33. struct EXIT_PROCESS_DEBUG_INFO
    34.         .dwExitCode             dd ?
    35. ends
    36.  
    37. struct DEBUG_EVENT
    38.         .dwDebugEventCode       dd ?
    39.         .dwProcessId            dd ?
    40.         .dwThreadId             dd ?
    41.         .u                      rd 22
    42. ends
    43.  
    44. INFINITE                        = 0xFFFFFFFF
    45. DBG_EXCEPTION_NOT_HANDLED       = 0x80010001
    46. DBG_CONTINUE                    = 0x00010002
    47. DBG_TERMINATE_THREAD            = 0x40010003
    48. DBG_TERMINATE_PROCESS           = 0x40010004
    49. EXIT_PROCESS_DEBUG_EVENT        = 0x00000005
    50. CREATE_PROCESS_DEBUG_EVENT      = 0x00000003
    51. EXCEPTION_DEBUG_EVENT           = 0x00000001
    52. CREATE_THREAD_DEBUG_EVENT       = 0x00000002
    53. EXIT_THREAD_DEBUG_EVENT         = 0x00000004
    54. EXCEPTION_BREAKPOINT            = 0x80000003
    55.  
    56. WMU_DBGSTART                    = WM_USER + 20
    57. WMU_DBGEND                      = WM_USER + 22
    58.  
    59. section '.data' data readable writeable
    60.         insH            dd ?
    61.      
    62.         ofn             OPENFILENAME
    63.         ofnTxtFilter    db 'Executable Files',0,'*.exe',0
    64.                         db 'All Files',0,'*.*',0,0
    65.         ofnBuffer       rb 512
    66.      
    67.         proStartInfo    STARTUPINFO
    68.         proInfo         PROCESS_INFORMATION
    69.         proExitCode     dd ?
    70.      
    71.         dbgEvent        DEBUG_EVENT
    72.         dbgId           dd ?
    73.         dbgThreadH      dd ?
    74.         dbgThreadStatus dd ?
    75.      
    76.         fBuffer         rb 0xFF
    77.         f1              db '0x%lX',0
    78.         f2              db '%s',0
    79.      
    80.         timerId         dd ?
    81.      
    82.         dbgMsg1         db 'EXCEPTION_DEBUG_EVENT',0
    83.         dbgMsg2         db 'CREATE_THREAD_DEBUG_EVENT',0
    84.         dbgMsg3         db 'CREATE_PROCESS_DEBUG_EVENT',0
    85.         dbgMsg4         db 'EXIT_THREAD_DEBUG_EVENT',0
    86.         dbgMsg5         db 'EXIT_PROCESS_DEBUG_EVENT',0
    87.         dbgMsg6         db 'LOAD_DLL_DEBUG_EVENT',0
    88.         dbgMsg7         db 'UNLOAD_DLL_DEBUG_EVENT',0
    89.         dbgMsg8         db 'OUTPUT_DEBUG_STRING_EVENT',0
    90.         dbgMsg9         db 'RIP_EVENT',0
    91.         dbgMsgError     db 'ERROR : INVALID DEBUG EVENT',0
    92.         dbgMsgExit      db 'BYE BYE',0
    93.         dbgMsgBreak     db 'EXCEPTION_BREAKPOINT',0
    94.      
    95. section '.code' code readable executable
    96.    start:
    97.         invoke  GetModuleHandle,0
    98.                 mov  [insH],0
    99.         invoke  DialogBoxParam,eax,100,NULL,dialog_procedure,NULL
    100.         invoke  ExitProcess,0
    101.  
    102.    proc dialog_procedure,hDlg,uMsg,wParam,lParam
    103.         push ebx esi edi
    104.  
    105.         cmp  [uMsg],WM_COMMAND
    106.         je   wmCOMMAND
    107.         cmp  [uMsg],WM_CLOSE
    108.         je   wmCLOSE
    109.         cmp  [uMsg],WM_TIMER
    110.         je   wmTIMER
    111.         cmp  [uMsg],WM_INITDIALOG
    112.         je   wmINITDIALOG
    113.         cmp  [uMsg],WMU_DBGSTART
    114.         je   wmuDBGSTART
    115.         cmp  [uMsg],WMU_DBGEND
    116.         je   wmuDBGEND
    117.  
    118.         pop  edi esi ebx
    119.         mov  eax,FALSE
    120.         return
    121.      
    122.         wmCLOSE:
    123.                 invoke  EndDialog,[hDlg],NULL
    124.                         jmp  wmBYE
    125.  
    126.         wmTIMER:
    127.                 invoke  KillTimer,[hDlg],[timerId]
    128.                 invoke  ResumeThread,[dbgThreadH]
    129.                         jmp  wmBYE
    130.         wmuDBGSTART:
    131.                 invoke  CreateThread,NULL,0,debug_thread_procedure,[hDlg],NORMAL_PRIORITY_CLASS,dbgId
    132.                         mov  [dbgThreadH],eax
    133.                         jmp  wmBYE
    134.  
    135.         wmuDBGEND:
    136.                 invoke  CloseHandle,[dbgThreadH]
    137.                         jmp  wmBYE
    138.      
    139.         wmCOMMAND:
    140.  
    141.                         cmp  [wParam],0xFFFF and 300                    ;Button :: Browse
    142.                         je   wmCOMMAND_300
    143.                         jmp  wmBYE
    144.              
    145.                 wmCOMMAND_300:
    146.                         invoke  GetOpenFileName,ofn
    147.                                 cmp  eax,TRUE
    148.                                 jne  wmBYE
    149.                         invoke  GetDlgItem,[hDlg],100
    150.                         invoke  SetWindowText,eax,ofnBuffer
    151.                         invoke  SendMessage,[hDlg],WMU_DBGSTART,NULL,NULL
    152.                                 jmp  wmBYE
    153.              
    154.         wmINITDIALOG:
    155.                 mov  [ofn.lStructSize],sizeof.OPENFILENAME
    156.                 mov  [ofn.lpstrFilter],ofnTxtFilter
    157.                 mov  [ofn.lpstrFile],ofnBuffer
    158.                 mov  [ofn.nMaxFile],512
    159.                 mov  [ofn.Flags],OFN_FILEMUSTEXIST + OFN_PATHMUSTEXIST + OFN_LONGNAMES +\
    160.                      OFN_EXPLORER + OFN_HIDEREADONLY
    161.                 jmp  wmBYE
    162.  
    163.         wmBYE:
    164.                 pop  edi esi ebx
    165.                 mov  eax,TRUE
    166.                 return
    167.    endp
    168.  
    169.    proc debug_thread_procedure,hDlg
    170.         invoke  GetStartupInfo,proStartInfo
    171.         invoke  CreateProcess,ofnBuffer,NULL,NULL,NULL,FALSE,\
    172.                 NORMAL_PRIORITY_CLASS + DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS,NULL,NULL,proStartInfo,proInfo
    173.  
    174.         _300_debug_loop:
    175.                 invoke  WaitForDebugEvent,dbgEvent,INFINITE
    176.                      
    177.                         mov  edx,[dbgEvent.dwDebugEventCode]
    178.                      
    179.                         mov  eax,dbgMsg1        ;EXCEPTION_DEBUG_EVENT
    180.                         cmp  edx,1
    181.                         je   loop_continue
    182.                      
    183.                         mov  eax,dbgMsg2        ;CREATE_THREAD_DEBUG_EVENT
    184.                         cmp  edx,2
    185.                         je   loop_continue
    186.                      
    187.                         mov  eax,dbgMsg3        ;CREATE_PROCESS_DEBUG_EVENT
    188.                         cmp  edx,3
    189.                         je   loop_continue
    190.                      
    191.                         mov  eax,dbgMsg4        ;EXIT_THREAD_DEBUG_EVENT
    192.                         cmp  edx,4
    193.                         je   loop_continue
    194.              
    195.                         mov  eax,dbgMsg5        ;EXIT_PROCESS_DEBUG_EVENT
    196.                         cmp  edx,5
    197.                         je   loop_continue
    198.  
    199.                         mov  eax,dbgMsg6        ;LOAD_DLL_DEBUG_EVENT
    200.                         cmp  edx,6
    201.                         je   loop_continue
    202.  
    203.                         mov  eax,dbgMsg7        ;UNLOAD_DLL_DEBUG_EVENT
    204.                         cmp  edx,7
    205.                         je   loop_continue
    206.  
    207.                         mov  eax,dbgMsg8        ;OUTPUT_DEBUG_STRING_EVENT
    208.                         cmp  edx,8
    209.                         je   loop_continue
    210.  
    211.                         mov  eax,dbgMsg9        ;RIP_EVENT
    212.                         cmp  edx,9
    213.                         je   loop_continue
    214.                      
    215.                         mov  eax,dbgMsgError
    Продолжение следует
     

    Вложения:

    • tut_28.gif
      tut_28.gif
      Размер файла:
      4,2 КБ
      Просмотров:
      2.290
    Последнее редактирование: 17 дек 2016
    rococo795 нравится это.
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308
    Код (ASM):
    1.                loop_continue:
    2.                         stdcall debug_set_window_message,[hDlg],eax
    3.                         invoke  SetTimer,[hDlg],1,2000,NULL
    4.                                 mov  [timerId],eax
    5.                         invoke  SuspendThread,[dbgThreadH]
    6.                
    7.                         ;EXIT_PROCESS_DEBUG_EVENT
    8.                         cmp  [dbgEvent.dwDebugEventCode],EXIT_PROCESS_DEBUG_EVENT
    9.                         je   _300_debug_exit
    10.                        
    11.                         ;EXCEPTION_DEBUG_EVENT
    12.                         cmp  [dbgEvent.dwDebugEventCode],EXCEPTION_DEBUG_EVENT
    13.                         jne  @f
    14.                                 ;EXCEPTION_BREAKPOINT
    15.                                 cmp  [dbgEvent.u + EXCEPTION_DEBUG_INFO.ExceptionRecord.ExceptionCode],EXCEPTION_BREAKPOINT
    16.                                 jne  @f
    17.                                 stdcall debug_set_window_message,[hDlg],dbgMsgBreak
    18.                                 invoke  SetTimer,[hDlg],1,2000,NULL
    19.                                         mov  [timerId],eax
    20.                                 invoke  SuspendThread,[dbgThreadH]
    21.                         invoke  ContinueDebugEvent,[dbgEvent.dwProcessId],[dbgEvent.dwThreadId],DBG_CONTINUE
    22.                                 jmp  _300_debug_loop
    23.                
    24.                 @@:     ;CREATE_PROCESS_DEBUG_EVENT
    25.                         cmp  [dbgEvent.dwDebugEventCode],CREATE_PROCESS_DEBUG_EVENT
    26.                         jne  @f
    27.                 stdcall debug_set_window_info,[hDlg],[dbgEvent.u + CREATE_PROCESS_DEBUG_INFO.hFile],101
    28.                 stdcall debug_set_window_info,[hDlg],[dbgEvent.u + CREATE_PROCESS_DEBUG_INFO.hProcess],102
    29.                 stdcall debug_set_window_info,[hDlg],[dbgEvent.u + CREATE_PROCESS_DEBUG_INFO.hThread],103
    30.                 stdcall debug_set_window_info,[hDlg],[dbgEvent.u + CREATE_PROCESS_DEBUG_INFO.lpBaseOfImage],104
    31.                 stdcall debug_set_window_info,[hDlg],[dbgEvent.u + CREATE_PROCESS_DEBUG_INFO.lpStartAddress],105
    32.                         jmp  _300_debug_continue
    33.                
    34.                 @@:
    35.  
    36.         _300_debug_continue:
    37.                 invoke  ContinueDebugEvent,[dbgEvent.dwProcessId],[dbgEvent.dwThreadId],DBG_EXCEPTION_NOT_HANDLED
    38.                         jmp  _300_debug_loop
    39.        
    40.         _300_debug_exit:
    41.                 stdcall debug_set_window_message,[hDlg],dbgMsgExit
    42.                
    43.                 invoke  ContinueDebugEvent,[dbgEvent.dwProcessId],[dbgEvent.dwThreadId],DBG_TERMINATE_THREAD
    44.                 invoke  ContinueDebugEvent,[dbgEvent.dwProcessId],[dbgEvent.dwThreadId],DBG_TERMINATE_PROCESS
    45.                 invoke  CloseHandle,[proInfo.hProcess]
    46.                 invoke  CloseHandle,[proInfo.hThread]
    47.                 invoke  SendMessage,[hDlg],WMU_DBGEND,NULL,NULL
    48.                         return
    49.    endp
    50.    
    51.    proc debug_set_window_info,hDlg,debugInfo,dlgItemNum
    52.         invoke  wsprintf,fBuffer,f1,[debugInfo]
    53.         invoke  GetDlgItem,[hDlg],[dlgItemNum]
    54.         invoke  SetWindowText,eax,fBuffer
    55.                 return
    56.    endp
    57.  
    58.    proc debug_set_window_message,hDlg,dbgMsg
    59.         invoke  wsprintf,fBuffer,f2,[dbgMsg]
    60.         invoke  GetDlgItem,[hDlg],106
    61.         invoke  SetWindowText,eax,fBuffer
    62.                 return
    63.    endp
    64.  
    65. section '.idata' import data readable
    66.     library     KERNEL32, 'KERNEL32.DLL',\
    67.                 USER32,   'USER32.DLL',\
    68.                 COMDLG32, 'COMDLG32.DLL'
    69.    
    70.     import      KERNEL32,\
    71.                 GetModuleHandle,        'GetModuleHandleA',\
    72.                 GetStartupInfo,         'GetStartupInfoA',\
    73.                 CreateProcess,          'CreateProcessA',\
    74.                 CloseHandle,            'CloseHandle',\
    75.                 ContinueDebugEvent,     'ContinueDebugEvent',\
    76.                 WaitForDebugEvent,      'WaitForDebugEvent',\
    77.                 GetExitCodeProcess,     'GetExitCodeProcess',\
    78.                 TerminateProcess,       'TerminateProcess',\
    79.                 TerminateThread,        'TerminateThread',\
    80.                 CreateThread,           'CreateThread',\
    81.                 GetExitCodeThread,      'GetExitCodeThread',\
    82.                 SuspendThread,          'SuspendThread',\
    83.                 ResumeThread,           'ResumeThread',\
    84.                 ExitThread,             'ExitThread',\
    85.                 ExitProcess,            'ExitProcess'
    86.     import      USER32,\
    87.                 RegisterClass,          'RegisterClassA',\
    88.                 CreateWindowEx,         'CreateWindowExA',\
    89.                 SendMessage,            'SendMessageA',\
    90.                 GetMessage,             'GetMessageA',\
    91.                 MessageBox,             'MessageBoxA',\
    92.                 DialogBoxParam,         'DialogBoxParamA',\
    93.                 SetWindowText,          'SetWindowTextA',\
    94.                 wsprintf,               'wsprintfA',\
    95.                 GetDlgItem ,            'GetDlgItem',\
    96.                 SetTimer,               'SetTimer',\
    97.                 KillTimer,              'KillTimer',\
    98.                 EndDialog,              'EndDialog'
    99.     import      COMDLG32,\
    100.                 GetOpenFileName,        'GetOpenFileNameA'
    101.  
    102. section '.rsrc' resource data readable
    103.         directory       RT_DIALOG,appDialog
    104.        
    105.         resource        appDialog,\
    106.                         100,LANG_NEUTRAL,dlgMain
    107.  
    108.         dialog dlgMain,'Simple Debugger',0,0,300,100,\
    109.                 DS_MODALFRAME + WS_POPUP + WS_CAPTION + WS_SYSMENU,\
    110.                 ,,'Tahoma',8
    111.                 dialogitem      'STATIC','File :',-1,8,8,17,10,SS_LEFT + WS_VISIBLE
    112.                 dialogitem      'BUTTON','Browse',300,242,5,50,15,BS_PUSHBUTTON + WS_VISIBLE + WS_TABSTOP
    113.                 dialogitem      'STATIC','',100,27,7,206,11,SS_RIGHT + SS_SUNKEN + SS_PATHELLIPSIS + WS_VISIBLE
    114.                 dialogitem      'BUTTON',' Handle Information ',-1,8,23,120,58,BS_GROUPBOX + WS_VISIBLE
    115.                 dialogitem      'STATIC','',101,72,37,51,11,SS_RIGHT + SS_SUNKEN + WS_VISIBLE + WS_GROUP
    116.                 dialogitem      'STATIC','',102,72,51,51,11,SS_RIGHT + SS_SUNKEN + WS_VISIBLE + WS_GROUP
    117.                 dialogitem      'STATIC','',103,72,65,51,11,SS_RIGHT + SS_SUNKEN + WS_VISIBLE + WS_GROUP
    118.                 dialogitem      'STATIC','File Handle :',-1,15,38,41,7,SS_LEFT + WS_VISIBLE + WS_GROUP
    119.                 dialogitem      'STATIC','Process Handle :',-1,15,52,54,7,SS_LEFT + WS_VISIBLE + WS_GROUP
    120.                 dialogitem      'STATIC','Thread Handle :',-1,15,66,51,7,SS_LEFT + WS_VISIBLE + WS_GROUP
    121.                 dialogitem      'STATIC','Image Base :',-1,133,29,42,8,SS_LEFT + WS_VISIBLE + WS_GROUP
    122.                 dialogitem      'STATIC','Start Address :',-1,133,44,49,7,SS_LEFT + WS_VISIBLE + WS_GROUP
    123.                 dialogitem      'STATIC','',104,188,28,103,11,SS_RIGHT + SS_SUNKEN + WS_VISIBLE
    124.                 dialogitem      'STATIC','',105,188,43,103,11,SS_RIGHT + SS_SUNKEN + WS_VISIBLE
    125.                 dialogitem      'STATIC','Debugger Message :',-1,8,87,66,8,SS_LEFT + WS_VISIBLE
    126.                 dialogitem      'STATIC','',106,79,86,215,11,SS_LEFT + SS_SUNKEN + WS_VISIBLE
    127.         enddialog
    128.  
    Результат
    [​IMG]
     
    rococo795 нравится это.
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.308

    Win32 API. Урок 31. Контрол Listview

    Текст tut_31a.asm
    Код (ASM):
    1. format PE GUI 4.0
    2. entry start
    3.  
    4. M_MAIN        = 10000
    5. MI_ICON        = 0x0000
    6. MI_SMALLICON    = 0x0002
    7. MI_LIST        = 0x0003
    8. MI_REPORT    = 0x0001
    9.  
    10. include '%fasminc%\win32a.inc'
    11.  
    12. macro RGB cR, cG, cB {
    13.     xor    eax,eax    ;clear the eax
    14.     mov    ah,cB
    15.     shl    eax,8
    16.     mov    ah,cG
    17.     mov    al,cR
    18. }
    19.  
    20. section '.data' data readable writeable
    21.     wndH        dd ?
    22.     insH        dd ?
    23.     wndClsName    db 'TUT_31',0
    24.     wndTitle    db 'Tutorial 31',0
    25.  
    26.     wndCls    WNDCLASS
    27.     wndMsg    MSG
    28.  
    29.     ctlClsNameLv    db 'SysListView32',0
    30.  
    31.     lvH        dd ?
    32.     lvTxt1        db 'File Name',0
    33.     lvTxt2        db 'Size',0
    34.     lvTxt3        db '%lu',0
    35.     lvSortSize    dd 0
    36.     lvSortFile    dd 0
    37.  
    38.     menuH        dd ?
    39.  
    40.     lvI1a    db 'Durian',0
    41.     lvI1b    db '34',0
    42.     lvI2a    db 'Banana',0
    43.     lvI2b    db '54',0
    44.     lvI3a    db 'Watermelon',0
    45.     lvI3b    db '44',0
    46.     lvI4a    db 'Apple',0
    47.     lvI4b    db '55',0
    48.     lvI5a    db 'Papaya',0
    49.     lvI5b    db '1',0
    50.  
    51. section '.code' code readable executable
    52. start:
    53.     invoke    GetModuleHandle,0
    54.         mov  [insH],eax
    55.         mov  [wndCls.hInstance],eax
    56.         mov  [wndCls.style],CS_HREDRAW or CS_VREDRAW
    57.         mov  [wndCls.lpfnWndProc],window_procedure
    58.         mov  [wndCls.lpszClassName],wndClsName
    59.         mov  [wndCls.lpszMenuName],10000
    60.         mov  [wndCls.hbrBackground],COLOR_BTNFACE+1
    61.     invoke    LoadIcon,NULL,IDI_APPLICATION
    62.         mov  [wndCls.hIcon],eax
    63.     invoke    LoadCursor,NULL,IDC_ARROW
    64.         mov  [wndCls.hCursor],eax
    65.     invoke    RegisterClass,wndCls
    66.  
    67.     invoke    CreateWindowEx,WS_EX_CLIENTEDGE,\
    68.         wndClsName,wndTitle,\
    69.         WS_OVERLAPPEDWINDOW + WS_VISIBLE,\
    70.         CW_USEDEFAULT,CW_USEDEFAULT,400,240,\
    71.         NULL,NULL,[insH],NULL
    72.         mov  [wndH],eax
    73.  
    74.     invoke    InitCommonControls
    75.  
    76. ;+---------------------------+
    77. ;| entering the message loop |
    78. ;+---------------------------+
    79. window_message_loop_start:
    80.     invoke    GetMessage,wndMsg,NULL,0,0
    81.         or    eax,eax
    82.         je    window_message_loop_end
    83.     invoke    TranslateMessage,wndMsg
    84.     invoke    DispatchMessage,wndMsg
    85.         jmp    window_message_loop_start
    86.  
    87. window_message_loop_end:
    88.     invoke    ExitProcess,0
    89.  
    90. ;+----------------------+
    91. ;| the window procedure |
    92. ;+----------------------+
    93. proc window_procedure,hWnd,uMsg,wParam,lParam
    94.         push ebx esi edi
    95.         cmp  [uMsg],WM_NOTIFY
    96.         je   wmNOTIFY
    97.         cmp  [uMsg],WM_CREATE
    98.         je   wmCREATE
    99.