powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как запустить программу в трей?
14 сообщений из 14, страница 1 из 1
Как запустить программу в трей?
    #32781617
Фотография kima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Подскажите, пожалуйста, как при открытии программы сразу запустиь ее в трей!
Я пробовала в InitDialog() посылать сообщение
SendMessage(WM_SIZE, SIZE_MINIMIZED,0);
но это не сработала,
потом я в InitDialog создала таймер и по таймеру уже посылала это сообщение и прятала окно ShowWindow(SW_HIDE); Этот вариант работает, но проблымывает окно на экране, даже если ставить в таймере 1 милисекунду, мне такой результат не очень нравится...
Подскажите, пожалуйста, вариант получше, только по возможности хоть с какими-то пояснениями...
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32781660
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при запуске сразу в трей, минимизация
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32781667
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так все-таки в трей приложение надо засунуть или просто свернуть (в Task Bar) ? Приложение на основе диалогового окна? И что значит "проблымывает" (в сленге не очень силен)?
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32781678
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом варианте, после создания окна зовётся функция ShowWindow, вот в ней надо правильный параметр поставить SW_SHOWMINIMIZED
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32781750
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1 (когда MDI,SDI)
В InitInstance() приложения после инициализации указателя на главное окно
вызываешь , к примеру, pFrame->ShowWindow(SW_MINIMIZE);
pFrame - этот указатель на главное окно

Вариант 2 (когда Dialog)
1) Переопределяешь в диалоге функцию OnShowWindow()
2) Вызываешь в этой функции this->ShowWindow(SW_MINIMIZE);

А вообще, вариантов может быть куча: кто как может извратиться...
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32782144
Фотография kima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело вот обстоит как:
По кнопке MINIMIZE (в заголовке окна) моя программа сворачивается не в прямоугольник на панели задач, а в иконку в трее. Для этого я переопределила ф-цию OnSize().
Теперь мне надо чтоб она сворачивалась в трей при запуске.
Я переопределила метод OnShowWindow(), добавила туда:
this->ShowWindow(SW_MINIMIZE);
this->ShowWindow(SW_HIDE);
в результате при отработке получаю, что программа и в трее появилась но и на понели задач прямоугольник висит все равно...
Как же мне от него избавиться?
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32783130
fixit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kimaДело вот обстоит как:
По кнопке MINIMIZE (в заголовке окна) моя программа сворачивается не в прямоугольник на панели задач, а в иконку в трее. Для этого я переопределила ф-цию OnSize().
Теперь мне надо чтоб она сворачивалась в трей при запуске.
Я переопределила метод OnShowWindow(), добавила туда:
this->ShowWindow(SW_MINIMIZE);
this->ShowWindow(SW_HIDE);
в результате при отработке получаю, что программа и в трее появилась но и на понели задач прямоугольник висит все равно...
Как же мне от него избавиться?

Если работаешь на сибилдере, то в samples конкретный пример есть. Если на msvc то посмотри codeguru или codeproject - там есть также вполне разжеваные примеры.
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32783310
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть апишная функция Shell_Notify, кажется называется. Заполняешь структуру NOTIFY..., которая передается в первом параметре и вид действия (2 параметр). В MSDN-е все написано. После вызова этой функции надо вызвать ShowWindow(SW_HIDE) - приложение скроется в SysTray. Для обратного раскрытия необходимо определить свое сообщение и обработчик на него. Id сообщения передать в качестве значения одного из членов структуры NOTIFY... (в имени есть ...CallBack...). В обработчике вызвать ShowWindow(SW_RESTORE) ну и если надо из трея удалить иконку - Shell_Notify с действием удаления (NIF_DELETE кажется)
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32783409
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кнопка в панели задач зависит от стиля окна.
Чтобы оно в таскбар не попадало, надо задать окну (расширенный)стиль WS_EX_TOOLWINDOW при нажатии кнопки минимизации. Но вообще, при скрытии окна, кнопка в таскбаре тоже пропадает.... Стало быть.. чё-то не то скрываете тут :)
Код: plaintext
this->ShowWindow(SW_HIDE);
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32789420
Фотография kima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граждане, дорогие, ну подскажите еще варианты!
Может кто-то уже такое делал или встречал в сети, пришлите пример:
mck28@rambler.ru
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32790392
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДля этого я переопределила ф-цию OnSize().

Стало быть, надо так же переопределить функцию OnActivate - которая дёргается по событию поднятия окна, и будет тебе счастье.
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32792836
Fasimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри почту, без классов правда, "голый" WinAPI.
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32793216
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kimaПодскажите, пожалуйста, как при открытии программы сразу запустиь ее в трей!

Здравствуйте, kima,
Недавно сделал примерно то же: мне надо было написать
приложение, которое бы выполнялось не выводя формы на экран.
(т.е. не надо было его сворачивать-разворачивать, а только показать,
что оно работает...)
Это "сухой остаток" из примера TrayIcon комплекта поставки
Borland C++Builder (У меня версия 5.0).
Попробуйте, может поможет...

