Come posso comandare tramite VB la chiusura di un'applicazione per esempio notepad?
Come posso comandare tramite VB la chiusura di un'applicazione per esempio notepad?
nn so dirti esattamente quali ma cmq devi usare delle api
prima devi trovare l'handle (l'identificatore) del programma (e questo con le api (se invece l'hai aperto te con Shell basta che prendi l'handle che ti da quando lo lanci) e con un altra api poi lo chiudi
volevo smeplicemente farti luce, quali siano le api ora nn te lo so dire am con una ricerca su internet le trovi (prova a guardare su www.programmazione.it)
byez
Il Ticino è biancoblù
DVDS delegato ufficiale
Questo discorso vale solo se sei tu a lanciare l'applicativo che vuoi successivamente chiudere...Originariamente inviato da Miky-SilentBoB
Come posso comandare tramite VB la chiusura di un'applicazione per esempio notepad?
Quando lanci l'applicativo lancialo così:
Ti metto tutto il codice...
__________________________________________________ _________________
Option Explicit
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 Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function IsWindow Lib "user32" (ByVal hwnd 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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) 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
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const SYNCHRONIZE = &H100000
Public Const WAIT_FAILED = -1& 'Error on call
Public Const WAIT_OBJECT_0 = 0 'Normal completion
Public Const WAIT_ABANDONED = &H80& '
Public Const WAIT_TIMEOUT = &H102& 'Timeout period elapsed
Public Const IGNORE = 0 'Ignore signal
Public Const INFINITE = -1& 'Infinite timeout
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
Private Const WM_CLOSE = &H10
Private Const GW_HWNDNEXT = 2
Private Const GW_OWNER = 4
__________________________________________________ _________________
Public Function ShellAndWait(ByVal JobToDo As String, Optional ExecMode, Optional TimeOut) As Long
Dim ProcessID As Long
Dim hProcess As Long
Dim nRet As Long
Const fdwAccess = SYNCHRONIZE
If IsMissing(ExecMode) Then
ExecMode = vbMinimizedNoFocus
Else
If ExecMode < vbHide Or ExecMode > vbMinimizedNoFocus Then
ExecMode = vbMinimizedNoFocus
End If
End If
On Error Resume Next
ProcessID = Shell(JobToDo, CLng(ExecMode))
If Err Then
ShellAndWait = vbObjectError + Err.Number
Exit Function
End If
On Error GoTo 0
If IsMissing(TimeOut) Then
TimeOut = INFINITE
End If
hProcess = OpenProcess(fdwAccess, False, ProcessID)
nRet = WaitForSingleObject(hProcess, CLng(TimeOut))
Call CloseHandle(hProcess)
Select Case nRet
Case WAIT_TIMEOUT: Debug.Print "Timed out!"
Case WAIT_OBJECT_0: Debug.Print "Normal completion."
Case WAIT_ABANDONED: Debug.Print "Wait Abandoned!"
Case WAIT_FAILED: Debug.Print "Wait Error:"; Err.LastDllError
End Select
ShellAndWait = nRet
End Function
__________________________________________________ _________________
Public Function ShellAndLoop(ByVal JobToDo As String, Optional ExecMode) As Long
Dim ProcessID As Long
Dim hProcess As Long
Dim nRet As Long
Const fdwAccess = PROCESS_QUERY_INFORMATION
If IsMissing(ExecMode) Then
ExecMode = vbMinimizedNoFocus
Else
If ExecMode < vbHide Or ExecMode > vbMinimizedNoFocus Then
ExecMode = vbMinimizedNoFocus
End If
End If
On Error Resume Next
ProcessID = Shell(JobToDo, CLng(ExecMode))
If Err Then
ShellAndLoop = vbObjectError + Err.Number
Exit Function
End If
On Error GoTo 0
hProcess = OpenProcess(fdwAccess, False, ProcessID)
Do
GetExitCodeProcess hProcess, nRet
DoEvents
Sleep 100
Loop While nRet = STILL_ACTIVE
Call CloseHandle(hProcess)
ShellAndLoop = nRet
End Function
__________________________________________________ _________________
Public Function ShellAndClose(ByVal JobToDo As String, Optional ExecMode) As Long
Dim ProcessID As Long
Dim PID As Long
Dim hProcess As Long
Dim hWndJob As Long
Dim nRet As Long
Dim TitleTmp As String
Const fdwAccess = PROCESS_QUERY_INFORMATION
If IsMissing(ExecMode) Then
ExecMode = vbMinimizedNoFocus
Else
If ExecMode < vbHide Or ExecMode > vbMinimizedNoFocus Then
ExecMode = vbMinimizedNoFocus
End If
End If
On Error Resume Next
ProcessID = Shell(JobToDo, CLng(ExecMode))
If Err Then
ShellAndClose = vbObjectError + Err.Number
Exit Function
End If
On Error GoTo 0
hWndJob = FindWindow(vbNullString, vbNullString)
Do Until hWndJob = 0
If GetParent(hWndJob) = 0 Then
Call GetWindowThreadProcessId(hWndJob, PID)
If PID = ProcessID Then Exit Do
End If
hWndJob = GetWindow(hWndJob, GW_HWNDNEXT)
Loop
hProcess = OpenProcess(fdwAccess, False, ProcessID)
Do
TitleTmp = Space(256)
nRet = GetWindowText(hWndJob, TitleTmp, Len(TitleTmp))
If nRet Then
TitleTmp = UCase(Left(TitleTmp, nRet))
If InStr(TitleTmp, "FINISHED") = 1 Then
Call SendMessage(hWndJob, WM_CLOSE, 0, 0)
End If
End If
GetExitCodeProcess hProcess, nRet
DoEvents
Sleep 100
Loop While nRet = STILL_ACTIVE
Call CloseHandle(hProcess)
ShellAndClose = nRet
End Function
__________________________________________________ _________________
Public Function hWndShell(ByVal JobToDo As String, Optional ExecMode) As Long
Dim ProcessID As Long
Dim PID As Long
Dim hProcess As Long
Dim hWndJob As Long
If IsMissing(ExecMode) Then
ExecMode = vbMinimizedNoFocus
Else
If ExecMode < vbHide Or ExecMode > vbMinimizedNoFocus Then
ExecMode = vbMinimizedNoFocus
End If
End If
On Error Resume Next
ProcessID = Shell(JobToDo, CLng(ExecMode))
If Err Then
hWndShell = 0
Exit Function
End If
On Error GoTo 0
hWndJob = FindWindow(vbNullString, vbNullString)
Do While hWndJob <> 0
If GetParent(hWndJob) = 0 Then
Call GetWindowThreadProcessId(hWndJob, PID)
If PID = ProcessID Then
hWndShell = hWndJob
Exit Do
End If
End If
hWndJob = GetWindow(hWndJob, GW_HWNDNEXT)
Loop
End Function
Ciao
Diego
Son del Canavese..come tanti qui
Ho risposto a questa domanda tempo fa. Ti rimando al topic.
Clicca QUI
Ciao
Cerco ombrello vecchio, nuovo, moderno o antidiluviano; purché protegga da una pioggia che vien giù come Dio la manda. Fate presto che ho l’acqua alla gola. (Noè)
C# programming and other stuffs