![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Клас для получения информации о системном трее
brother © (2009-01-22 05:00:00)в инете нашел вот:
http://articles.org.ru/cn/showdetail.php?cid=7276
спасибо, Author : Александр (Rouse_) Багель
есть вопросы:
1. // Получаем ID процесса, которому принадлежит найденное окно
GetWindowThreadProcessId(FSysTrayHandle, &dwProcessID);
зачем &? с ним не компилируется, без него нормально
2. ButtonInfo.dwMask := TBIF_IMAGE or TBIF_TEXT or TBIF_STATE or TBIF_STYLE
or TBIF_LPARAM or TBIF_COMMAND or TBIF_SIZE or TBIF_BYINDEX;
в моем CommCtrl, TBIF_BYINDEX нет, заменил на $00000080 (по логике)
3. интересует структура FIconData.Items[I], как я понимаю нигде не используется?
4. и главное: можно ли сделать двойной клик по нужной мне иконке, делая выборку из FIconData.Items[I].szTip? те показать окно программы
Розыч, и другие, помогите...
brother (2009-01-26 04:06:00) [1]спасибо, буду разбираться
Rouse_ (2009-01-22 17:20:00) [2]1. &dwProcessID - на 2007-ой компилиться :)
Вообще код сначала на VC++ писался и только потом перекладывался на Дельфи методом половинного копипаста - видать пропустил :)
2. Вот константы из моего CommCtrl
const
{$EXTERNALSYM TBBF_LARGE}
TBBF_LARGE = $0001;
{$EXTERNALSYM TB_GETBITMAPFLAGS}
TB_GETBITMAPFLAGS = WM_USER + 41;
{$EXTERNALSYM TBIF_IMAGE}
TBIF_IMAGE = $00000001;
{$EXTERNALSYM TBIF_TEXT}
TBIF_TEXT = $00000002;
{$EXTERNALSYM TBIF_STATE}
TBIF_STATE = $00000004;
{$EXTERNALSYM TBIF_STYLE}
TBIF_STYLE = $00000008;
{$EXTERNALSYM TBIF_LPARAM}
TBIF_LPARAM = $00000010;
{$EXTERNALSYM TBIF_COMMAND}
TBIF_COMMAND = $00000020;
{$EXTERNALSYM TBIF_SIZE}
TBIF_SIZE = $00000040;
{$EXTERNALSYM TBIF_BYINDEX}
TBIF_BYINDEX = $80000000;
3. как это нигде не используется? Именно в нее и сохраняются все данные, т.е. это массив рекордов типа TFWSysIconItem
4. можно определить позицию, где расположена иконка, собственно каждая иконка это кнопка в TToolBar, посмотри как это делается в нем. Ну а после определения позиции сгенерируй мышиное событие по этим координатам, ну к примеру как-то так:
var
TI:TInput;
MI: TMouseInput;
P:TPoint;
begin
GetCursorPos(P);
MI.dx := P.X;
MI.dy := P.Y;
MI.mouseData := 0;
MI.dwFlags := MOUSEEVENTF_RIGHTDOWN ;
MI.time := 10;
TI.mi := MI;
TI.Itype := INPUT_MOUSE;
SendInput(1, TI, SizeOf(TInput));
MI.dwFlags:=MOUSEEVENTF_RIGHTUP;
TI.mi := MI;
SendInput(1, TI, SizeOf(TInput));
MBo (2009-01-22 09:28:00) [3]@dwProcessID
TBIF_BYINDEX = $80000000;