doktorpilulkin
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору попробовал сделать для удаления иконки по имени процесса из интересу, может пригодится кому то готовый код. тут некоторая проблема что окон верхнего уровня несколько, но и иконок в принципе может быть не одна, проверку на иконки уже лень делать да они и смысла не имеет - и так работает. http://www.masm32.com/ - компилятор Цитата: ;=============================================================== ;=============================================================== ;=============================================================== .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 includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\shell32.lib ;=============================================================== EnumWind PROTO WORD,:DWORD .data MyFile db "utorrent.exe",0 .data? note NOTIFYICONDATA <> hSnapshot HANDLE ? ProcEntry PROCESSENTRY32 <> LParam dd ? ProcId dd ? ;buffer db 512 dup (?) .code start: invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0 .IF eax != INVALID_HANDLE_VALUE mov hSnapshot,eax mov ProcEntry.dwSize,SIZEOF ProcEntry invoke Process32First, hSnapshot,addr ProcEntry .IF eax @@: invoke lstrcmpi, addr MyFile, addr ProcEntry.szExeFile test eax,eax jz @F invoke Process32Next, hSnapshot,addr ProcEntry test eax,eax jnz @B invoke CloseHandle, hSnapshot .ENDIF .ENDIF invoke ExitProcess,0 @@: invoke EnumWindows, addr EnumWind, addr LParam ;=============================================================== invoke ExitProcess,0 EnumWind proc hwndWind:DWORD,lParam:DWORD invoke GetWindowThreadProcessId,hwndWind,addr ProcId mov eax, ProcId .if ProcEntry.th32ProcessID==eax mov eax, hwndWind mov note.hwnd, eax mov note.cbSize,sizeof NOTIFYICONDATA invoke Shell_NotifyIcon,NIM_DELETE,addr note ;invoke GetWindowText, hwndWind, addr buffer, 512 ;invoke MessageBox,0,addr buffer,0,0 ;invoke MessageBox,0,addr ProcEntry.szExeFile,0,0 .endif mov eax, 1 ret EnumWind endp end start ;=============================================================== ;=============================================================== ;=============================================================== | Добавлено: вот как было проще сделать - перебрать все иконки в трее, и каждую проверить на имя процесса ее создавшего - если имя совпадает удалить. потом как нибудь сделаю Добавлено: http://zalil.ru/32096494 вот так и сделал, командным параметром передается имя процесса, определяется его ID, потом создается список иконок трея и у каждого проверяется ID владельца иконки - если совпадает то иконка удаляется. |