bomzzz
Platinum Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\shell32.inc include \masm32\include\masm32.inc include \masm32\include\comdlg32.inc include \masm32\include\wininet.inc include \masm32\include\Comctl32.inc include \masm32\include\winmm.inc include \masm32\include\advapi32.inc include \masm32\include\gdi32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\shell32.lib includelib \masm32\lib\masm32.lib includelib \masm32\lib\comdlg32.lib includelib \masm32\lib\wininet.lib includelib \masm32\lib\Comctl32.lib includelib \masm32\lib\winmm.LIB includelib \masm32\lib\advapi32.lib includelib \masm32\lib\gdi32.lib EXTRADATA struct Wnd dd ? ; Хэндл родительского окна иконки uID dd ? ; Стиль отображения иконки EXTRADATA ends .data mestitle db "Bomz",0 form db "ID процесса: %d",9, 9,"TOP: %d", 9,"LEFT: %d", 9,"BOTTOM: %d", 9,"RIGHT: %d", 0 Class1 db 'Shell_TrayWnd',0 Class2 db 'TrayNotifyWnd',0 ; область уведомлений Class3 db 'SysPager',0 Class4 db 'ToolbarWindow32',0 .data? extra EXTRADATA <> button TBBUTTON <> rect1 RECT <> rect RECT <> buffer db 512 dup(?) hWnd HWND ? ProcId dd ? hProcess dd ? lpData dd ? lpData1 dd ? IconNumber dd ? BytesRead dd ? ProcTrayId dd ? hWnd1 HWND ? ButtonID dd ? .code start: invoke FindWindow,addr Class1, NULL ; Найти окно трея mov hWnd, eax invoke FindWindowEx,hWnd,NULL,addr Class2, NULL ; Найти окно уведомлений в трее mov hWnd, eax invoke FindWindowEx,hWnd,NULL,addr Class3, NULL ; Найти трей mov hWnd, eax invoke FindWindowEx,hWnd,NULL,addr Class4, NULL ; Найти панель иконок в трее mov hWnd, eax invoke GetWindowRect, hWnd,addr rect invoke SendMessage,hWnd,TB_BUTTONCOUNT,0,0 ; Получить количество иконок в трее mov IconNumber, eax invoke GetWindowThreadProcessId,hWnd,addr ProcId ; Получить ID процесса-владельца трея invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,ProcId ; Открыть процесс с полным доступом mov hProcess,eax ; Сохранить хэндл процесса-владельца трея invoke VirtualAllocEx,hProcess,NULL,sizeof button,MEM_COMMIT,PAGE_READWRITE ; Выделить блок памяти в контексте процесса mov lpData, eax ; Сохранить указатель на блок памяти invoke VirtualAllocEx,hProcess,NULL,sizeof rect1,MEM_COMMIT,PAGE_READWRITE ; Выделить блок памяти в контексте процесса mov lpData1, eax ; Сохранить указатель на блок памяти NEXT: ; dec IconNumber mov IconNumber, 0 invoke SendMessage,hWnd,TB_GETBUTTON,IconNumber,lpData ; Получить иконку из трея с индексом IconNumber invoke ReadProcessMemory, hProcess, lpData,addr button, sizeof button, addr BytesRead ; Прочитать структуру иконки invoke ReadProcessMemory,hProcess,button.dwData,addr extra, sizeof extra,addr BytesRead ; Прочитать пользовательские данные иконки invoke GetWindowThreadProcessId, extra.Wnd,addr ProcTrayId ; Получить Id процесса, чья иконка находится в трее invoke SendMessage,hWnd,TB_GETRECT, button.idCommand, lpData1 invoke ReadProcessMemory, hProcess, lpData1,addr rect1, sizeof rect1, addr BytesRead mov eax, rect1.top inc eax add rect.top, eax mov eax, rect1.left inc eax add rect.left, eax mov eax, rect1.right dec eax add rect.right, eax mov eax, rect1.bottom dec eax add rect.bottom, eax invoke wsprintf,ADDR buffer,ADDR form, ProcTrayId, rect1.top, rect1.left, rect1.bottom, rect1.right invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_OK + MB_ICONASTERISK invoke wsprintf,ADDR buffer,ADDR form, ProcTrayId, rect.top, rect.left, rect.bottom, rect.right invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_OK + MB_ICONASTERISK ;cmp IconNumber,0 ;jnz NEXT invoke VirtualFreeEx,ProcId,lpData,0,MEM_RELEASE invoke CloseHandle,ProcId invoke ExitProcess,0 end start |