Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сворачивание в трей или в фоновый режим  (Прочитано 15504 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« : 29-03-2010 15:11 » 

Всем доброго времени! Опять я со своими вопросами... Подскажите пожалуйста как мне можно консольное преложение в трей свернуть, или в фоновый режим? Заранее всех благодарю!
Записан

Your password is personal - do not share it with anyone and make sure it is not easy to crack.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-03-2010 16:25 » 

во-первых, "свернуть в трей" и "фоновый режим" это не одно и то же.

Свернуть в трей, это: скрыть все проявления программы с экрана + зажечь в трее значок, ассоциированный с программой (вернее, с неким окном, причём необязательно к процессу принадлежащим).  Для свернуть в трей нужно: создать объект виндовс HWND, придумать идентификатор иконки, вызвать

BOOL Shell_NotifyIcon(          DWORD dwMessage,    PNOTIFYICONDATA lpdata);

Если лень создавать своё окно, можно взять десктопное (оно ведь всегда создано)

GetDesktowWindow()

каждая иконка идентифицируется по паре "хендл+идентификатор". Поэтому с десктопным окном возможен спецэффект: если забыть убрать иконку из трея или программа просто зависла, то иконку убрать уже невозможно, кроме как программно или перезагрузкой компа

А фоновый режим - это ИМХО когда программу также не видно (хотя, можно сочетать с иконкой в трее), а приоритет процесса программы чуточку снижен.

Записан

Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 29-03-2010 17:16 » 

            bool booGlobalBool=FALSE;
   hwnd=GetForegroundWindow();
   booGlobalBool=IsWindowVisible(hwnd);
   ShowWindow(hwnd,SW_HIDE);

А вот если я так сделаю, это как называется?
Записан

Your password is personal - do not share it with anyone and make sure it is not easy to crack.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 29-03-2010 17:22 » 

тут ты скрываешь окно с экрана и всё

ps
глобальные переменные в C++ нехорошо Улыбаюсь (если название переменной не врёт, конечно)

присвоение типу bool значения FALSE вместо false (они, правда, оба нулевые - один 0x00000000, другой 0x00. Но всё равно типы рекомендуется соблюдать, чтобы потом как-нибудь не искать непонятные ошибки)


Записан

Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 30-03-2010 15:24 » 

Спасибо. Буду соблюдать переменные (а название врет, это из старого проекта осталось)) Ну в принципе программы изчизающие с окна и у которых иконка в трее появляется, так примерно свое окно скрывают?
Записан

Your password is personal - do not share it with anyone and make sure it is not easy to crack.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 31-03-2010 03:27 » 

скрывают окно так
ShowWindow(hwnd,SW_HIDE);

показывают иконку в трее так
BOOL Shell_NotifyIcon(          DWORD dwMessage,    PNOTIFYICONDATA lpdata);

Улыбаюсь
Записан

Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 31-03-2010 05:08 » new

Ну впринципе я так и сделал ))) спасибо.
Записан

Your password is personal - do not share it with anyone and make sure it is not easy to crack.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines