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

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

Привет.
Помогите, пожалуйста доработать прогу, чтобы иконка в трей добавлялась (и по клику правой мышкой диалог открывался), в панель Пуск->Все программы, в реестр, на рабочий стол.

#include<iostream.h>
int main()
{

   cout<<"Hello, world!";

return 0;
}
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #1 : 08-06-2006 08:37 » 

scraper, про трей рыскай тут, мне щас некогда искать - на обеде я

https://forum.shelek.ru/index.php?topic=8674.0

пост №20
« Последнее редактирование: 08-06-2006 08:42 от Алексей1153 » Записан

Hooter
Опытный

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

« Ответ #2 : 08-06-2006 09:07 » 

Привет.
Помогите, пожалуйста доработать прогу, чтобы иконка в трей добавлялась (и по клику правой мышкой диалог открывался), в панель Пуск->Все программы, в реестр, на рабочий стол.

#include<iostream.h>
int main()
{

   cout<<"Hello, world!";

return 0;
}

Ну прям клуб весёлых и находчивых Улыбаюсь
Записан
npak
Команда клуба

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

« Ответ #3 : 08-06-2006 09:28 » 

Особенной умиляет "доработать" Улыбаюсь
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #4 : 08-06-2006 10:04 » 

иконка в реестр,ну-ну... Улыбаюсь

да, вроде, и прога консольная... нафига, ей в трэе иконка?

А ярлыки добавлять при каждом запуске? прикольно... Улыбаюсь

и о чем будет диалог (по клику правой _мышкой_)?
если мышку положить слева - диалог не должен открываться?


PS: ты шутишь - и мы шутим Улыбаюсь
« Последнее редактирование: 08-06-2006 10:09 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #5 : 08-06-2006 10:11 » 

помогите довести до ума проект операционки!!! пока сделал только:
Код:
echo > main.cpp

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

Удачного всем кодинга! -=x[PooH]x=-
scraper
Гость
« Ответ #6 : 08-06-2006 18:40 » 

Ладно, будем резать по частям:

Как прогу добавить в трей?
То есть что бы при закрытии, она не уничтожалась полностью, а ее можно было опять вызвать по клику левой кнопкой мыши по значечку в нижнем правом углу?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #7 : 08-06-2006 18:51 » 

scraper, прогу в трей нельзя добавить, можно только прописать там иконку. Которая может посылать сообщения приложению, его прописавшему - ссылку я тебе дал, смотри
« Последнее редактирование: 08-06-2006 18:54 от Алексей1153 » Записан

scraper
Гость
« Ответ #8 : 08-06-2006 19:01 » 

