Comment restaurer un prog déjà ouvert avec dbclick sur sont *.exe

ALEX001 - 27 août 2001 à 22:42
 mWaAtR - 3 sept. 2001 à 07:24
Bonjour à tous,

Comment restaurer un prog déjà ouvert avec dbclick sur sont *.exe

Je sais que pour détecter son ouverture ont utilise un code du genre: ->

If App.PrevInstance Then
'************************
'Je sais pas comment retaurer mon prog déjà ouvert ???
'************************
End If

Voilà merci à tous....
A voir également:

5 réponses

faut recuperer son hwnd et ensuite restaurer avec le handle de l'application. (je te dis tout de suite, je ne saurai pas le faire)
0
Hello
Une solution sans utiliser d'API est de créer un composant server ayant la même instance dans toutes les applications. Ce qui permet d'avoir des fonctions ou des évnements partagés entre des applics locale ou à travers le réseau.
0
bah c'est pas impossible, mais faudrait dire ca a celui qui a pose' la question ;-)
0
OK c'est super tous ca mais je sais toujours pas comment restaurer mon appli, si elle est deja ouverte et minimisé.

Est ce que vous avez des exemple perso ou sur VBFRANCE sinon pouvez vous mieux m'expliqué le fonctionnement avec des mots clé avec ou sans API...

Merci a tous ceux qui ont repondu a ce message et a ceux qui repondrons aux suivants.

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Essaye de voir ce que tu peux faire avec ça :

Crée un projet Exe qui contient :
1 Form
Name = wMain
Caption = wMain
Controle :
1 Label
Name = Label1
Caption = 0

1 Module
Name = HOOKFunction

Dans le code de la form tu met ça :
Option Explicit

Public Sub ReceiveMessage(ByVal Param As Long)
Label1.Caption = Trim(Val(Label1.Caption) + Param)
'Ici tu pourait mettre windowstate=vbnormal par exemple
End Sub

Private Sub Form_Load()
If App.PrevInstance Then
SendToOtherWnd 1
End
End If
Hook
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
UnHook
End Sub

-----------------------------------------------------------
Dans le code du module ça :

Option Explicit

Private Const GWL_WNDPROC = (-4)
Private Const WM_USER = &H400
Private Const WM_MYMESSAGE = WM_USER + &H32

Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'Ancienne procedure de wMain
Dim hOldProc As Long

Public Function Hook()
'Remplace la preocedure de wMain
hOldProc = SetWindowLong(wMain.hWnd, GWL_WNDPROC, AddressOf WndProc)
End Function

Public Function UnHook()
'Restore la preocedure de wMain
Call SetWindowLong(wMain.hWnd, GWL_WNDPROC, hOldProc)
End Function

Private Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'Nouvelle procedure
If uMsg = WM_MYMESSAGE Then
'Traitement du message personnalisé
wMain.ReceiveMessage wParam
WndProc = -1
Else
'Traitement par défaut
WndProc = CallWindowProc(hOldProc, hWnd, uMsg, wParam, lParam)
End If
End Function

Public Function SendToOtherWnd(Optional ByVal Param As Long = 0) As Boolean
'Supprime le nom de la form en cour pour pouvoir trouvé la form suivante
wMain.Caption = ""
'Cherche la fenêtre qui s'appelle wMain
Dim lWnd As Long
lWnd = FindWindowEx(0, 0, "ThunderRT6FormDC", "wMain")
'Envoi d'un message
'(Il est possible d'envoiyé du texte à l'aide d'un pointeur String
' placer dans le dernier argument de SendMessage)
SendToOtherWnd = CBool(SendMessage(lWnd, WM_MYMESSAGE, Param, 0))
End Function

-----------------------------------------------------------

Tu compile et tu lance le Exe plusieurs fois.
la première exécution lance le soft. Les exécutions suivantes envoie un message à la fenêtre existante qui incrémente un simple conteur et la deuxième instance et quittée.
0
Rejoignez-nous