Instance unique

Mayu - 2 juil. 2019 à 01:58
 Mayu - 3 juil. 2019 à 00:22
Bonjour, j'ai fait un petit programme pour les les fichiers Wav.

En faisant un double clic sur un fichier wav, mon programme s'ouvre et lit le fichier automatiquement.

J'ai fait en sorte qu'un seul programme ne soit ouvert en cochant Instance unique dans VS2019.

Le problème est que si le programme est déjà ouvert, lorsque je fais un double clic sur un second fichier Wav, l'icône de mon programme clignote en jaune et c'est tout.

Pour récupérer le fichier cliqué je le prends comme ça :
 
If Command() <> "" Then
            Call Module1.Chargement(System.IO.Path.GetFullPath(Command().Replace(Chr(34), "")))
        End If


J'aimerais bien que le programme exécute le second son et ferme la première fenêtre.
Merci

2 réponses

cs_Le Pivert
Messages postés
7752
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
129
2 juil. 2019 à 14:23
0
Bonjour, ça je sais le faire. C'est la double instance que je ne sais pas gérer. Je voudrais que la seconde instance tue la première pour n'avoir qu'une seule fenêtre.
0
cs_Le Pivert
Messages postés
7752
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
129
2 juil. 2019 à 14:46
Voir ceci:

https://codes-sources.commentcamarche.net/source/102162-controler-une-fenetre-ouverte

dans ce programme tu trouveras ce code qui permet de fermer la fenêtre ouverte

 Private Sub cmdclose_Click(sender As System.Object, e As System.EventArgs) Handles cmdclose.Click
        For Each p As Process In Process.GetProcesses
            If p.MainWindowTitle.Contains(nomappli) Then
                p.CloseMainWindow()
            End If
        Next
    End Sub
0
Ca ne marche pas : cmdclose.Click nexiste pas.
Et puis, je ne pense pas que ce soit cela que je veux. La fenêtre doit se fermer toute seule.
0
cs_Le Pivert
Messages postés
7752
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
129
Modifié le 2 juil. 2019 à 16:55
c'est normal c'est le nom du bouton!!!!!!!!!!!!!

tu te sers simplement de cela:

 For Each p As Process In Process.GetProcesses
            If p.MainWindowTitle.Contains("nomappli") Then 'mettre le nom de l'appli à fermer à la place de nomappli
                p.CloseMainWindow()
            End If
        Next


mais je ne comprends pas ta façon de procéder. il serait si simple d'arrêter le son avant de lancer le nouveau fichier!

Voici un exemple de programmation de son wave, mp3 etc. :

https://codes-sources.commentcamarche.net/source/49973-gadget-diaporama

@+ Le Pivert
0
J'ai fait cela mais ça ne marche pas.

Je réexplique : Je fait un double clic sur un fichier Wav. Mon programme s'ouvre et lit le son. La fenêtre reste ouverte. Je fait un double clic sur un second fichier wav. Mon programme s'ouvre à nouveau et lit le son (donc deux fenêtres ouvertes). Mais je voudrais que le second programme ferme le premier pour ne pas avoir 36 fenêtres à fermer.

Media Player Classic HD fait de la même manière.
0
Whismeril
Messages postés
17348
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 mai 2022
596
Modifié le 2 juil. 2019 à 17:52
Bonjour

J'ai fait cela mais ça ne marche pas
  • Déjà pour que ça marche, il faut que tu autorises plusieurs instances de ton logiciel, car c'est la 2eme instance qui va tuer la première.
  • Ensuite il faut le placer au bon endroit, c'est à dire au point d'entrée de ton logiciel dans la Sub Main.
  • Enfin selon l'état de ta première instance, la fermer proprement peut s'avérer impossible, il faut alors tuer le processus
    p.Kill()


Mais cela veut dire qu'à chaque double click tu vas ouvrir une nouvelle instance qui tue la précédente
Ce sera peut-être un peu plus long que de faire en sorte que ton logiciel coupe l'herbe sous le pied à Windows, en interceptant tous les doubles clicks et en traitant le cas qui t'intéresse. Ça s'appelle un hook, ici un discussion qui en parle en C# https://stackoverflow.com/questions/12851010/detect-double-click-globally-in-windows et là de quoi traduire en ligne https://www.qwant.com/?q=c%23+to+vb&t=web

PS
call
c'est du VB6, pas du .Net
En .Net si tu enlèves les instructions VB6, ça ne compilera plus voir https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net



Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
Whismeril
Messages postés
17348
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
28 mai 2022
596
2 juil. 2019 à 17:53
PS et ça ne marche pas quand tu lances le logiciel par Visual Studio, que tu sois en mode Debug ou Release, carl'exe est lancé dans un Host, donc n'apparait pas dans les process
0