Comment ne pas faire apparaître une application dans la barre des tâches.

Microsoft windows préconize pour cela 3 Méthodes :

The Shell creates a button on the taskbar whenever an application creates a window that isn't owned. .... To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style. As an alternative, you can create a hidden window and make this hidden window the owner of your visible window...
...From an application, you can now add, remove, and activate taskbar button...You must call the ITaskbarList::HrInit method to initialize the object. You can then use the methods of the ITaskbarList interface to modify the contents of the taskbar.

Donc, pour qu'une fenêtre n'apparaisse pas dans la barre, soit que

  • La fenêtre possède une fentre mère cachée,
  • Possède le style WS_EX_TOOLWINDOW
  • Appelle les méthodes de l'interface ITaskbarList.

Nous allons dans ce qui suit détailler la dernière méthode, c'est celle que je trouve la plus élegante en terme de programmation.

Download The Source, Executable

Le programme en soit n'est qu'une fenêtre où il y deux button, l'implémantation d'une telle fenêtre est simple, pour plus de détail, reporter vous aux sections précedentes

 

int ShowOnTaskbar (HWND hWin, bool bVisible )
{
 HRESULT hr;
 ITaskbarList *ShellTaskBar;
       
 CoInitialize(NULL);
           
 hr = CoCreateInstance(CLSID_TaskbarList,NULL,
           CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&ShellTaskBar);
 
 if ( SUCCEEDED ( hr ) )
 {
    ShellTaskBar->HrInit();
    if (bVisible)
    {
       ShellTaskBar->AddTab(hWin);
       ShellTaskBar->ActivateTab(hWin);
    }
    else
       ShellTaskBar->DeleteTab(hWin);
           
    ShellTaskBar->Release();
 }
 CoUninitialize();
return 0; }

 

la fonction ShowOnTaskbar() qui est responsable de cacher l'application de la barre des tâche, appelle la fonction DeleteTab() de l'interface ITasbarList, après avoir pris soin d'appeller la methode HrInit();
Les détails de la programmation COM, est laissé pour ne pas alourdir les explications.


Sources pris de :

Author (if works :) : Adam Blaszczyk, Poland (Hong Kong)
Contact: : adasinhk@yahoo.com.hk
pyro@alpha.net.pl
Home Page : www.mykakee.com