Certaines applications n'acceptent d'être ouverte qu'une seule fois. Si l'on essaie de l'ouvrir une deuxième fois, la fenêtre de la première instance repasse en premier plan et est restaurée si nécessaire.
Pour tester le code ci-dessous, créez un projet et ajoutez une form. Son nom est Form1 par défaut. Ajoutez ensuite le code ci-dessous dans un module standard. Enfin, sélectionnez "Sub Main" comme objet de démarrage dans les propriétés du projet.
| vb |
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Private Const SW_RESTORE = 9 Private Const GW_HWNDPREV = 3 Private Sub Main() Dim lngHandle As Long
lngHandle = GetPreviousWindow If lngHandle > 0 Then DisplayWindow lngHandle Else Form1.Show End If End Sub Private Function GetPreviousWindow() As Long Dim strTitre As String Dim lngHwnd As Long
strTitre = App.Title App.Title = "---" & App.Title
lngHwnd = FindWindow("ThunderRT6Main", strTitre)
If lngHwnd > 0 Then GetPreviousWindow = GetWindow(lngHwnd, GW_HWNDPREV)
App.Title = strTitre End Function Private Sub DisplayWindow(ByVal lngHandle As Long) ShowWindow lngHandle, SW_RESTORE SetForegroundWindow lngHandle End Sub |
La Fonction GetPreviousWindow() renvoie le handle de la fenêtre de l'application si celle-ci a déjà été ouverte. La fonction DisplayWindow() restaure et met au premier plan la fenêtre dont le handle est passé en paramètre. Dans la procédure Main, nous recherchons une instance existante. Si nous en avons trouvé une, nous l'activons, sinon nous affichons Form1.
Il existe aussi un autre moyen :
| vb |
Private Sub Form_Load() If App.PrevInstance Then MsgBox "Désolé, une instance est déjà active" & vbCrLf & "Le programme va s'arréter" End End If End Sub |
Source :
[ Lien ] Apres pour passer le nom du fichier utilise un SendMessage, mais là, regarde sur d'autre post, on en a déja parlé !!
Je met ce code ici pour que d'autre n'est pas besoin d'aller parcourir X site pour trouver leur bonheur... Mais un conseil : va sur
[ Lien ] il on fait une FAQ digne de MSDN !! (En plus simple !)
