Ассемблер для 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 L3: PUSH 0 PUSH DWORD PTR [EBP+08H] CALL EndDialog@8 JMP FINISH L1: CMP DWORD PTR [EBP+0CH],WM_INITDIALOG JNE L2 ; загрузить меню PUSH OFFSET PMENU PUSH [HINST] CALL LoadMenuA@8 ; установить меню PUSH EAX PUSH DWORD PTR [EBP+08H] CALL SetMenu@8 JMP FINISH L2: CMP DWORD PTR [EBP+0CH],WM_COMMAND JNE FINISH CMP WORD PTR [EBP+10H],300 JE L3 CMP WORD PTR [EBP+10H],200 JNE FINISH ; здесь запуск ; в начале PIPE PUSH 0 PUSH 0 PUSH OFFSET HW PUSH OFFSET HR CALL CreatePipe@16 MOV EAX,HW ; здесь запуск консольного приложения MOV STRUP.cb,68 MOV STRUP.lpReserved,0 MOV STRUP.lpDesktop,0 MOV STRUP.lpTitle,0 MOV STRUP.dwFlags,STARTF_ADD MOV STRUP.cbReserved2,0 MOV STRUP.lpReserved2,0 MOV STRUP.wShowWindow,SW_HIDE ; окно процесса невидимо MOV STRUP.hStdOutput,EAX MOV STRUP.hStdError,EAX ;---------------------------------------------------------- PUSH OFFSET INF PUSH OFFSET STRUP PUSH 0 PUSH 0 PUSH 0 PUSH 1 ; наследует дескрипторы PUSH 0 PUSH 0 PUSH OFFSET CMD PUSH 0 CALL CreateProcessA@40 ; здесь чтение информации PUSH 0 PUSH OFFSET BYT PUSH 3000 PUSH OFFSET BUFER PUSH HR CALL ReadFile@20 PUSH OFFSET BUFER PUSH 0 PUSH EM_REPLACESEL PUSH 101 PUSH DWORD PTR [EBP+08H] CALL SendDlgItemMessageA@20 ; закрыть HANDLE на запись PUSH HW CALL CloseHandle@4 ; закрыть HANDLE на чтение PUSH HR CALL CloseHandle@4 FINISH: MOV EAX,0 POP EDI POP ESI POP EBX POP EBP RET 16 WNDPROC ENDP _TEXT ENDS END START




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