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 ![[:zion] [:zion]](https://forum-images.hardware.fr/images/perso/zion.gif)
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 ?
 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  | 
 
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 ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif)
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
 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