Почему бы не добавить иконку в трее на не учетную запись пользователя?

Я хочу добавить иконку в трее в фоновом режиме.
Кстати, если не учетная запись пользователя (например, SYSTEM) для запуска программы, не добавляйте иконку в трее.
Если использовать мой аккаунт, это работает.
Как добавить иконку в трее не по учетной записи пользователя для запуска программы?

NOTIFYICONDATA nid;

ZeroMemory(&nid, sizeof(NOTIFYICONDATA));
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hWnd;
nid.uFlags =  NIF_INFO|NIF_ICON|NIF_TIP;

sprintf(nid.szInfoTitle, "title");
sprintf(nid.szInfo, "infomation");
sprintf(nid.szTip, "tip");

nid.dwInfoFlags = NIIF_INFO;

if(g_UpdaterInfo.osver == cWinXP)
{
nid.uTimeout = 3000;
}

nid.uID = IDI_ICON;
nid.hIcon = LoadIcon(_AtlBaseModule.GetModuleInstance(), MAKEINTRESOURCE(IDI_ICON));

BOOL add = Shell_NotifyIcon(NIM_ADD, &nid);
DWORD result = GetLastError();
CString msg;
msg.Format("Tray AddIcon: %d", result);
FileLog(LOG_FILE, msg);
if(!add)
return FALSE;

return TRUE;

0

Решение

Добавить иконку в трее просто:

#include "stdafx.h"#include <Windows.h>
#include "resource.h"

int _tmain(int argc, _TCHAR* argv[])
{
NOTIFYICONDATA nid;

ZeroMemory(&nid, sizeof(NOTIFYICONDATA));
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = NULL;//hWnd;
nid.uFlags =  NIF_INFO|NIF_ICON|NIF_TIP;

sprintf_s(nid.szInfoTitle, "title");
sprintf_s(nid.szInfo, "infomation");
sprintf_s(nid.szTip, "tip");

nid.dwInfoFlags = NIIF_INFO;

//if(g_UpdaterInfo.osver == cWinXP)
//{
//    nid.uTimeout = 3000;
//}
nid.uTimeout = 3000;

nid.uID = IDI_ICON1;
nid.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));

BOOL add = Shell_NotifyIcon(NIM_ADD, &nid);
//DWORD result = GetLastError();
//CString msg;
//msg.Format("Tray AddIcon: %d", result);
//FileLog(LOG_FILE, msg);
if(!add)
return FALSE;

return TRUE;
}
0

Другие решения

Это, вероятно, работало на XP, но перестало работать на Vista?

Виновник довольно прост. Проще говоря, у каждой учетной записи есть свой рабочий стол. (Технически, это каждый сеанс входа в систему). Они разлучены, намеренно.

Нормальное решение состоит в том, чтобы иметь отдельную команду&Процесс управления, чтобы обеспечить весь пользовательский интерфейс. Он работает под учетной записью пользователя и, следовательно, может отображать пользовательский интерфейс на правильном рабочем столе.

0

По вопросам рекламы [email protected]