Вот тебе пример... увеличения области под иконку(в данном примере... для всех иконок из трея):| Код | ... var Form1: TForm1; TrayWnd:Cardinal; //Shell_TrayWnd - Панель задач TrayNW:Cardinal; //TrayNotifyWnd - Весь трей TrayButton:Cardinal; //Button - Кномка для показа/скрытия иконок в трее для WinXP TraySysPager:Cardinal; //SysPager - Иконки прог в трее TrayTB32:Cardinal; //ToolbarWindow32 - Область уведомлений в трее Tray_pId:Cardinal; //Идентификатор процесса-владельца трея
implementation
{$R *.dfm}
uses CommCtrl;
function InTray():boolean; //Инициализация переменных для доступа к трею var s:string; begin Result:=false; s:=''; TrayWnd:=findwindow('Shell_TrayWnd', nil); if TrayWnd<>0 then begin TrayNW:=findwindowex(TrayWnd,0,'TrayNotifyWnd', nil); if TrayNW<>0 then begin TrayButton:=findwindowex(TrayNW,0,'Button',nil); TraySysPager:=findwindowex(TrayNW,0,'SysPager', nil); if TraySysPager<>0 then begin TrayTB32:=findwindowex(TraySysPager,0,'ToolbarWindow32', nil); if TrayTB32<>0 then begin Tray_pID:=0; GetWindowThreadProcessId(TrayWnd,@Tray_pID); if Tray_pID<>0 then Result:=true else s:='Не могу определить идентификатор'+#13+#10+'процесса - владельца трея!'; end else s:='Область уведомлений в трее - не найдено!' end else s:='SysPager в трее - не найден!'; end else s:='Трей - не найден!'; end else s:='Панель задач - не найденна!'; if Result=false then ShowMessage(s); end;
procedure TForm1.Button1Click(Sender: TObject); var i:TTBBUTTONINFO; opTBW32:Cardinal; s,j,t:DWord; rMem:Pointer; begin InTray; opTBW32:=OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE,false,Tray_pId); if opTBW32<>0 then begin s:=SizeOf(i); rMem:=VirtualAllocEx(opTBW32,nil,s,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE); if rMem<>nil then begin i.cbSize:=SizeOf(i); i.dwMask:=TBIF_SIZE; j:=SendMessage(TrayTB32,TB_BUTTONCOUNT,0,0); while (j>0) do begin dec(j); i.cx:=30; //Нужная нам ширина для j-кнопки WriteProcessMemory(opTBW32,rMem,@i,s,t); SendMessage(TrayTB32,TB_SETBUTTONINFO,j,integer(rMem)); //j - номер кнопки end; VirtualFreeEx(opTBW32,rMem,0,MEM_RELEASE); end; CloseHandle(opTBW32); end; end; ...
|
PS: Картинку, с текстом... сам замениш... |