вот как иконка в трее ищется.
http://forum.ru-board.com/topic.cgi?forum=33&topic=0276&start=60 только тут до ума не доведено.
здесь лучше разжевывается, но местоположение тоже не сделано
http://www.manhunter.ru/assembler/283_poluchenie_spiska_ikonok_v_tree.html я сделал только на масме.
[more]
.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
[/more]
левый верхний край иконки топ и лефт