Scusate per il titolo ma non sapevo come inquadrare bene il problema in una riga.
Vado a spiegare
Devo aspettare la chiusura di varie applicazioni, lo faccio così..
Contenuto del modulo
codice:
Option Explicit
Private Type STARTUPINFO
cb As Long
lpReserved As Long
lpDesktop As Long
lpTitle As Long
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const WAIT_TIMEOUT As Long = 258&
Private Const WAIT_FAILED As Long = &HFFFFFFFF
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const STARTF_USESHOWWINDOW As Long = &H1
Private Const STARTF_USESIZE As Long = &H2
Private Const STARTF_USEPOSITION As Long = &H4
Private Const STARTF_USECOUNTCHARS As Long = &H8
Private Const STARTF_USEFILLATTRIBUTE As Long = &H10
Private Const STARTF_RUNFULLSCREEN As Long = &H20
Private Const STARTF_FORCEONFEEDBACK As Long = &H40
Private Const STARTF_FORCEOFFFEEDBACK As Long = &H80
Private Const STARTF_USESTDHANDLES As Long = &H100
Private Const STARTF_USEHOTKEY As Long = &H200
Public Function ShellSospensiva(ByVal CommandLine As String, ByVal Directory As String, ByVal WindowStyle As VbAppWinStyle, ByVal WaitTime As Long) As Long
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
With Start
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = WindowStyle
.cb = Len(Start)
End With
Call CreateProcess(0, CommandLine, 0, 0, 0, NORMAL_PRIORITY_CLASS, 0, Directory, Start, proc)
If proc.hProcess <> 0 Then
ShellSospensiva = WaitForSingleObject(proc.hProcess, WaitTime)
Call CloseHandle(proc.hProcess)
Else
ShellSospensiva = WAIT_FAILED
End If
End Function
il codice per una applicazione il cui percorso è in txtProcess.Text è ad esempio questa:
codice:
Private Sub cmdAvvia_Click()
Select Case ShellSospensiva(txtProcesso.Text, CurDir$, vbNormalFocus, CLng(txtAttesa.Text))
Case 0: MsgBox "Esecuzione completata con esito positivo", vbInformation
Case WAIT_TIMEOUT: MsgBox "Supero del tempo massimo di attesa", vbExclamation
Case Else: MsgBox "Si è verificato un errore", vbCritical
End Select
Il mio problema è: come faccio ad utilizzare sendkeys per inviare tasti a queste applicazioni?
Grazie