c ++ create программа работает в фоновом режиме - PullRequest
0 голосов
/ 09 сентября 2010

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

Ответы [ 3 ]

2 голосов
/ 09 сентября 2010

Чтобы программа работала в фоновом режиме, вы либо добавляете ее в качестве службы, либо делаете ее «недоступной» для выключения (например, скрываете окно для программы).Чтобы добавить значок на панели инструментов, вы используете winapi.Вызовите Shell_NotifyIcon и передайте NOTIFYICONDATA структуру

Это должно быть определено где-то

enum TrayIcon {
    ID = 13, CALLBACKID = WM_APP+1
};

Кроме того, в приведенном ниже коде hWndHWND, это окно, которое вы хотите связать со значком уведомления.Этот HWND's wndProc будет получать сообщения для значка.

Примечания:

  • флаг NIF_ICON делает hIcon действительным в структуре NOTIFICATIONICONDATA.Поэтому, если вы не хотите иметь значок, не указывайте его.
  • флаг NIF_MESSAGE делает uCallbackMessage действительным.Если вы не хотите обрабатывать какие-либо сообщения, не указывайте этот флаг.
  • Вы должны удалить значок, прежде чем закрыть свою программу, иначе он застрянет там, пока вы не наведете курсор на нее
  • При запуске вашего компьютера у Shell_NotifyIcon могут возникнуть некоторые трудности для достижения успеха.Я не могу найти ссылку на него, но я знаю, что где-то читал .. Поэтому, если это не удастся, не думайте, что это не будет работать вообще - просто попробуйте еще раз.

При этом сказано, как вы добавляете, удаляете и обрабатываете сообщения для иконки в трее

Чтобы добавить значок

// in HICON hIcon: this is the icon you want as the image in the tray
NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = ID;
nid.uFlags = NIF_ICON | NIF_MESSAGE;
nid.hIcon = hIcon;
nid.uCallbackMessage = /*TrayIcon::*/CALLBACKID;
Shell_NotifyIcon(NIM_ADD, &nid);

Чтобы удалить значок

NOTIFYICONDATA nid;
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uID = /*TrayIcon::*/ID;
Shell_NotifyIcon(NIM_DELETE, &nid);

Обработка сообщений для иконки

LRESULT wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch (msg){
        // ...
        case /*TrayIcon::*/CALLBACKID:
        {
            // here, you handle the messages for your tray icon
        }
        break;
        // ...
    }
}
1 голос
/ 09 сентября 2010

http://www.winprog.org/tutorial/ хорош для изучения winapi и, как правило, работы приложений Windows.Для иконки в трее используйте Shell_NotifyIcon.Для этого вам понадобится окно и цикл сообщений.

0 голосов
/ 09 сентября 2010
...