Tuer proprement un processus [Résolu]

StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention - 10 juil. 2012 à 14:50 - Dernière réponse : StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_BinKentsu 66 Messages postés jeudi 1 septembre 2011Date d'inscription 22 juillet 2014 Dernière intervention - 10 juil. 2012 à 14:56
3
Merci
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

Merci cs_BinKentsu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_BinKentsu
StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention - 10 juil. 2012 à 16:36
0
Merci
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.
Commenter la réponse de StagiaireMsl
cs_louis14 788 Messages postés mardi 8 juillet 2003Date d'inscription 8 mars 2017 Dernière intervention - 11 juil. 2012 à 09:03
0
Merci
Et si tu envoyait un message WM_CLOSE à la fenêtre de ton clavier?


louis
Commenter la réponse de cs_louis14
StagiaireMsl 43 Messages postés mardi 19 avril 2011Date d'inscription 22 avril 2013 Dernière intervention - 17 juil. 2012 à 16:37
0
Merci
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.
Commenter la réponse de StagiaireMsl

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.