Bonjour,

Il m'arrive un truc curieux et je n'arrive pas à comprendre d'où peut venir le problème.

J'ai une procédure qui ferme un processus bien précis, retrouvé par son nom.
Cette procédure fonctionne bien mais laisse l'icône du programme dans la barre des tâches.
Alors je me suis tourné vers une procédure de rafraichissement de la barre des tâches. J'utilise le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
 
// Pour fermer le ou les processus
 
public static void Terminate()
{
    foreach (System.Diagnostics.Process item in System.Diagnostics.Process.GetProcessesByName("processafermer"))
    {
        item.CloseMainWindow();
        item.WaitForExit();
        Utilities.WindowsSystem.RefreshSystray();
    }
}
 
 
// Pour rafraichir la systray
 
[DllImport("user32", EntryPoint = "FindWindow")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
 
[DllImport("user32", EntryPoint = "FindWindowEx")]
public static extern int FindWindowExA(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
 
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);
 
public static void RefreshSystray()
{
    int shelltraywnd = FindWindow("shell_traywnd", null);
    int traynotifywnd = FindWindowExA(shelltraywnd, 0, "traynotifywnd", null);
    int mes = (int)WindowsMessages.WM_PAINT;
    SendMessage(traynotifywnd, mes, 0, 0);
}
Mon problème est que si j'utilise

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Utilities.WindowsSystem.RefreshSystray();
dans le Terminate(), mon appli ne fait plus rien, je peux toujours l'afficher avec le alt-tab, mais impossible d'avoir accès à l'interface. On dirait que l'application n'est plus accessible autrement que visuellement.

Est-ce vous voyez une erreur dans ces 2 bouts de code ou dois-je chercher ailleurs dans le déroulement du programme ?

Papy !


arf ... Apparemment, c'est plutôt le WaitForExit qui pose problème de façon aléatoire. Il semble que le processus a fermer ne réagisse pas toujours de la même façon.

Suite et fin :

J'ai tout remplacé par un Kill() , tant pis pour l'icône qui reste