sur une form(mdi) j'ouvre la calculatrice par mnuCalculatrice_Click()
par contre si on réduit celle-ci(barre de titre non visible) et qu'on
re-click sur mnuCalculatrice_Click()
sa ouvre une autre instance je lui ai donc rajouter
'If hWndApp <> 0 Then x = OpenIcon(hWndApp)'
pour ne pas re-ouvrir une autre instance de cette calculatrice et perdre le
résultat obtenu
sa fonctionne mais en cas de fermeture de la calculatrice comment
initialiser(hWndApp=0)
pour cette fois que sa ouvre bien une autre instance.
faut-il utiliser FindWindow ou y a t'il plus simple à faire...
jespere avoir bien expliquer le probleme ?
Joël
'
Private Sub mnuCalculatrice_Click()
On Error GoTo TraiteErreur
Dim x As Long
If hWndApp <> 0 Then ' hWndApp declarer dans form(Private hWndApp As
Long)
x = OpenIcon(hWndApp)
Exit Sub
End If
Screen.MousePointer = vbArrowHourglass
Dim hInst As Long
hInst = Shell(GetWindowsDir & "\Calc.exe", vbNormalFocus)
hWndApp = GetWinHandle(hInst)
SetParent hWndApp, Me.hWnd
Screen.MousePointer = vbDefault
Exit Sub
TraiteErreur:
Screen.MousePointer = vbDefault
MsgBox "La calculatrice est introuvable !!! Désolé...", vbCritical,
"Recherche Calculatrice Windows"
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques93
Bonjour Joël, Joël a écrit :
Bonjour a tous,
sur une form(mdi) j'ouvre la calculatrice par mnuCalculatrice_Click() par contre si on réduit celle-ci(barre de titre non visible) et qu'on re-click sur mnuCalculatrice_Click() sa ouvre une autre instance je lui ai donc rajouter 'If hWndApp <> 0 Then x = OpenIcon(hWndApp)' pour ne pas re-ouvrir une autre instance de cette calculatrice et perdre le résultat obtenu sa fonctionne mais en cas de fermeture de la calculatrice comment initialiser(hWndApp=0) pour cette fois que sa ouvre bien une autre instance. faut-il utiliser FindWindow ou y a t'il plus simple à faire... jespere avoir bien expliquer le probleme ?
Joël
A mon avis, il serait plus logique de rattacher la calculette à la zone MDI de ta fenêtre, et non pas à la fenêtre mère, ainsi on voit la calculatrice réduite, et on peut la réactiver par le menu, ou sa barre de titre. Par ailleurs sous W2K et XP, calc.exe se trouve par défaut dans %windir%System32, d'où l'ajout de la recherche dans system32 :
Dim hWndApp As Long Private Declare Function OpenIcon Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function GetParent Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function SetParent Lib "user32" _ (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) 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 IsIconic Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long
Private Sub mnuCalculatrice_Click() On Error GoTo TraiteErreur
Dim x As Long Dim hInst As Long Dim hWndMDI As Long
If IsIconic(hWndApp) <> 0 Then x = OpenIcon(hWndApp) Exit Sub End If
Screen.MousePointer = vbArrowHourglass On Error Resume Next hInst = Shell(GetWindowsDir & "Calc.exe", vbNormalFocus) If Err.Number <> 0 Then hInst = Shell(GetSystemWindowsDir & "Calc.exe", vbNormalFocus) End If On Error GoTo TraiteErreur If hInst = 0 Then Err.Raise 53 hWndApp = GetWinHandle(hInst) hWndMDI = FindWindowEx(Me.hwnd, 0&, "MDIClient", vbNullString) SetParent hWndApp, hWndMDI Screen.MousePointer = vbDefault Exit Sub TraiteErreur: Screen.MousePointer = vbDefault MsgBox "La calculatrice est introuvable !!! Désolé...", vbCritical, _ "Recherche Calculatrice Windows" End Sub
Private Function GetSystemWindowsDir() As String Dim s As String
s = Space(255) GetSystemDirectory s, Len(s) GetSystemWindowsDir = Left(s, InStr(s, Chr$(0)) - 1) End Function
-- Cordialement,
Jacques.
Bonjour Joël,
Joël a écrit :
Bonjour a tous,
sur une form(mdi) j'ouvre la calculatrice par mnuCalculatrice_Click()
par contre si on réduit celle-ci(barre de titre non visible) et qu'on
re-click sur mnuCalculatrice_Click()
sa ouvre une autre instance je lui ai donc rajouter
'If hWndApp <> 0 Then x = OpenIcon(hWndApp)'
pour ne pas re-ouvrir une autre instance de cette calculatrice et perdre le
résultat obtenu
sa fonctionne mais en cas de fermeture de la calculatrice comment
initialiser(hWndApp=0)
pour cette fois que sa ouvre bien une autre instance.
faut-il utiliser FindWindow ou y a t'il plus simple à faire...
jespere avoir bien expliquer le probleme ?
Joël
A mon avis, il serait plus logique de rattacher la calculette à la zone
MDI de ta fenêtre, et non pas à la fenêtre mère, ainsi on voit la
calculatrice réduite, et on peut la réactiver par le menu, ou sa barre
de titre. Par ailleurs sous W2K et XP, calc.exe se trouve par défaut
dans %windir%System32, d'où l'ajout de la recherche dans system32 :
Dim hWndApp As Long
Private Declare Function OpenIcon Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetParent Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, _
ByVal lpWindowName As String) 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 IsIconic Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias _
"GetSystemDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Sub mnuCalculatrice_Click()
On Error GoTo TraiteErreur
Dim x As Long
Dim hInst As Long
Dim hWndMDI As Long
If IsIconic(hWndApp) <> 0 Then
x = OpenIcon(hWndApp)
Exit Sub
End If
Screen.MousePointer = vbArrowHourglass
On Error Resume Next
hInst = Shell(GetWindowsDir & "Calc.exe", vbNormalFocus)
If Err.Number <> 0 Then
hInst = Shell(GetSystemWindowsDir & "Calc.exe", vbNormalFocus)
End If
On Error GoTo TraiteErreur
If hInst = 0 Then Err.Raise 53
hWndApp = GetWinHandle(hInst)
hWndMDI = FindWindowEx(Me.hwnd, 0&, "MDIClient", vbNullString)
SetParent hWndApp, hWndMDI
Screen.MousePointer = vbDefault
Exit Sub
TraiteErreur:
Screen.MousePointer = vbDefault
MsgBox "La calculatrice est introuvable !!! Désolé...", vbCritical, _
"Recherche Calculatrice Windows"
End Sub
Private Function GetSystemWindowsDir() As String
Dim s As String
s = Space(255)
GetSystemDirectory s, Len(s)
GetSystemWindowsDir = Left(s, InStr(s, Chr$(0)) - 1)
End Function
sur une form(mdi) j'ouvre la calculatrice par mnuCalculatrice_Click() par contre si on réduit celle-ci(barre de titre non visible) et qu'on re-click sur mnuCalculatrice_Click() sa ouvre une autre instance je lui ai donc rajouter 'If hWndApp <> 0 Then x = OpenIcon(hWndApp)' pour ne pas re-ouvrir une autre instance de cette calculatrice et perdre le résultat obtenu sa fonctionne mais en cas de fermeture de la calculatrice comment initialiser(hWndApp=0) pour cette fois que sa ouvre bien une autre instance. faut-il utiliser FindWindow ou y a t'il plus simple à faire... jespere avoir bien expliquer le probleme ?
Joël
A mon avis, il serait plus logique de rattacher la calculette à la zone MDI de ta fenêtre, et non pas à la fenêtre mère, ainsi on voit la calculatrice réduite, et on peut la réactiver par le menu, ou sa barre de titre. Par ailleurs sous W2K et XP, calc.exe se trouve par défaut dans %windir%System32, d'où l'ajout de la recherche dans system32 :
Dim hWndApp As Long Private Declare Function OpenIcon Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function GetParent Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function SetParent Lib "user32" _ (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) 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 IsIconic Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, _ ByVal nSize As Long) As Long
Private Sub mnuCalculatrice_Click() On Error GoTo TraiteErreur
Dim x As Long Dim hInst As Long Dim hWndMDI As Long
If IsIconic(hWndApp) <> 0 Then x = OpenIcon(hWndApp) Exit Sub End If
Screen.MousePointer = vbArrowHourglass On Error Resume Next hInst = Shell(GetWindowsDir & "Calc.exe", vbNormalFocus) If Err.Number <> 0 Then hInst = Shell(GetSystemWindowsDir & "Calc.exe", vbNormalFocus) End If On Error GoTo TraiteErreur If hInst = 0 Then Err.Raise 53 hWndApp = GetWinHandle(hInst) hWndMDI = FindWindowEx(Me.hwnd, 0&, "MDIClient", vbNullString) SetParent hWndApp, hWndMDI Screen.MousePointer = vbDefault Exit Sub TraiteErreur: Screen.MousePointer = vbDefault MsgBox "La calculatrice est introuvable !!! Désolé...", vbCritical, _ "Recherche Calculatrice Windows" End Sub
Private Function GetSystemWindowsDir() As String Dim s As String
s = Space(255) GetSystemDirectory s, Len(s) GetSystemWindowsDir = Left(s, InStr(s, Chr$(0)) - 1) End Function
-- Cordialement,
Jacques.
Jacques93
Jacques93 a écrit :
Bonjour Joël,
[...]
Et afin de ne pas laisser traîner d'instance invisible de la calculette quand on ferme la MDIForm (tu le fais peut être déjà) :
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 Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer) If hWndApp <> 0 Then SendMessage hWndApp, WM_CLOSE, 0&, 0& End If End Sub
-- Cordialement,
Jacques.
Jacques93 a écrit :
Bonjour Joël,
[...]
Et afin de ne pas laisser traîner d'instance invisible de la calculette
quand on ferme la MDIForm (tu le fais peut être déjà) :
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
Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer)
If hWndApp <> 0 Then
SendMessage hWndApp, WM_CLOSE, 0&, 0&
End If
End Sub
Et afin de ne pas laisser traîner d'instance invisible de la calculette quand on ferme la MDIForm (tu le fais peut être déjà) :
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 Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer) If hWndApp <> 0 Then SendMessage hWndApp, WM_CLOSE, 0&, 0& End If End Sub
-- Cordialement,
Jacques.
Joël
Bonsoir Jacques sa fonctionne parfaitement. merci pour ton aide Cordialement, Joël
"Jacques93" a écrit dans le message de news:
Jacques93 a écrit :
Bonjour Joël,
[...]
Et afin de ne pas laisser traîner d'instance invisible de la calculette quand on ferme la MDIForm (tu le fais peut être déjà) :
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 Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer) If hWndApp <> 0 Then SendMessage hWndApp, WM_CLOSE, 0&, 0& End If End Sub
-- Cordialement,
Jacques.
Bonsoir Jacques
sa fonctionne parfaitement.
merci pour ton aide
Cordialement,
Joël
"Jacques93" <jacques@Nospam> a écrit dans le message de news:
e89jZZ8bHHA.1148@TK2MSFTNGP02.phx.gbl...
Jacques93 a écrit :
Bonjour Joël,
[...]
Et afin de ne pas laisser traîner d'instance invisible de la calculette
quand on ferme la MDIForm (tu le fais peut être déjà) :
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
Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer)
If hWndApp <> 0 Then
SendMessage hWndApp, WM_CLOSE, 0&, 0&
End If
End Sub
Bonsoir Jacques sa fonctionne parfaitement. merci pour ton aide Cordialement, Joël
"Jacques93" a écrit dans le message de news:
Jacques93 a écrit :
Bonjour Joël,
[...]
Et afin de ne pas laisser traîner d'instance invisible de la calculette quand on ferme la MDIForm (tu le fais peut être déjà) :
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 Private Const WM_CLOSE = &H10
Private Sub MDIForm_Unload(Cancel As Integer) If hWndApp <> 0 Then SendMessage hWndApp, WM_CLOSE, 0&, 0& End If End Sub
-- Cordialement,
Jacques.
Jacques93
Joël a écrit :
Bonsoir Jacques sa fonctionne parfaitement. merci pour ton aide Cordialement, Joël
Merci du retour :-)
-- Cordialement,
Jacques.
Joël a écrit :
Bonsoir Jacques
sa fonctionne parfaitement.
merci pour ton aide
Cordialement,
Joël