Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

App.Previnstance et activation

18 réponses
Avatar
Driss HANIB
Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un msgBox
puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger (agrandir
si réduite) ou/et mettre en avant par dessus tous les autres prog chargés
(OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut y
avoir des feuilels filles (qui portent toutes un nom)

merci d'avance

Driss

10 réponses

1 2
Avatar
Driss HANIB
Excusez moi, pour les fautes de frappe

Driss
"Driss HANIB" a écrit dans le message de news:

Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un
msgBox puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger
(agrandir si réduite) ou/et mettre en avant par dessus tous les autres
prog chargés (OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut
y avoir des feuilels filles (qui portent toutes un nom)

merci d'avance

Driss

Avatar
LE TROLL
Bonjour Driss,

Je viens de programmer sur ce principe, mais je dois dire que je ne sis
pas toujours ce que je fais avec les Zapis, le principal est que ça marche,
en fait je donne un dans une variable(i) qui aura le nom du processus, et je
range le processus dans une autre variables(i), ainsi quand (command1_click)
on demande une ouverture (là ce sont des programmes, mais c'est pareil pour
les feuilles), et bien ça va voir dans la liste, et si le processus est déjà
ouvert c'est refusé, et sinon, quand on ferme, en réactualisant la liste à
la prochaine demande ça permet de savoir ce qui a été fermé. Il y a peut des
des api en trop, tu verras, car c'est un programme qui appelle d'autres
programmes, alors j'ai mis toutes les api de ces programmes afin qu'elles
soient distribués sans que je m'en préoccupe, voici le code :
---début de code---


' l'ecrivain form1
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory
As String, _
ByVal nShowCmd As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
Long) As Long
Private Const PROCESS_TERMINATE = &H1
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, _
ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
_
(ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As
Long
Const GW_CHILD = 5
Const GW_HWNDNEXT = 2
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
ByVal Y As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal Flags As Long) As Long
Const Flags = &H2 Or &H1 Or &H40 Or &H10
Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 2000
'
Dim NumProcess As Long
Dim processus(5) As Long
Dim fic(5) As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim voisListe As Boolean
Dim version As String
Dim Mail As String
'


Sub Form_Load()
Dim r As Long
Dim m As String
ChDrive App.Path
ChDir App.Path
voisListe = False
For i = 1 To 5
processus(i) = 0
Next i
End Sub


Sub Command1_Click(Index As Integer)
Dim nomFic As String
Dim dejaOuvert As Boolean
Dim hWnd As Long
Dim Titre_Fenetre As String
Dim TitreFen As String
Dim ret As Long
'
If voisListe = True Then
GoSub deja_ouvert
Exit Sub
End If
'
dejaOuvert = True
Select Case Index
Case 0: ShellExecute Me.hWnd, "Open", "http://stores.lulu.com/EhJoe",
"", App.Path, 1
'
Case 1 ' anagrammes
nomFic = "anagrammes"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "anagrammes.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 2: ' mots-croisés
nomFic = "mots-croisés"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "mot.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 3: ' rimes
nomFic = "rimes"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "rimes.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 4: ' traqueur de répétitions
nomFic = "traqueur de répétitions"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "traqueur.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 5: ' complément de mots
nomFic = "complément de mots"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "complement.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 6 ' courrier
ShellExecute Me.hWnd, "Open", "Mailto:" & Mail, "", App.Path, 1
Case 7: MsgBox version, vbInformation ' version
Case 8: ShellExecute Me.hWnd, "Open", "http://irolog.free.fr", "",
App.Path, 1
End Select
Exit Sub
'
deja_ouvert:
List1.Clear
hWnd = GetDesktopWindow()
hWnd = GetWindow(hWnd, GW_CHILD)
Do While (Not IsNull(hWnd)) And (hWnd <> 0)
Titre_Fenetre = String(255, 0)
ret = GetWindowText(hWnd, Titre_Fenetre, 255)
If Titre_Fenetre <> String(255, 0) Then
TitreFen = Trim(Titre_Fenetre)
List1.AddItem LCase(TitreFen)
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
For i = List1.ListCount - 1 To 0 Step -1
If List1.List(i) = List1.List(i - 1) Then List1.RemoveItem i
Next i
List1.Refresh
If voisListe = True Then Return
For i = 0 To List1.ListCount - 1
If nomFic = Mid(List1.List(i), 1, Len(nomFic)) Then Return
Next i
dejaOuvert = False
Return
End Sub


Sub affiche()
Dim hWnd As Long
Dim Titre_Fenetre As String
Dim TitreFen As String
Dim ret As Long
List1.Clear
hWnd = GetDesktopWindow()
hWnd = GetWindow(hWnd, GW_CHILD)
Do While (Not IsNull(hWnd)) And (hWnd <> 0)
Titre_Fenetre = String(255, 0)
ret = GetWindowText(hWnd, Titre_Fenetre, 255)
If Titre_Fenetre <> String(255, 0) Then
TitreFen = Titre_Fenetre
List1.AddItem LCase(Trim(TitreFen))
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
For i = List1.ListCount - 1 To 0 Step -1
If List1.List(i) = List1.List(i - 1) Then List1.RemoveItem i
Next i
List1.Refresh
End Sub


Sub Form_Unload(Cancel As Integer)
Dim RC As Long
Dim hProcess As Long
Dim present(5) As Boolean
Dim nbPresent As Byte
Dim liste1 As String
Dim m As String
Dim s
Dim r As Long
'
Cancel = 0
Call affiche
For i = 1 To 5
present(i) = False
Next i
nbPresent = 0
For i = 0 To List1.ListCount - 1
For j = 1 To 5
liste1 = Trim(List1.List(i))
If fic(j) = liste1 Then
present(j) = True
nbPresent = nbPresent + 1
Exit For
End If
Next j
Next i
'
If nbPresent < 1 Then GoTo ferme
s = vbLf
m = "Attention "
If nbPresent = 1 Then m = m & "un logiciel est ouvert : " & s & s
If nbPresent > 1 Then m = m & "des logiciels sont ouverts : " & s & s
m = m & "Pour des raison de sécurité de données nous vous recommandons :
" & s
If nbPresent = 1 Then m = m & "De fermer le logiciel ouvert depui celui-ci
: " & s & s
If nbPresent > 1 Then m = m & "De fermer les logiciels ouverts depuis
ceux-ci : " & s & s
For i = 1 To 5
If present(i) = True Then m = m & "- " & UCase(fic(i)) & " " & s
Next i
m = m & s
m = m & "Voulez vous forcer la fermeture (déconseillé) " & s
s = MsgBox(m, vbQuestion + vbYesNo + vbDefaultButton2)
If s <> vbYes Then
Cancel = -1
Exit Sub
End If
'
ferme:
For i = 1 To 5
If processus(i) <> 0 Then
hProcess = OpenProcess(PROCESS_TERMINATE, -1&, processus(i))
RC = TerminateProcess(hProcess, 0&)
RC = CloseHandle(hProcess)
End If
Next i
If nbPresent > 0 Then
DoEvents
Sleep 1000
End If
'
If WindowState <> 1 Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_BLEND Or AW_HIDE)
'
Reset
End
End Sub


