Ассемблер для Windows



         

В Может ли приложение узнать какие программы в настоящее время запущены? - часть 3


; сегмент кода _TEXT SEGMENT DWORD PUBLIC USE32 'CODE' START: ; получить дескриптор приложения PUSH 0 CALL GetModuleHandleA@4 MOV [HINST], EAX ;--------------------------------------- PUSH 0 PUSH OFFSET WNDPROC PUSH 0 PUSH OFFSET PA PUSH [HINST] CALL DialogBoxParamA@20 CMP EAX,-1 JNE KOL ; сообщение об ошибке KOL: ;--------------------------------------- PUSH 0 CALL ExitProcess@4 ;---------------------------------------

; процедура окна ; расположение параметров в стеке ; [EBP+014Н] ;LPARAM ; [EBP+10Н] ;WAPARAM ; [EBP+0CH] ;MES ; [EBP+8] ;HWND WNDPROC PROC PUSH EBP MOV EBP,ESP PUSH EBX PUSH ESI PUSH EDI ;------------------------- CMP DWORD PTR [EBP+0CH],WM_CLOSE JNE L1 PUSH 0 PUSH DWORD PTR [EBP+08H] CALL EndDialog@8 JMP FINISH L1: CMP DWORD PTR [EBP+0CH],WM_INITDIALOG JNE FINISH ; запомним дескриптор окна MOV EAX,DWORD PTR [EBP+08H] MOV HWN,EAX ; вызвать функцию EnumWindows PUSH 1 ; неиспользуемый параметр PUSH OFFSET PENUM CALL EnumWindows@8 FINISH: MOV EAX,0 POP EDI POP ESI POP EBX POP EBP RET 16 WNDPROC ENDP

; процедура обратного вызова, вызываемая при поиске окон ; [EBP+0CH] ; параметр ; [EBP+8] ; дескриптор окна PENUM PROC PUSH EBP MOV EBP,ESP ; получить заголовок окна PUSH 200 PUSH OFFSET BUFER PUSH DWORD PTR [EBP+8] CALL GetWindowTextA@12 ; получить идентификатор процесса или потока, ; владеющего окном PUSH OFFSET IDP PUSH DWORD PTR [EBP+8] CALL GetWindowThreadProcessId@8 ; сформировать строку для списка PUSH OFFSET IDP PUSH OFFSET FORM PUSH OFFSET BUF CALL wsprintfA ADD ESP,12 PUSH OFFSET BUF PUSH OFFSET BUFER CALL lstrcat@8 ; добавить в список PUSH OFFSET BUFER PUSH 0 PUSH LB_ADDSTRING PUSH 101 PUSH [HWN] CALL SendDlgItemMessageA@20 POP EBP MOV EAX,1 RET 8 PENUM ENDP _TEXT ENDS END START




Содержание  Назад  Вперед