Вот мой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
//--------------------------------------------------------------------
#include <vcl.h>
#include <shellapi.h>
#include <graphics.hpp>
#include "Unit1.h"
#pragma hdrstop
#pragma argsused
//-------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//Начальные установки
 TImage *Image1=new TImage(NULL);
 NOTIFYICONDATA tnd;
 PSTR pszTip;
 AnsiString MessageText="Формирование черно-белых списков \r\nпо услуге \"Интернет в кредит\"";
 AnsiString path;
 int pos;

 pszTip = MessageText.c_str();

 Application->Initialize();
 Application->ShowMainForm=false; //it is analog of: ShowWindow(Application->Handle,SW_HIDE);
//Если сделать Application->Minimize(), то появляется кнопка на панели 
//задач, а нам это не надо...
//Path to user-defined icon file. Application haven't default icon because
//it is coverted from Console Application and haven't main form...
 path=Application->ExeName;
 pos=path.LastDelimiter("\\");
 path=path.SubString( 1 ,pos);
 path+="FLGRUS.ICO";

//Load icon file...
 if(FileExists(path))
   Image1->Picture->Icon->LoadFromFile(path);
 else
   Image1->Picture->Icon->Handle=NULL;

//Show icon within Tray...
 tnd.cbSize          = sizeof(NOTIFYICONDATA);
 tnd.hWnd            = Application->Handle ;
 tnd.uFlags          = NIF_MESSAGE | NIF_ICON | NIF_TIP;
 tnd.hIcon           = Image1->Picture->Icon->Handle ;
 lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip));
 Shell_NotifyIcon(NIM_ADD,&tnd);
 Shell_NotifyIcon(NIM_MODIFY,&tnd);

 < здесь остальной код моей программы >

//Delete icon form Tray...
 Application->Terminate();
 tnd.hIcon = NULL ;
 Shell_NotifyIcon(NIM_DELETE,&tnd);
 return false;// The main form will NOT BE displayed in any cases...
}
//--------------------------------------------------------------------
С уважением,
Станислав C.
...
Рейтинг: 0 / 0
Как запустить программу в трей?
    #32842853
drug
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав C. kimaПодскажите, пожалуйста, как при открытии программы сразу запустиь ее в трей!

Здравствуйте, kima,
Недавно сделал примерно то же: мне надо было написать
приложение, которое бы выполнялось не выводя формы на экран.
(т.е. не надо было его сворачивать-разворачивать, а только показать,
что оно работает...)
Это "сухой остаток" из примера TrayIcon комплекта поставки
Borland C++Builder (У меня версия 5.0).
Попробуйте, может поможет...

Вот мой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
//--------------------------------------------------------------------
#include <vcl.h>
#include <shellapi.h>
#include <graphics.hpp>
#include "Unit1.h"
#pragma hdrstop
#pragma argsused
//-------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
//Начальные установки
 TImage *Image1=new TImage(NULL);
 NOTIFYICONDATA tnd;
 PSTR pszTip;
 AnsiString MessageText="Формирование черно-белых списков \r\nпо услуге \"Интернет в кредит\"";
 AnsiString path;
 int pos;

 pszTip = MessageText.c_str();

 Application->Initialize();
 Application->ShowMainForm=false; //it is analog of: ShowWindow(Application->Handle,SW_HIDE);
//Если сделать Application->Minimize(), то появляется кнопка на панели 
//задач, а нам это не надо...
//Path to user-defined icon file. Application haven't default icon because
//it is coverted from Console Application and haven't main form...
 path=Application->ExeName;
 pos=path.LastDelimiter("\\");
 path=path.SubString( 1 ,pos);
 path+="FLGRUS.ICO";

//Load icon file...
 if(FileExists(path))
   Image1->Picture->Icon->LoadFromFile(path);
 else
   Image1->Picture->Icon->Handle=NULL;

//Show icon within Tray...
 tnd.cbSize          = sizeof(NOTIFYICONDATA);
 tnd.hWnd            = Application->Handle ;
 tnd.uFlags          = NIF_MESSAGE | NIF_ICON | NIF_TIP;
 tnd.hIcon           = Image1->Picture->Icon->Handle ;
 lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip));
 Shell_NotifyIcon(NIM_ADD,&tnd);
 Shell_NotifyIcon(NIM_MODIFY,&tnd);

 < здесь остальной код моей программы >

//Delete icon form Tray...
 Application->Terminate();
 tnd.hIcon = NULL ;
 Shell_NotifyIcon(NIM_DELETE,&tnd);
 return false;// The main form will NOT BE displayed in any cases...
}
//--------------------------------------------------------------------
С уважением,
Станислав C.

ОЧЕНЬ пригодился этот кусок кода! ...thanks за столь подробный ответ!
Хотелось бы узнать, как сделать чтобы при клике правой кнопки мыши на trayicon выскакивало popup меню. (рылся в стандартных примерах по trayicon, но запутался, хотя там это есть...)

Буду оч. признателен если напишете столь же полный и понятный ответ как выше! =))
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как запустить программу в трей?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]