Tuer proprement un processus

Résolu
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 - 10 juil. 2012 à 14:50
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 - 17 juil. 2012 à 16:37
Bonjour a tous,

Après quelques recherches non fructueuse sur le site, je viens m'adresser a vous.

Je conçois un soft qui tourne sur un écran tactile.
Pour que l'utilisateur puisse écrire quelque chose je lance le clavier visuel :


Process ClavierV; //En variable globale

private void frmParametre_Load(object sender, EventArgs e)
{
     //Ouverture du clavier visuel
     ClavierV = Process.Start("osk.exe");
}



Le clavier se lance bien et lorsque je fais : Ctrl + Shift + Echap et que je regarde dans les processus,
un petit processus nommé : msswchx.exe se lance.

Jusque la tout est normal.

Lorsque que mon programme s’arrête, je fais :


private void frmParametre_FormClosing(object sender, FormClosingEventArgs e)
{
     //On ferme le clavier visuel
     try { ClavierV.Kill(); }
     catch { }

     //Le try est la si jamais le clavier visuel à été fermé manuellement
}


Lorsque je ferme le clavier visuel en cliquant sur la croix de sa fenêtre, ce processus, s’arrête. (Avant la fermeture du programme)

En revanche, si je ne l'ai pas fermé manuellement avant, ce fameux processus : msswchx.exe ne se ferme pas et dans un de mes autres
programmes, je ne peux pas "Accédez au port COM1" -_-

C'est assez génant, avez vous une idée pour fermer proprement ce processus ?

PS : j'ai essayé sans succès :


private void frmParametre_FormClosing(object sender, FormClosingEventArgs e)
        {
            //On ferme le clavier visuel
            try { ClavierV.Kill(); }
            catch { }
            try { ClavierV.Dispose(); }
            catch { }
            ClavierV = null;
        }


Merci et bonne journée


Vivoubos

Celui qui n'expérimente rien ne se trompe qu'une seule fois.

4 réponses

cs_BinKentsu Messages postés 64 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 22 juillet 2014 8
10 juil. 2012 à 14:56
Bonjour,
Etant donné que tu connais le nom du processus utilisé, tu peux l'obliger à se fermer de la manière suivante :

Process[] clavier = Process.GetProcessesByName("msswchx");
foreach (Process myProcess in clavier)
    myProcess.Kill();

BinKentsu
3
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
10 juil. 2012 à 16:36
Oui c'est une brillante solution ^^

Par contre, il va y avoir conflit si je veux lancer mes deux programmes en même temps :s

...

Alors, j'ai effectuer des recherche de mon coté et j'ai trouvé que le msswchx est : Microsoft On-Screen Keyboard program.

Donc normal qu'il se lance avec le clavier visuel, le problème est qu'il ne se ferme pas quand je fais un process.Kill ou autre :s
Il se ferme seulement quand je clique sur la croix su clavier visuel...

Ben je vais jouer le bourrin avec ta méthode je crois ^^
Enfin s'il y a pas d'autre solution ^^

Merci :)


Celui qui n expérimente rien ne se trompe qu'une seule fois.
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
11 juil. 2012 à 09:03
Et si tu envoyait un message WM_CLOSE à la fenêtre de ton clavier?


louis
0
StagiaireMsl Messages postés 43 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 22 avril 2013 3
17 juil. 2012 à 16:37
Salut Louis14

Je n'ai jamais utilisé WM_CLOSE ...
Alors j'ai un peu chercher sur le forum en mettant dans la recherche WM_CLOSE, et je n'ai pas vraiment trouvé d'exemple exploitable

J'ai un peu compris le fonctionnement avec ce code :


public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;
private bool _closeClick;

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if(m.Msg WM_SYSCOMMAND && (int)m.WParam SC_CLOSE)
        this._closeClick = true;
    base.WndProc(ref m);
}



Mais rien sur l'envoie de la fermeture à moins que ce soit base.WndProc

Pourrais tu m'en dire un peu plus ? Cette solution m'a l'air intéressante!




PS : Normal que lorsque je tape WM_CLOSE dans la recherche csharpfr, qu'il y ai un livre dénomé porno dans la section livre ? xD le rapport? (pas osé cliquer ^^)


Celui qui n expérimente rien ne se trompe qu'une seule fois.
0
Rejoignez-nous