Comment arrêter un Process de Windows à partir de VB??? - VB/VBA/VBS - Programmation
Marsh Posté le 16-01-2003 à 14:33:19
beh tu peux utiliser les API en VB hein...
heureusement
Marsh Posté le 16-01-2003 à 14:44:53
un truc du genre :
const WM_CLOSE = &H10
Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Long) As Long
PostMessage(handle, WM_CLOSE, null, null)
Marsh Posté le 16-01-2003 à 14:45:18
Marsh Posté le 16-01-2003 à 14:59:00
C'est moche ya pas de biblio-link pour VB. Je m'en occupe?
Marsh Posté le 16-01-2003 à 15:07:01
drasche a écrit : C'est moche ya pas de biblio-link pour VB. Je m'en occupe? |
C une bonne id, j'y ai déjà pensé...
mais il y a pas ennormément de bon lien à part google pour VB et la msdn...
Moi je m'occupe déjà de celui de Delphi
Marsh Posté le 16-01-2003 à 15:41:22
bah je ferai une recherche pour l'occasion
ok c vendu je m'en occupe en rentrant!
Marsh Posté le 16-01-2003 à 15:43:18
drasche a écrit : bah je ferai une recherche pour l'occasion |
G déjà fait des recherches
Delphi C bien
Marsh Posté le 16-01-2003 à 17:43:30
jsuis pratiqument pret a parier que c'est excel.exe que tu veux faire planter hehe non ?
Marsh Posté le 16-01-2003 à 17:46:37
[SDF]Poire a écrit : |
oui jusque là je crois que c évident pour tout le monde
Marsh Posté le 16-01-2003 à 17:47:30
SkullX a écrit : jsuis pratiqument pret a parier que c'est excel.exe que tu veux faire planter hehe non ? |
multi spotted
Marsh Posté le 16-01-2003 à 17:48:09
'DANS TON PROJET VB
Public Function ProcessList()
'Va tuer le process Excel.exe seulement s'il est présent dans la liste des processus.
Dim hSnapshot As Long
Dim uProcess As PROCESSENTRY32
Dim r As Long
'On passe tous les processus actif sur la machine et si on trouve que celui de
'Excel est ouvert, c'est alors qu'on Termine l'application. Tous les autres processus
'resteront activés.
hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapshot = 0 Then Exit Function
uProcess.dwSize = Len(uProcess)
r = ProcessFirst(hSnapshot, uProcess)
Do While r
If Mid(uProcess.szexeFile, 1, 9) = "EXCEL.EXE" Then
'Procédure qui termine le processus.
ProcessTerminate (uProcess.th32ProcessID)
End If
'On passe au processus suivant.
r = ProcessNext(hSnapshot, uProcess)
Loop
End Function
'DANS UNE MODULE
'KILL PROCESSUS
Option Explicit
'Déclaration
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 TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
'Déclaration de Type.
Private Type LUID
LowPart As Long
HighPart As Long
End Type
'Déclaration de Type.
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
'Déclaration de Type.
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
'Constante
Public Const MAX_PATH As Integer = 260
'Constante
Public Const TH32CS_SNAPPROCESS As Long = 2&
'Type
Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szexeFile As String * MAX_PATH
End Type
'Fonction
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Fonction ProcessTerminate
Function ProcessTerminate(Optional lProcessID As Long, Optional lHwndWindow As Long) As Boolean
'Variables locales
Dim lhwndProcess As Long
Dim lExitCode As Long
Dim lRetVal As Long
Dim lhThisProc As Long
Dim lhTokenHandle As Long
Dim tLuid As LUID
Dim tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
'Constantes
Const PROCESS_ALL_ACCESS = &H1F0FFF, PROCESS_TERMINAT = &H1
Const ANYSIZE_ARRAY = 1, TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8, SE_DEBUG_NAME As String = "SeDebugPrivilege"
Const SE_PRIVILEGE_ENABLED = &H2
On Error Resume Next
If lHwndWindow Then
'On va cherche le process ID du window handle.
lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID)
End If
If lProcessID Then
'Donne la permission de tuer tous les processus.
lhThisProc = GetCurrentProcess
OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
'Set le nombre de privilèges a changer.
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
'Rend disponible le kill privilège dans l'accès token du processus.
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
'Ouvrir le processus a tuer.
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
If lhwndProcess Then
'Obtient handle, kill le processus choisis.
ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode))
Call CloseHandle(lhwndProcess)
End If
End If
On Error GoTo 0
End Function
Marsh Posté le 17-01-2003 à 09:59:25
Plus simple :
Call SendMessage(m_hWnd, WM_DESTROY, byval 0&, byval 0&)
Marsh Posté le 17-01-2003 à 10:05:17
WM_CLOSE C mieux
Marsh Posté le 17-01-2003 à 14:33:25
justement non, exemple : en envoyant WM_CLOSE, certains programmes (comme AOL), affiche un message comme quoi ca va fermer et il faut valider le plus souvent. Avec un WM_DESTROY, pas de pb ^_^
Marsh Posté le 17-01-2003 à 14:42:32
Oui mais C porc
Marsh Posté le 17-01-2003 à 14:57:20
[SDF]Poire a écrit : Oui mais C porc |
faut voir ton but, tu veux killer une application (auquel cas tu lui demandes pas son avis) ou tu lui demandes gentillement de bien vouloir se fermer? Si on veut killer une application, ben oui c porc mais on fait pas d'omelette sans casser d'oeufs
Marsh Posté le 17-01-2003 à 15:00:32
drasche a écrit : |
Et sous win98 à force t'as un jouli blue screen
Marsh Posté le 17-01-2003 à 15:05:11
[SDF]Poire a écrit : |
ouais mais 98 c un OS grand public
Marsh Posté le 17-01-2003 à 15:47:42
drasche a écrit : |
C un OS trés répendu en prod encore
d'ailleur là je suis sous win98
mais pas en prod en ingénieurie
Marsh Posté le 17-01-2003 à 17:02:47
le code que jai donné ocntionne pas sous 98 alors on s'en balance
y fonctionne sous 2000 et probablement XP
Marsh Posté le 21-06-2014 à 11:47:43
Slt SkullX,
j'ai essayé votre code pour terminer le processus de Excel et ça a bien marché! merce bcp à vous
Mais j'ai essayé le même code en modifiant EXCEL.EXE dans votre code en WINWORD.EXE ou autre pour terminer les autre processus autre que celle d'excel et ça n'a pas fonctioné!
Alors, j'ai besoin de votre aide comment faire pour terminer les autres processus!
Mrc d'avance et bonne continuation à vous!!
Marsh Posté le 16-01-2003 à 14:27:52
Es-ce que quelqu'un sait comment arrêter un process de Windows en code avec VB
Merci