Meilleur auteur de réponses
Tester programme lancé : problème avec API FindWindow ?

Question
-
Bonjour,
Je n'arrive pas à tester si un programme est déjà lancé afin de ne pas le lancer deux fois (programme exe externe), mon code :
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32 ' Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click Dim rep Select Case Mid(sender.name, 7, 1) Case "1" : If FindWindow("Tarot4", "Tarot4.exe") = 0 Then rep = Shell("Tarot4.exe ", 1) Case "2" Case "3" Case "4" Case "5" End Select End Sub '
Alors le problèe est ici :
If
FindWindow("Tarot4", "Tarot4.exe") = 0 Then rep = Shell("Tarot4.exe ", 1)
Le Shelle (isolé) lance bien le programme...
Mon programme se nomme Tarot4.exe, et il faut renseigner les deux chaînes (je présume) : ipClasse et ipWindowName, certes, mais je peux avoir ces renseignement comment ?
Nota bene, pour NotePad par exemple, ça marche car on sait ce qu'il faut écrire, mais là, je ne sais pas...
Est-ce qu'avec le gestionnaire de tâche, en regardant on peut faire quelque chose (en onglet processus / nom de l'image et description j'ai "Tarot4.exe" et en onglet application j'ai "TAROT", est-ce que ça peut servir ?
Merci.
Si ma réponse est utile cliquer en haut à gauche sur le triangle vert.
Et
Si la question est résolue, cliquer en bas sur : "Proposer comme réponse"
Cordialement
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire
Réponses
Toutes les réponses
-
-
Bonjour et merci,
En fait, par la ligne de commande que tu proposes je n'ai rien dans le textbox (enfin, crochets vides), alors qu'en listant tout je le trouve dans la liste, voici le code
Dim p As Process() = Process.GetProcessesByName("Tarot4") TextBox1.Text = p.ToString ' Dim processus As Process() = Process.GetProcesses() Dim base As String Dim tasse As String Dim longueur As Integer Dim coupe As String Dim resultat As String Dim lepoint As Integer Dim lesProcessus For Each lesProcessus In processus ' 29 = "System.Diagnostics.Process (" base = lesProcessus.ToString tasse = Trim(base) longueur = Len(tasse) coupe = Mid(tasse, 29, longueur - 29) resultat = coupe lepoint = InStr(1, resultat, ".", 1) ' enlever le "." et après If lepoint <> 0 Then resultat = Mid(coupe, 1, lepoint - 1) ListBox1.Items.Add(resultat) Next lesProcessus
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire -
-
-
Bonjour Troxsa,
Je ne connaissais pas cette option, très sympa du reste, ça évite de jouer avec un mutex ou autre evenement système. Par contre la demande de Joseph porte sur le contrôle d'une application depuis "un lanceur" et non l'application elle-même.
Kind regards, Sebastien G. - Axiomtek Deutschland GmbH -
-
Bonjour Sébastien,
Ben non, je vais faire avec ma boucle alors, car j'aime bien voir les noms.
Un tableau de process, ou pourrait couper aussi avec split, mais sur quel élément baser la coupe, hé ...
En plus il raconte sa vie quand il liste, tu as vu tout le nettoyage que je dois faire afin d'avoir le nom tout seul, s'il y avait une fonction qui retourne juste son nom, ah ...
Bon, ben merci, cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire -
Fais tout de même un GetProcessByName alors, car ça va te filtrer ton résultat en fonction du paramètre (dans l'exemple Tarot4). Du coup ta boucle sera un poil plus rapide, mais tu peux la conserver.
Kind regards, Sebastien G. - Axiomtek Deutschland GmbH -
J'peux pas Sébastien, si on rajoute byBame("") faut un nom, et si je fais une boucle avec tous en donnant un nom a byName je n'en vois pas trop le sens, la boucle dure un 10e de seconde ... d'autant que ça ne change rien au résultat, il me raconte toujours sa vie, dans tous les cas il faut faire de la manupulation de châine ensuite, soit en recherche, soit en nettoyage (sauf s'il y avait une fonction prévue pour nettoyer ?), voici un exemple de ce qu'il pond :
System.Diagnostics.Process (InputPersonalization)
Cordialement.
Joseph Attila PUSZTAY
EhJoe Logiciels Romans Ecrire -
Il faut mieux vérifier le nom interne de l'application en question, l'application pourra changé de nom mais pas le nom interne
le nom interne ce trouve dans la propriété de l'exe, onglet details, et Original fifleName
Cordialement, Troxsa