2013-06-17 4 views
0

백그라운드 프로세스에 트레이 아이콘을 추가하고 싶습니다. 프로그램을 실행하는 사용자 계정 (예 : 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

질문이 정말 혼란 스럽습니다. 프로그램이 관리자로 실행 중일 때 트레이 아이콘을 추가 하시겠습니까? – Brent81

+0

아니요. 실제로이 프로세스는 Windows 작업입니다. 작업이 시작되었습니다, 나는 '시스템'계정으로 생성 된 작업에 트레이 아이콘을 표시하고 싶습니다. – andwella

답변

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

다른 계정으로 실행 해 보셨습니까? – MSalters

+0

답변 해 주셔서 감사합니다. 하지만, 나는 아직 작동하지 않는 가이드 추가 트레이 아이콘을 수정했습니다. – andwella

+0

안녕 MSalters, 예, 다릅니다. (SYSTEM 대 내 로그인 계정) – andwella

0

XP에이 아마 한 작동하지만 Vista에서 작동이 중지?

범인은 상당히 쉽습니다. 간단히 말해서, 각 계정에는 자체 데스크톱이 있습니다. 기술적으로는 각 로그인 세션입니다. 그들은 의도적으로 분리되어 있습니다.

일반적인 해결책은 전체 UI를 제공하기 위해 제어 프로세스 인 별도의 명령을 사용하는 것입니다. 그것은 사용자 계정에서 실행되므로 올바른 바탕 화면에 UI를 표시 할 수 있습니다.

+0

나는 윈도우 7에서 일하고있다. 그리고 그 계정은 '시스템'이다. SYSTEM 계정은 Windows 로그인을 비활성화합니다. 그렇지 않니? 그래서 나는 확인하지 않는다. – andwella

+0

@andwella : 7은 Vista와 동일한 데스크탑 아키텍처를 사용합니다. 물론 'SYSTEM'은 자체 대화 형 로그인 세션이 없지만 다른 로그인 세션을 도용 할 수있는 것은 아닙니다. "확인"을해도 문제가 제거되지 않습니다. – MSalters