---fin de code---

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Driss HANIB" a écrit dans le message de
news:
Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un
msgBox puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger
(agrandir si réduite) ou/et mettre en avant par dessus tous les autres
prog chargés (OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut
y avoir des feuilels filles (qui portent toutes un nom)

merci d'avance

Driss

Avatar
Driss HANIB
Salut LE TROLL

je vais regarder et fouiller pour voir si je peux trouver mon bonheur.

Driss
"LE TROLL" <le a écrit dans le message de news:
%
Bonjour Driss,

Je viens de programmer sur ce principe, mais je dois dire que je ne sis
pas toujours ce que je fais avec les Zapis, le principal est que ça
marche, en fait je donne un dans une variable(i) qui aura le nom du
processus, et je range le processus dans une autre variables(i), ainsi
quand (command1_click) on demande une ouverture (là ce sont des
programmes, mais c'est pareil pour les feuilles), et bien ça va voir dans
la liste, et si le processus est déjà ouvert c'est refusé, et sinon, quand
on ferme, en réactualisant la liste à la prochaine demande ça permet de
savoir ce qui a été fermé. Il y a peut des des api en trop, tu verras, car
c'est un programme qui appelle d'autres programmes, alors j'ai mis toutes
les api de ces programmes afin qu'elles soient distribués sans que je m'en
préoccupe, voici le code :
---début de code---


' l'ecrivain form1
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory
As String, _
ByVal nShowCmd As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As
Long) As Long
Private Const PROCESS_TERMINATE = &H1
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, _
ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias
"GetWindowTextA" _
(ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As
Long
Const GW_CHILD = 5
Const GW_HWNDNEXT = 2
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, _
ByVal Y As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal Flags As Long) As Long
Const Flags = &H2 Or &H1 Or &H40 Or &H10
Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hWnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As
Long
Private Const AW_HOR_POSITIVE = &H1
Private Const AW_HOR_NEGATIVE = &H2
Private Const AW_VER_POSITIVE = &H4
Private Const AW_VER_NEGATIVE = &H8
Private Const AW_CENTER = &H10
Private Const AW_HIDE = &H10000
Private Const AW_ACTIVATE = &H20000
Private Const AW_SLIDE = &H40000
Private Const AW_BLEND = &H80000
Private Const AW_DURATION_DEFAULT = 2000
'
Dim NumProcess As Long
Dim processus(5) As Long
Dim fic(5) As String
Dim i As Long
Dim j As Long
Dim k As Long
Dim voisListe As Boolean
Dim version As String
Dim Mail As String
'


Sub Form_Load()
Dim r As Long
Dim m As String
ChDrive App.Path
ChDir App.Path
voisListe = False
For i = 1 To 5
processus(i) = 0
Next i
End Sub


Sub Command1_Click(Index As Integer)
Dim nomFic As String
Dim dejaOuvert As Boolean
Dim hWnd As Long
Dim Titre_Fenetre As String
Dim TitreFen As String
Dim ret As Long
'
If voisListe = True Then
GoSub deja_ouvert
Exit Sub
End If
'
dejaOuvert = True
Select Case Index
Case 0: ShellExecute Me.hWnd, "Open", "http://stores.lulu.com/EhJoe",
"", App.Path, 1
'
Case 1 ' anagrammes
nomFic = "anagrammes"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "anagrammes.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 2: ' mots-croisés
nomFic = "mots-croisés"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "mot.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 3: ' rimes
nomFic = "rimes"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "rimes.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 4: ' traqueur de répétitions
nomFic = "traqueur de répétitions"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "traqueur.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 5: ' complément de mots
nomFic = "complément de mots"
fic(Index) = nomFic
GoSub deja_ouvert
If dejaOuvert = True Then Exit Sub
nomFic = "complement.exe"
NumProcess = Shell(nomFic, 1)
processus(Index) = NumProcess
Call affiche
'
Case 6 ' courrier
ShellExecute Me.hWnd, "Open", "Mailto:" & Mail, "", App.Path, 1
Case 7: MsgBox version, vbInformation ' version
Case 8: ShellExecute Me.hWnd, "Open", "http://irolog.free.fr", "",
App.Path, 1
End Select
Exit Sub
'
deja_ouvert:
List1.Clear
hWnd = GetDesktopWindow()
hWnd = GetWindow(hWnd, GW_CHILD)
Do While (Not IsNull(hWnd)) And (hWnd <> 0)
Titre_Fenetre = String(255, 0)
ret = GetWindowText(hWnd, Titre_Fenetre, 255)
If Titre_Fenetre <> String(255, 0) Then
TitreFen = Trim(Titre_Fenetre)
List1.AddItem LCase(TitreFen)
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
For i = List1.ListCount - 1 To 0 Step -1
If List1.List(i) = List1.List(i - 1) Then List1.RemoveItem i
Next i
List1.Refresh
If voisListe = True Then Return
For i = 0 To List1.ListCount - 1
If nomFic = Mid(List1.List(i), 1, Len(nomFic)) Then Return
Next i
dejaOuvert = False
Return
End Sub


Sub affiche()
Dim hWnd As Long
Dim Titre_Fenetre As String
Dim TitreFen As String
Dim ret As Long
List1.Clear
hWnd = GetDesktopWindow()
hWnd = GetWindow(hWnd, GW_CHILD)
Do While (Not IsNull(hWnd)) And (hWnd <> 0)
Titre_Fenetre = String(255, 0)
ret = GetWindowText(hWnd, Titre_Fenetre, 255)
If Titre_Fenetre <> String(255, 0) Then
TitreFen = Titre_Fenetre
List1.AddItem LCase(Trim(TitreFen))
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop
For i = List1.ListCount - 1 To 0 Step -1
If List1.List(i) = List1.List(i - 1) Then List1.RemoveItem i
Next i
List1.Refresh
End Sub


Sub Form_Unload(Cancel As Integer)
Dim RC As Long
Dim hProcess As Long
Dim present(5) As Boolean
Dim nbPresent As Byte
Dim liste1 As String
Dim m As String
Dim s
Dim r As Long
'
Cancel = 0
Call affiche
For i = 1 To 5
present(i) = False
Next i
nbPresent = 0
For i = 0 To List1.ListCount - 1
For j = 1 To 5
liste1 = Trim(List1.List(i))
If fic(j) = liste1 Then
present(j) = True
nbPresent = nbPresent + 1
Exit For
End If
Next j
Next i
'
If nbPresent < 1 Then GoTo ferme
s = vbLf
m = "Attention "
If nbPresent = 1 Then m = m & "un logiciel est ouvert : " & s & s
If nbPresent > 1 Then m = m & "des logiciels sont ouverts : " & s & s
m = m & "Pour des raison de sécurité de données nous vous recommandons :
" & s
If nbPresent = 1 Then m = m & "De fermer le logiciel ouvert depui
celui-ci : " & s & s
If nbPresent > 1 Then m = m & "De fermer les logiciels ouverts depuis
ceux-ci : " & s & s
For i = 1 To 5
If present(i) = True Then m = m & "- " & UCase(fic(i)) & " " & s
Next i
m = m & s
m = m & "Voulez vous forcer la fermeture (déconseillé) " & s
s = MsgBox(m, vbQuestion + vbYesNo + vbDefaultButton2)
If s <> vbYes Then
Cancel = -1
Exit Sub
End If
'
ferme:
For i = 1 To 5
If processus(i) <> 0 Then
hProcess = OpenProcess(PROCESS_TERMINATE, -1&, processus(i))
RC = TerminateProcess(hProcess, 0&)
RC = CloseHandle(hProcess)
End If
Next i
If nbPresent > 0 Then
DoEvents
Sleep 1000
End If
'
If WindowState <> 1 Then r = AnimateWindow(Me.hWnd, AW_DURATION_DEFAULT,
AW_BLEND Or AW_HIDE)
'
Reset
End
End Sub


---fin de code---

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Driss HANIB" a écrit dans le message de
news:
Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un
msgBox puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger
(agrandir si réduite) ou/et mettre en avant par dessus tous les autres
prog chargés (OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut
y avoir des feuilels filles (qui portent toutes un nom)

merci d'avance

Driss




Avatar
Jacques93
Bonjour Driss HANIB,
Driss HANIB a écrit :
Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un msgBox
puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger (agrandir
si réduite) ou/et mettre en avant par dessus tous les autres prog chargés
(OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut y
avoir des feuilels filles (qui portent toutes un nom)




Ce qu'il faut, c'est rechercher la fenêtre mère ("ThunderRT6MDIForm")
Je le fait ici dans un module, en déclarant la procédure 'Main' comme
objet de démarrage dans les propriétés du projet :

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function IsIconic Lib "user32" _
(ByVal hWnd As Long) As Long

Private Const SW_SHOW = &H5
Private Const SW_RESTORE = &H9
Private Declare Function ShowWindow Lib "user32" _
(ByVal hWnd As Long, _
ByVal nCmdShow As Long) As Long

Public Sub Main()
Dim WndName As String
Dim hWnd As Long, lResult As Long

WndName = "MDIForm1" ' à adapter
If App.PrevInstance Then
hWnd = FindWindow("ThunderRT6MDIForm", WndName)
On Error Resume Next
Err.Clear
AppActivate WndName
If Err.Number <> 0 Then
' Restaure / reactive la fenetre
If IsIconic(hWnd) Then
lResult = ShowWindow(hWnd, SW_RESTORE)
Else
lResult = ShowWindow(hWnd, SW_SHOW)
End If
End
End If
Else
MDIForm1.Show
End If
End Sub


--

Cordialement,

Jacques.
Avatar
Jacques93
Jacques93 a écrit :

[...]
AppActivate WndName
If Err.Number <> 0 Then



Oupsss ..., lire :

If Err.Number = 0 Then



--

Cordialement,

Jacques.
Avatar
Jacques93
Bonjour LE TROLL ,

LE TROLL a écrit :
Bonjour Driss,

Je viens de programmer sur ce principe, mais je dois dire que je ne
sis pas toujours ce que je fais avec les Zapis, le principal est que ça
marche, en fait je donne un dans une variable(i) qui aura le nom du
processus, et je range le processus dans une autre variables(i), ainsi
quand (command1_click) on demande une ouverture (là ce sont des
programmes, mais c'est pareil pour les feuilles), et bien ça va voir
dans la liste, et si le processus est déjà ouvert c'est refusé, et
sinon, quand on ferme, en réactualisant la liste à la prochaine demande
ça permet de savoir ce qui a été fermé. Il y a peut des des api en trop,
tu verras, car c'est un programme qui appelle d'autres programmes, alors
j'ai mis toutes les api de ces programmes afin qu'elles soient
distribués sans que je m'en préoccupe, voici le code :
---début de code---





Ben non, les programmes, les processus, et les fenêtres ça ne fonctionne
pas de la même manière, et surtout : pas avec les mêmes Zapis.

Où est il question de fenêtre MDI dans ton code ???

--

Cordialement,

Jacques.
Avatar
Driss HANIB
Bonjour Jacques,

merci pour ton morceau de code.
Je l'essaie tout de suite.

Question : est ce que cela ne foncitonne que compilé ?

Driss

"Jacques93" a écrit dans le message de news:
%
Bonjour Driss HANIB,
Driss HANIB a écrit :
Bonjour,

j'ai fait un programme sous forme de MDI Parent qui vérifie avant de se
lancer qu'il n'y a pas déjà une instance déjà ouverte.
J'uilise pour cela App.Previnstance

Actullement si il y a déjà une instance : la nouvelle informa par un
msgBox puis se referme.

je voudrai éventuellement pouvoir activer l'instance déjà charger
(agrandir si réduite) ou/et mettre en avant par dessus tous les autres
prog chargés (OE, Firfox Word..)

Comment faire cela, tout en sachant que comme c'est une MDI Form, il peut
y avoir des feuilels filles (qui portent toutes un nom)




Ce qu'il faut, c'est rechercher la fenêtre mère ("ThunderRT6MDIForm")
Je le fait ici dans un module, en déclarant la procédure 'Main' comme
objet de démarrage dans les propriétés du projet :

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function IsIconic Lib "user32" _
(ByVal hWnd As Long) As Long

Private Const SW_SHOW = &H5
Private Const SW_RESTORE = &H9
Private Declare Function ShowWindow Lib "user32" _
(ByVal hWnd As Long, _
ByVal nCmdShow As Long) As Long

Public Sub Main()
Dim WndName As String
Dim hWnd As Long, lResult As Long

WndName = "MDIForm1" ' à adapter
If App.PrevInstance Then
hWnd = FindWindow("ThunderRT6MDIForm", WndName)
On Error Resume Next
Err.Clear
AppActivate WndName
If Err.Number <> 0 Then
' Restaure / reactive la fenetre
If IsIconic(hWnd) Then
lResult = ShowWindow(hWnd, SW_RESTORE)
Else
lResult = ShowWindow(hWnd, SW_SHOW)
End If
End
End If
Else
MDIForm1.Show
End If
End Sub


--

Cordialement,

Jacques.
Avatar
Driss HANIB
Salut jacques,

je viens de tester ton morceau de programme.
Effectivement il de démarre pas de deuxième programme,

mais je n'ai pas d'activation ni de mise au premier plan du progeramme
précédent.

j'ai rajouté égalemement, la commande End dasns "if previnstance", sinon le
prgramme ne se décharge pas.

Driss

je vais voir pas à pas s'il voit et trouve le bonn handle
(mais je vais chercher une version compilée)


Driss
"Jacques93" a écrit dans le message de news:
e1%
Jacques93 a écrit :

[...]
AppActivate WndName
If Err.Number <> 0 Then



Oupsss ..., lire :

If Err.Number = 0 Then



--

Cordialement,

Jacques.
Avatar
Driss HANIB
Salut jacques

apparemment lorsque je fais hWnd = FindWindow("ThunderRT6MDIForm", WndName)

hWnd reste à 0

Driss

"Jacques93" a écrit dans le message de news:
e1%
Jacques93 a écrit :

[...]
AppActivate WndName
If Err.Number <> 0 Then



Oupsss ..., lire :

If Err.Number = 0 Then



--

Cordialement,

Jacques.
Avatar
Jacques93
Driss HANIB a écrit :
Bonjour Jacques,

merci pour ton morceau de code.
Je l'essaie tout de suite.

Question : est ce que cela ne foncitonne que compilé ?




Oui

--

Cordialement,

Jacques.
1 2