Instance unique

- - Dernière réponse :  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
Afficher la suite 

2 réponses

Messages postés
6138
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 juillet 2019
82
cs_Le Pivert
Messages postés
6138
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 juillet 2019
82 -
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
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.
cs_Le Pivert
Messages postés
6138
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 juillet 2019
82 -
Voici un test

Mettre le nom du Form dans l'exemple c'est Essai à toi de l'adapter:

Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For Each p As Process In Process.GetProcesses
            If p.MainWindowTitle.Contains("Essai") Then 'mettre le nom du Form à fermer 
                p.CloseMainWindow()
            End If
        Next
    End Sub
End Class


Voilà, a essayer sur l'exe uniquement
Re, Oui j'ai mis "wave" parce que l'application s'appelle comme ça. Oui pour que je teste, c'est bien en dehors de Visual Studio. Comme je l'ai dit : L'application s'ouvre au double clic sur un fichier Wav. On en bien en dehors de VS 2019. Par ailleurs, on ne peut ouvrir deux instances dans VS 2019. Oui j'ai bien décoché "Application instance unique" sinon je n'aurais pas mais deux programmes Wave d'ouvert.
        For Each p As Process In Process.GetProcesses
            If p.MainWindowTitle.Contains("Wave") Then
                p.CloseMainWindow()
            End If
        Next
Voilà ! En changeant le code, ça fonctionne ! Merci !
        For Each Pocesss As Process In Process.GetProcessesByName("Wave")
            Pocesss.CloseMainWindow()
        Next
Commenter la réponse de cs_Le Pivert
Messages postés
13522
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 juillet 2019
289
0
Merci
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
Whismeril
Messages postés
13522
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 juillet 2019
289 -
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
Commenter la réponse de Whismeril