Алексей1153, Я просмотрел, там нет ничего... Жаль((
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #9 : 08-06-2006 19:06 » 

scraper, хм... щас я попробую ....

там вот что:

Q:
как создать иконку в области уведомлений (трее)?
как определить, какие действия прпоизводит с иконкой юзверь?
как сделать анимацию иконки в трее?
как удалить иконку?


A:
для всего - использовать процедуру API - Shell_NotifyIcon().

Например, сделаем так, чтобы по нажатию кнопки меню окно программы сворачивалось в
трей (иконка сначала недолго поморгает), а при щелчке левой кнопкой мыши по иконке -
разворачивалось к предыдущему состоянию. В примере использовано однодокументное
приложение, поэтому "всё происходит" в классе CMainFrame. Переписать для CDialog
и вообще для любого случая - несложно.

Код:
//определение класса CMainFrame
class CMainFrame : public CFrameWnd
{
//переменная для сохранения состояния окна до сворачивания.
//"Запоминаем" сюда значения SW_MAXIMIZE или SW_RESTORE
DWORD m_dwdTrayShowCMD;

//определяем константы
enum
{
//идентификатор иконки приложения в трее.
//не путать с ID ресурса иконки!!!
e_tray_ID=1000,
e_tray_ID_1=1001, //(ID второй иконки для анимации)
e_tray_MSG=WM_COMMAND,//сообщение, посылаемое из трея
};
...
...
//это добавит визард ->

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
...
...
protected:
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
//}}AFX_VIRTUAL
};

//конструктор
CMainFrame::CMainFrame()
{
m_dwdTrayShowCMD=SW_MAXIMIZE;
}

Код:
//обработчик кнопки меню "свернуть в трей" (ID_PUTTOTRAY)
void CMainFrame::OnPuttotray()
{
//"запоминаем", какой командой потом разворачивать окно
m_dwdTrayShowCMD=((GetStyle()&WS_MAXIMIZE)?SW_MAXIMIZE:SW_RESTORE);

//заполняем структуру NOTIFYICONDATA для иконки
NOTIFYICONDATA ndata=
{
//размер структуры
sizeof(NOTIFYICONDATA),
//хендл этого окна
m_hWnd,
//идентификатор иконки трея в приложении
e_tray_ID,
//опции: есть иконка, есть сообщение, есть надпись
NIF_ICON|NIF_MESSAGE|NIF_TIP,
//сообщение, посылаемое иконкой из трея (сейчас == WM_COMMAND)
e_tray_MSG,
//иконка из ресурсов
::AfxGetApp()->LoadIcon(IDR_MAINFRAME),
//всплывающая надпись
"Значок моей программы"
};

//заполняем структуру NOTIFYICONDATA для "пустой" иконки
NOTIFYICONDATA ndata1=ndata;
ndata1.hIcon=0;

//скрываем окно программы
ShowWindow(SW_HIDE);

//добавляем значок e_tray_ID в трей
Shell_NotifyIcon(NIM_ADD,&ndata);

//"моргаем" 4 раза
for(int i=0;i<4;i++)
{
//заменяем значок в трее пустым
Shell_NotifyIcon(NIM_MODIFY,&ndata1);
Sleep(70);

//возвращаем обратно иконку
Shell_NotifyIcon(NIM_MODIFY,&ndata);
Sleep(70);
}

return;
}

добавим обработчик для команды e_tray_MSG (==WM_COMMAND)
- переопределим виртуальную функцию
BOOL CWnd::OnCommand(WPARAM wParam, LPARAM lParam)
Код:
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
//определяем, что сообщение от иконки e_tray_ID
if(wParam==e_tray_ID)
{
//определяем, какое действие мышью произвели
switch(lParam)
{
case WM_LBUTTONDOWN:
{
//показываем окно ("запомненной" командой)
ShowWindow(m_dwdTrayShowCMD);

//заполняем структуру для удаления иконки
NOTIFYICONDATA ndata=
{
sizeof(NOTIFYICONDATA),
m_hWnd,
e_tray_ID
};

//удаляем иконку
Shell_NotifyIcon(NIM_DELETE,&ndata);
}
break;

case WM_MOUSEMOVE:
{
//по иконке двигался курсор
}
break;

case WM_LBUTTONUP:{}break;
case WM_LBUTTONDBLCLK:{}break;
case WM_RBUTTONDOWN:{}break;
case WM_RBUTTONUP:{}break;
case WM_RBUTTONDBLCLK:{}break;
case WM_MBUTTONDOWN:{}break;
case WM_MBUTTONUP:{}break;
case WM_MBUTTONDBLCLK:{}break;
}

//сообщение обработано
return 1;
}

return CFrameWnd::OnCommand(wParam, lParam);
}
Записан

scraper
Гость
« Ответ #10 : 08-06-2006 19:13 » 

Алексей1153, Спасибо большое. Улыбаюсь
Это лучше в Borland C++ Buildere 6.0 делать? Само написаное куда вставлять-то?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #11 : 08-06-2006 19:18 » 

scraper, это, в принципе, практически АПИ (хотя mfc). То есть переделать несложно и в билдер, я думаю. Но этот пример я писал в VC++6
Записан

scraper
Гость
« Ответ #12 : 08-06-2006 19:24 » 

Алексей1153, спасибо огромное, Алексей, но мне бы надо на Builder-е,
Что конкретно мне надо:
Научиться в трей сварачивать, в регистры прописывать, в панель Пуск добавлять. На Builder как это делается?
И еще: работа с регистрами, есть ссылка, объясняющая это? Зачем ключ в регистр добавлять?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #13 : 08-06-2006 19:45 » 

scraper, как иконки делать - не подскажу, не разбирался...  А какие регистры? Улыбаюсь РЕЕСТР .

что ты хочешь туда записать? С реестром я работал, имеется даже собственная библиотечка, но опять же не под билдер
Записан

scraper
Гость
« Ответ #14 : 08-06-2006 19:51 » 

Алексей1153, вот здорово!
Слушай, пока теория:
Ключ проги в реестр добавляют чтобы бысто ее запускать. Так? Еще есть что-нибудь, в смысле, зачем это нужно?
Ключ что это? Если ответить гуманитарным языком. С примером (маленьким).
Практика:
Как програмно из проги добавить ключ в реестр, соответственно иконку вывести на раб.стол или в Пуск. О!
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #15 : 08-06-2006 19:55 » 

scraper, реестр - древовидная база данных (статических и динамических). Хранят там все, что не попадя.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #16 : 08-06-2006 20:02 » 

scraper, ты не понимаешь ...  А я не учитель - расскажу как сможу:

реестр содержит дерево записей. Там обычно хранятся настройки программ и системы, прописаны стандартные и нестандартные пути к файлам и т.д.

ключ - это корень одного из деревьев( или подключи - ветви дерева), стандартные (их ставит сама винда, их низя удалять):
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_CURRENT_CONFIG

дерево содержит подключи, которые могут содержать параметры. Параметрам присваивается значение - настройки и т.д.
Сам по себе реестр ничего не делает - просто огромный текстовый файл.

И лазить тебе туда рановато - замочишь систему Улыбаюсь Литературу не подскажу - не знаю, ищи в поисковых системах
Записан

scraper
Гость
« Ответ #17 : 08-06-2006 20:09 » 

Алексей1153, Я придерживаюсь принципа, раз голова залезла, значит нужно и плечи просовывать.

Можно примерчик, только не большой, как прогу на Builder-е, в реестр запихнуть? И потом как с этим ключом работать, тоесть мне нужна иконка, где-нибудь, щелкнул, и вот вам, пожалуйста, моя прога.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #18 : 08-06-2006 20:16 » 

прогу в принципе можно запихнуть в реестр Улыбаюсь) но этого разве что вирусы только делают.

