Click here to Skip to main content
13,457,165 members
Click here to Skip to main content
Add your own
alternative version


49 bookmarked
Posted 17 Jan 2000

A service that displays an icon in the system tray

, 17 Jan 2000
Rate this:
Please Sign up or sign in to vote.
This article demonstrates a service that uses the system tray to interact with the user.
  • Download demo executable - 7 Kb
  • Download source files - 13 Kb
  • <!-- Article Starts -->

    IconService is a Win32 console app that displays an icon in the system tray. The service can be installed/removed from the prompt: "IconService -install" , "IconService -remove", and started from the control panel (the "Services" icon). In order to display something from a service you must allow it to interact with the desktop. This can be done by specifying the SERVICE_INTERACTIVE_PROCESS switch when creating the service:

    schService = CreateService(
                schSCManager,               // SCManager database
                TEXT(SZSERVICENAME),        // name of service
                TEXT(SZSERVICEDISPLAYNAME), // name to display
                SERVICE_ALL_ACCESS,         // desired access
                SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS ,  // service type
                SERVICE_DEMAND_START,       // start type
                SERVICE_ERROR_NORMAL,       // error control type
                szPath,                     // service's binary
                NULL,                       // no load ordering group
                NULL,                       // no tag identifier
                TEXT(SZDEPENDENCIES),       // dependencies
                NULL,                       // LocalSystem account
                NULL);                      // no password

    ServiceStart creates an event used later for stopping the service, and a thread that is responsible for the icon's parent. Here I use an old trick to prevent the dialog from appearing in the task bar. First I create a modeless dialog with the WS_VISIBLE not checked:


    and than I create the icon's parent:

    DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, DialogProc);

    To hide this one:

    SetWindowPos(hwndDlg, NULL, -10,-10,0,0, SWP_NOZORDER|SWP_NOMOVE);

    The DialogProc is quite simple. It creates the icon, and on RBCLK it displays a menu to stop the service. ServiceStop sets the event created by ServiceStart and deletes the icon.

    The heart of the service is in the ServiceStart function. So if you want your service to actually do something after creating the icon, replace the WaitForSingleObject with something else.


    This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

    A list of licenses authors might use can be found here


    About the Author

    Bruno Vais
    United States United States
    No Biography provided

    You may also be interested in...


    Comments and Discussions

    GeneralDo i have to remove the icon when the user logs out Pin
    WeberMenschi20-Dec-01 9:24
    memberWeberMenschi20-Dec-01 9:24 
    GeneralRe: Do i have to remove the icon when the user logs out Pin
    Tamer Mash29-Apr-03 2:29
    sussTamer Mash29-Apr-03 2:29 
    GeneralAdd icon on "Taskbar Creation" Pin
    Derius1-Nov-01 11:33
    memberDerius1-Nov-01 11:33 
    A very useful addition to this example would be to add the functionality for the service icon to be added to the window on startup. You can find an example in the MSDN Library about "Taskbar Creation Notification". This would be ideal for any type of service with an icon in the taskbar area. Here is the excerpt from the library


    Taskbar Creation Notification
    With Microsoft® Internet Explorer 4.0 and later, the Shell notifies applications that the taskbar has been created. When the taskbar is created, it registers a message with the TaskbarCreated string and then broadcasts this message to all top-level windows. When your taskbar application receives this message, it should assume that any taskbar icons it added have been removed and add them again. This feature generally applies only to services that are already running when the Shell begins execution. The following example shows a very simplified method for handling this case.

    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
    static UINT s_uTaskbarRestart;

    case WM_CREATE:
    s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));

    if(uMessage == s_uTaskbarRestart)
    return DefWindowProc(hWnd, uMessage, wParam, lParam);


    Hope this is useful. I am using it in the projects that I am working on to allow the user to interact with the service (based on their user privileges) Smile | :)

    GeneralRe: Add icon on "Taskbar Creation" Pin
    Paul Hunter22-Nov-01 23:18
    memberPaul Hunter22-Nov-01 23:18 
    GeneralShow Correct 16x16 icon in Tray Pin
    Anonymous5-Sep-01 3:58
    memberAnonymous5-Sep-01 3:58 
    GeneralPopup menu bugs... Pin
    Protopopov Gleb20-Aug-01 22:46
    memberProtopopov Gleb20-Aug-01 22:46 
    GeneralAPPLICATIONvnc Pin
    gboskin13-Jul-01 5:49
    membergboskin13-Jul-01 5:49 
    GeneralRe: APPLICATIONvnc Pin
    Carlos Antollini13-Jul-01 6:11
    memberCarlos Antollini13-Jul-01 6:11 
    QuestionWhy is my window popping up? Pin
    Alexander Boczar3-Jul-01 7:48
    memberAlexander Boczar3-Jul-01 7:48 
    AnswerRe: Why is my window popping up? Pin
    Anonymous29-Apr-03 2:08
    sussAnonymous29-Apr-03 2:08 
    AnswerRe: Why is my window popping up? Pin
    Anonymous29-Apr-03 2:09
    sussAnonymous29-Apr-03 2:09 
    GeneralPopup-Error Pin
    Bo Hansen28-Jul-00 3:06
    sussBo Hansen28-Jul-00 3:06 
    GeneralRe: Popup-Error Pin
    Greven31-Oct-01 7:52
    memberGreven31-Oct-01 7:52 
    GeneralNot robust Pin
    Nospam19-Jan-00 3:44
    sussNospam19-Jan-00 3:44 
    GeneralRe: Not robust Pin
    Peter Kenyon23-Jan-00 10:45
    sussPeter Kenyon23-Jan-00 10:45 

    General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

    Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

    Permalink | Advertise | Privacy | Terms of Use | Mobile
    Web04 | 2.8.180322.1 | Last Updated 18 Jan 2000
    Article Copyright 2000 by Bruno Vais
    Everything else Copyright © CodeProject, 1999-2018
    Layout: fixed | fluid