![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Иконка в SysTray не создавая своих окон. [D7, WinXP]
Ascan © (2005-04-11 14:36:00)Если в моей программе Object Pascalнет ниодного окна, то могу ли кинуть иконку в SysTray и обрабатывать по не события?
Иконку кидать получается, но при наведении на нее мышкой иконка пропадает. Возможно, идет проверка на существование окна, описанное при вызове Shell_NotifyIcon...
Ascan (2005-04-11 15:48:00) [41]Eraser,
>> предлагаешь создать окно только затем, чтобы Explorer (или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?
> Именно! А почему нет?...
Не эффективно, если без этого можно обойтись.
> Если не секрет, что за паредавал в поле hWnd структуры NOTIFYICONDATA, при вызове ф-ии Shell_NotifyIcon с первым параметром равным NIM_ADD?
То же самое что и при:
RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL
и при:
GetMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax: UINT): BOOL;
В данный моментhWnd = 0, пробывалHInstance, результат тотже. В результате чего я и пришел к выводу, что для регистрации иконки можно указывать что угодно. Получения событий от Горячей клавишинужен тот же hWnd, а для SysTray, этотhWndдолжен быть еще и Существующим Окном.
Digitman (2005-04-11 15:34:00) [42]
> Что интересно, Регистрация горячих клавишь в системе тоже
> требует Handle окна
не выдумывай, вовсе не требует.
вот цитата :
hWnd
Identifies the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.
Eraser (2005-04-11 15:33:00) [43]Ascan
предлагаешь создать окно только затем, чтобы Explorer (или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?
Именно! А почему нет?...
Eraser (2005-04-11 15:32:00) [44]Ascan
А события я именно так и пробывал читать (Get/PeekMessage). Только вот они не доходят.
Она не доходят потому что [3]!
Если не секрет, что за паредавал в поле hWnd структуры NOTIFYICONDATA, при вызове ф-ии Shell_NotifyIcon с первым параметром равным NIM_ADD?
Ascan (2005-04-11 15:28:00) [45]Eraser, предлагаешь создать окно только затем, чтобы Explorer(или кто там) не удалял мою иконку из Tray'я при наведении на нее мышкой?
Ascan (2005-04-11 15:24:00) [46]Eraser, нету. Если у меня нет окон, то зачем мне подключать
Forms?
А события я именно так и пробывал читать (Get/PeekMessage). Только вот они не доходят. Видимо проверка на существование окна происходит раньше.
Что интересно, Регистрация горячих клавишь в системе тоже требуетHandleокна, но здесь таких сложностей не возникло,GetMessageвсе подхватил. А вот с SysTray'ем такая беда...
Eraser (2005-04-11 15:16:00) [47]Digitman ©
HWND hWnd;
Ферштейн.
Ascan
Без окон всё таки не обойтись... не пойму, а что мешает создать окно?
Eraser (2005-04-11 15:15:00) [48]Digitman ©
HWND hWnd;
Ферштейн.
Ascan
Модуль Forms есть в uses'e?
Digitman (2005-04-11 15:00:00) [49]
> Eraser © (11.04.05 14:50) [2]
а можно еще попробовать хуков всяко-разных понаставить ... можно драйвер написать ... мно-о-ого еще чего можно попробовать !
но проще почитать справку :
typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
Members
...
hWnd
Handle of the window that receives notification messages associated with an icon in the taskbar status area.
Eraser (2005-04-11 14:50:00) [50]Ascan
Попробуй создать отдельный поток и там перехватывать нужные сообщения ф-ей Get/PeekMessage.
Digitman (2005-04-11 14:42:00) [51]
> Если в моей программе Object Pascal нет ниодного окна, то
> могу ли кинуть иконку в SysTray и обрабатывать по не события?
обработкой событий иконки занимается оконная ф-ция некоего окна
нет окна - нет и обработки