PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 25 nov. 2005 à 23:57
re,
hWnd est le Handle.
exemple, nouveau projet, 2 Form.
au click sur le bouton de la 1ère, on passe au premier plan la Form2 par son handle.
à remplacer par celui de ton notepad
Option Explicit
'
Private Declare Function SetActiveWindow Lib "user32.dll" _
(ByVal hwnd As Long) As Long
'
'
Private Sub Form_Load()
Form2.Show
End Sub
'
'
Private Sub Command1_Click()
Call SetActiveWindow(Form2.hwnd)
End Sub
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 26 nov. 2005 à 12:42
j'peux pas faire beaucoup plus....
en tapant la ligne Shell, tu auras la proposition des paramètres, tel que vbMaximizedFocus par exemple.
si tu as besoin de plus d'infos, colle ici ton code et explique-toi plus clairement
Vous n’avez pas trouvé la réponse que vous recherchez ?
flegros
Messages postés14Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention20 février 2007 26 nov. 2005 à 12:30
Non pas exactement ...
Dans mon cas, mon wordpad est déja ouvert (et en arriere plan) et je veux l'activer pour écrire des infos dedans ... et meme pouvoir activer tel ou tel process à volonté.
flegros
Messages postés14Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention20 février 2007 26 nov. 2005 à 23:27
Le problème de la commande : Call Shell("notepad.exe", vbNormalFocus), dans mon cas
est que le notepad auquel je veux accéder est déja ouvert en arrière plan et je veux mettre le focus dessus afin
d'écrire du texte dedans , puis revenir sur mon vb.
si tu as en stock un bout de code qui fait cela, ça m'intéresse.
flegros
Messages postés14Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention20 février 2007 27 nov. 2005 à 01:58
J'ai beau chercher sur le site, je ne trouve pas comment ouvris les exe (notepad.exe) puis (calc.exe), sans les fermer, puis se repositionner sur le notepad.exe ouvert précedement ...
Voici le code mis en place (je voudrais à la fin retomber sur le premier notepad ouvert (avec le texte envoyé par le sendkeys : à ce niveau la aussi, j'ai quelques problèmes ) :
Public hProcess, nRet, Retour As Long
Const PROCESS_QUERY_INFORMATION = &H400
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Function WaitOnProgram(ByVal idProg As Long) As Long
Dim iExit As Long, hProg As Long
hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
GetExitCodeProcess hProg, iExit
Do While iExit = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProg, iExit
Loop
CloseHandle hProg
WaitOnProgram = iExit
End Function
Public Sub ShellWait(ByVal JobToDo As String)
Dim hProcess As Long, RetVal As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(JobToDo, vbMinimizedNoFocus))
Do
GetExitCodeProcess hProcess, RetVal
DoEvents
Sleep 100
Loop While RetVal = STILL_ACTIVE
End Sub
Private Sub Command1_Click()
Dim st As String
' Pour lancer le programme :
Retour = Shell("notepad.exe", 1)
SendKeys "a ecrire dans le notepad"
ret2 = Shell("calc.exe", 1)
' WaitOnProgram Retour
st = Text1.Text
' Form1.Text1.SetFocus
' Pour Fermer le programme :
hProcess = OpenProcess(fdwAccess, False, Retour)
'GetExitCodeProcess hProcess, nRet
'Call TerminateProcess(hProcess, nRet)
'Call CloseHandle(hProcess)
'''''
'On Error GoTo RunError:
'hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(sApplicationPathExe, vbNormalFocus))
'Do
'''Obtient le statut du process
'GetExitCodeProcess hProcess, RetVal
''petite pause pour laisser windows gérer les autres évenements
'DoEvents: Sleep 50
'''Loop jusqu'à ce que le process statut ne soit plus actif
'Loop While RetVal = STILL_ACTIVE
flegros
Messages postés14Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention20 février 2007 27 nov. 2005 à 12:05
Salut,
J'ai trouvé la fonction que je cherchais ...
C'est --> appactivate (name)
Par contre sais tu s'il est possible d'exécuter les lignes de manière synchrone ... (c'est à dire en attendant la fin d'une exécution avant d'en commencer une autre).
Mon problème est que je veux activer mon notepad, faire un sendKeys "test senkeys", puis revenir dans ma forme vb6. Actuellement, le sendkeys n'est pas écrit partout ...