для ярлыка функции есть, но сейчас не нашёл... мож кто подскажет
Записан

scraper
Гость
« Ответ #19 : 08-06-2006 20:40 » 

Алексей1153, Зачем вирусы это делают?
И функцию я бы очень хотел, с маленьким примерчиком (очень маленьким), если не трудно, ...
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

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


WWW
« Ответ #20 : 08-06-2006 21:18 » 

вирусы - работа у них такая Улыбаюсь

пример, как я пользую :
Код:
//прочитать DWORD параметр из ключа реестра
bool CFileMinder::_R_ReadRegKeyDWDParam(HKEY k,CString& parName,DWORD* value)
{
DWORD type=REG_DWORD;//тип параметра - DWORD
DWORD datalen=4;
return(ERROR_SUCCESS==RegQueryValueEx(k,parName,0,&type,(BYTE*)(value),&datalen));
}

//создать DWORD параметр в ключе реестра
bool CFileMinder::_R_SaveRegKeyDWDParam(HKEY k,CString& parName,DWORD* value)
{
return (ERROR_SUCCESS==RegSetValueEx(k,parName,0,REG_DWORD,(BYTE*)value,4));
}

примерно так...
Записан

PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #21 : 09-06-2006 05:09 » 

Вот пример работы с реестром на билдере:
http://www.softholm.com/articles/register.html

Цитата
Зачем вирусы это делают?
по разным причинам... например, есть специальный ключ, такой что если в него прописать путь для запуска проги, то винда ее запустит сразу после своего старта... к ярлыкам реестр не имеет никакого отношения.

а здесь http://sources.ru/builder/faq/015.html про создание ярлыков
Записан

Удачного всем кодинга! -=x[PooH]x=-
scraper
Гость
« Ответ #22 : 10-06-2006 20:44 » 

Спасибо, буду разгребать... Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines