Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2015, 19:06   #1
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию Проблема с Shell_NotifyIcon.

У меня Windows 7, компилятор mingw32, среда разработки Code::Blocks. Проблема с выводом консольного приложения из области уведомлений. Код такой:

Код:
int main(int argc, char* argv[])
{
cout<<"Window will be minimised in system tray for 5 seconds and reappear.";
Sleep(2000);

//window handle
hWnd=FindWindow("ConsoleWindowClass",NULL);

//hide the window
ShowWindow(hWnd,0);

//tray info
Tray.cbSize=sizeof(Tray);
Tray.hIcon=LoadIcon(NULL,IDI_WINLOGO);
Tray.hWnd=hWnd;
strcpy(Tray.szTip,"My Application");
Tray.uCallbackMessage=WM_LBUTTONDOWN;
Tray.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE;
Tray.uID=1;

//set the icon in tasbar tray
Shell_NotifyIcon(NIM_ADD, &Tray);


Sleep(5000);

//remove the icon
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
Shell_NotifyIcon(NIM_DELETE, &Tray);

waitKey(0);

return 0;
}
Проблема: в область уведомлений программа сворачивается, а вот обратно, когда ShowWindow(hWnd,SW_SHOWMAXIMIZED); она вылетает. Подскажите, пожалуйста, в чем может быть проблема?
R_G вне форума Ответить с цитированием
Старый 25.09.2015, 19:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вылетает в каком смысле? С ошибкой что ли?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2015, 19:47   #3
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

Закрывается консоль. Не восстанавливается в окно. В области уведомлений удаляется иконка и все.
R_G вне форума Ответить с цитированием
Старый 25.09.2015, 19:54   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно узнать, почему ты захотел в трей прилепить иконку для консольного приложения? Т.е. почему приложение не оконное, а именно консольное?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2015, 20:04   #5
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

Мне нужно делать скриншоты по таймеру. У меня идея такая:
запустить консольное;
в область уведомлений свернуть;
скриншотить экран по таймеру.
Вы думаете по-другому сделать лучше?

И вылетает еще после нажатия на иконку трея.

Последний раз редактировалось Stilet; 25.09.2015 в 20:14.
R_G вне форума Ответить с цитированием
Старый 25.09.2015, 20:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Вы думаете по-другому сделать лучше?
Да, я думаю что консольное приложение тут не помощник.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2015, 20:18   #7
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

В смысле? А куда тогда мне "копать". Подскажите, пожалуйста.
R_G вне форума Ответить с цитированием
Старый 25.09.2015, 20:45   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сделай оконное приложение. Окно скрывай, иконку показывай.
Тогда и с таймером будет удобнее. Не вешать же тебе в консоли бесконечный цикл когда оконка более для этого приспособлена.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.09.2015, 21:03   #9
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

А в оконном приложении разве не придется использовать цикл? Нужно же тоже отлавливать событие закрытия окна. Я нашел ошибку у себя: waitKey(0); - почему то не работал, заменил на getch();
R_G вне форума Ответить с цитированием
Старый 25.09.2015, 22:08   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Я не совсем понимаю зачем нужна икона в трее, если все работает по таймеру?
Кроме того, в данно случае уведомление о нажатиях мыши отправляются в консольное окно - не совсем понятно что из этого получится.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неблокирующий сокет Си проблема с закрытием, проблема с закрытием сокетов в цикле mnx_vol C/C++ Сетевое программирование 0 06.11.2012 13:57
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37
Баллонная подсказка при использовании Shell_NotifyIcon Fantom Win Api 1 28.09.2008 00:41