Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Консольное приложение. Иконка в области уведомлений. [D5, WinXP]


Deltas ©   (2009-08-28 17:24:00) 

Здравствуйте, мастера! Можно ли в приложении, в котором нет ни одного графического окна, создать иконку в области уведомлений панели задач? Вызываю Shell_NotifyIcon, иконка появляется, но при наведении мыши, исчезает.


Юрий Зотов   (2009-08-31 10:16:00) [1]

Можно и не дополнительный, никто не мешает окну и консоли работать в одном потоке. То есть - делаем самое обычное tray-приложение, в OnCreate главной формы пишем AllocConsole, а в OnDestroy - FreeConsole. И все.


Eraser   (2009-08-28 19:15:00) [2]

> [5] Deltas ©   (28.08.09 18:58)

можно создать доп. поток с доп. окном для обработки этих сообщений.


Deltas   (2009-08-28 18:58:00) [3]

program Project1;

{$APPTYPE CONSOLE}

uses
 Windows, Messages, SysUtils, ShellAPI;

const
 wmNotifyIconEvent = WM_USER;

var
 NotifyIconData: TNotifyIconData;

begin
 SetConsoleTitle('unique name');

 Sleep(200);

 NotifyIconData.cbSize := SizeOf(NotifyIconData);
 NotifyIconData.Wnd := FindWindow(nil, PChar('unique name'));
 NotifyIconData.uID := 0;
 NotifyIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
 NotifyIconData.uCallbackMessage := wmNotifyIconEvent;
 NotifyIconData.hIcon := LoadIcon(0, IDI_EXCLAMATION);
 NotifyIconData.szTip := 'Warning';
 
 Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
 
 Sleep(INFINITE);
end.


Здесь NOTIFYICONDATA::hWnd получает значение дескриптора консольного окна. Иконка в области уведомлений не пропадает при наведении мыши. Но возникает вопрос в том, как обрабатывать сообщения от иконки? GetMessage, PeekMessage не отловят это сообщение, т.к. консольное окно живет в одном из потоков процесса csrss.exe.


Deltas   (2009-08-28 18:10:00) [4]


> а что передается в NOTIFYICONDATA::hWnd?

hWnd := 0;


CrytoGen   (2009-08-28 18:06:00) [5]

Исчезает, по моему, когда не обрабатываются сообщения от трея.


clickmaker   (2009-08-28 18:05:00) [6]

> Вызываю Shell_NotifyIcon

а что передается в NOTIFYICONDATA::hWnd?


Медвежонок Пятачок   (2009-08-28 17:33:00) [7]

графического? можно без графического.


Наверх

Титульная страница Поиск, карта сайта Написать письмо