Arrêter le Processus "Explorer" [Résolu]

Signaler
Messages postés
22
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2010
-
draluorg
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
-
Mon but est de terminer le Processus "EXPLORER".


En faisant Ctrl-Alt-Del je lance le Gestionnaire de tâches de windows, puis dans l'onglet


Processus je recherche Explorer puis je fais terminer.


Cela me permet de faire tourner un petit EAO sans clavier et utilisé seulement avec la


souris en évitant que les élèves ne trifouillent et n'aient la main sur l'ordinateur.


Je voudrais faire cette opération automatiquement en lançant mon petit programme.


J'ai recherché avec la visionneuse d'api et ai trouvé :


Declare Function TerminateProcess lib "kernel32" Alias "TerminateProcess"(ByVal hProcess As


Long, ByVal uExitCode As Long)As Long


mais je ne sais pas comment faire pour l'utiliser....


Peut-être existe-t-il un autre moyen ?


Merci de votre aide.

5 réponses

Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Wai c'est ce que je craignait enfait l'explorer redemarre automatiquement sauf si il est coupe via le gestionnaire de tache...
Il faut que tu modifie la valeur AutoRestartShell dans :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Affecte lui la valeur 0 (1 par defaut) puis normalement ca devrait marcher...

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 198 internautes nous ont dit merci ce mois-ci

Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Salut,

Eh il te suffi de coller ce code dans un module et puis d'ou tu veux tu fais
KillProcessus "Explorer.exe"


<OL>
<LI>
Option
Explicit

<LI>
Private
Declare
Function
OpenProcess Lib <VAR>"kernel32"</VAR> (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
<LI>
Private
Declare
Function
CloseHandle Lib <VAR>"kernel32"</VAR> (ByVal hObject As Long) As Long
<LI>
Private
Declare
Function
TerminateProcess Lib <VAR>"kernel32"</VAR> (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
<LI>
Private
Declare
Function
GetWindowThreadProcessId Lib <VAR>"user32"</VAR> (ByVal hwnd As Long, lpdwProcessId As Long) As Long
<LI>
Private
Declare
Function
AdjustTokenPrivileges Lib <VAR>"advapi32.dll"</VAR> (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
<LI>
Private
Declare
Function
OpenProcessToken Lib <VAR>"advapi32.dll"</VAR> (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
<LI>
Private
Declare
Function
LookupPrivilegeValue Lib <VAR>"advapi32.dll"</VAR> Alias <VAR>"LookupPrivilegeValueA"</VAR> (ByVal lpSystemName As
String
, ByVal lpName As
String
, lpLuid As LUID) As Long
<LI>
Private
Declare
Function
GetCurrentProcess Lib <VAR>"kernel32"</VAR> () As Long
<LI>
Declare
Function
ProcessFirst Lib <VAR>"kernel32"</VAR> Alias <VAR>"Process32First"</VAR> (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
<LI>
Declare
Function
ProcessNext Lib <VAR>"kernel32"</VAR> Alias <VAR>"Process32Next"</VAR> (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
<LI>
Declare
Function
CreateToolhelpSnapshot Lib <VAR>"kernel32"</VAR> Alias <VAR>"CreateToolhelp32Snapshot"</VAR> (ByVal lFlags As Long, lProcessID As Long) As Long
<LI>
<LI>
Private
Type
LUID
<LI>LowPart As Long
<LI>HighPart As Long
<LI>
End
Type

<LI>
<LI>
Private
Type
LUID_AND_ATTRIBUTES
<LI>pLuid As LUID
<LI>Attributes As Long
<LI>
End
Type

<LI>
<LI>
Private
Type
TOKEN_PRIVILEGES
<LI>PrivilegeCount As Long
<LI>TheLuid As LUID
<LI>Attributes As Long
<LI>
End
Type

<LI>
<LI>
<LI>
Public
Const
MAX_PATH As Integer = 260
<LI>
Public
Const
TH32CS_SNAPPROCESS As Long = 2&
<LI>
<LI>
Type
PROCESSENTRY32
<LI> dwSize As Long
<LI> cntUsage As Long
<LI> th32ProcessID As Long
<LI> th32DefaultHeapID As Long
<LI> th32ModuleID As Long
<LI> cntThreads As Long
<LI> th32ParentProcessID As Long
<LI> pcPriClassBase As Long
<LI> dwFlags As Long
<LI> szexeFile As
String
* MAX_PATH
<LI>
End
Type

<LI>
<LI>
<LI>
Declare
Function
FindWindow Lib <VAR>"user32"</VAR> Alias <VAR>"FindWindowA"</VAR> (ByVal lpClassName As
String
, ByVal lpWindowName As
String
) As Long
<LI>
<LI>
Function
ProcessTerminate(Optional lProcessID As Long, Optional lHwndWindow As Long) As Boolean
<LI>
Dim
lhwndProcess As Long
<LI>
Dim
lExitCode As Long
<LI>
Dim
lRetVal As Long
<LI>
Dim
lhThisProc As Long
<LI>
Dim
lhTokenHandle As Long
<LI>
Dim
tLuid As LUID
<LI>
Dim
tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES
<LI>
Dim
lBufferNeeded As Long
<LI>
<LI>
Const
PROCESS_ALL_ACCESS &H1F0FFF, PROCESS_TERMINAT &H1
<LI>
Const
ANYSIZE_ARRAY 1, TOKEN_ADJUST_PRIVILEGES &H20
<LI>
Const
TOKEN_QUERY &H8, SE_DEBUG_NAME As
String
<VAR>"SeDebugPrivilege"</VAR>
<LI>
Const
SE_PRIVILEGE_ENABLED = &H2
<LI>
<LI>
On
Error
Resume
Next

<LI>
If
lHwndWindow
Then

<LI><SAMP>'Get the process ID from the window handle</SAMP>
<LI>lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID)
<LI>
End
If

<LI>
<LI>
If
lProcessID
Then

<LI><SAMP>'Give Kill permissions to this process</SAMP>
<LI>lhThisProc = GetCurrentProcess
<LI>
<LI>OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle
<LI>LookupPrivilegeValue <VAR>""</VAR>, SE_DEBUG_NAME, tLuid
<LI><SAMP>'Set the number of privileges to be change</SAMP>
<LI>tTokenPriv.PrivilegeCount = 1
<LI>tTokenPriv.TheLuid = tLuid
<LI>tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
<LI><SAMP>'Enable the kill privilege in the access token of this process</SAMP>
<LI>AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv,
Len
(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
<LI>
<LI><SAMP>'Open the process to kill</SAMP>
<LI>lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
<LI>
<LI>
If
lhwndProcess
Then

<LI><SAMP>'Obtained process handle, kill the process</SAMP>
<LI>ProcessTerminate =
CBool
(TerminateProcess(lhwndProcess, lExitCode))
<LI>
Call
CloseHandle(lhwndProcess)
<LI>
End
If

<LI>
End
If

<LI>
On
Error
GoTo
0
<LI>
End
Function

<LI>
<LI>
Public
Function
KillProcessus(nom_process) As
String

<LI>
Dim
i As Integer
<LI>
Dim
hSnapshot As Long
<LI>
Dim
uProcess As PROCESSENTRY32
<LI>
Dim
r As Long
<LI>
Dim
nom(1 To 100)
<LI>
Dim
num(1 To 100)
<LI>
Dim
nr As Integer
<LI>nr = 0
<LI>hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
<LI>
If
hSnapshot = 0
Then
Exit
Function

<LI>uProcess.dwSize =
Len
(uProcess)
<LI>r = ProcessFirst(hSnapshot, uProcess)
<LI>
Do
While
r
<LI>nr = nr + 1
<LI>nom(nr) = uProcess.szexeFile
<LI>num(nr) = uProcess.th32ProcessID
<LI>r = ProcessNext(hSnapshot, uProcess)
<LI>Loop
<LI>
For
i = 1 To nr
<LI>
If
InStr
(
UCase
(nom(i)),
UCase
(nom_process)) <> 0
Then

<LI>ProcessTerminate (num(i))
<LI>
Exit
For

<LI>
End
If

<LI>
Next
i
<LI>
End
Function
</LI></OL>


Code depose par pcpunch
@+

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
Messages postés
22
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2010

Je te remercie pour ta réponse mais lorsque j'exécute ton code la fenetre explorer disparait mais la barre de tâche est toujours présente il suffit de cliquer sur démarre et j'ai la main sur tout....
Par contre, manuellement lorsque je lance le gestionnaire des tâches et que je fais terminer le processus sur Explorer.exe, j'obtiens ce que je recherche c'est à dire plus de barre de tâche, même la touche windows est inactive. Comment obtenir le même résultat avec du code ??? ou alors qu'aurais-je oublié ???

@+
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Re,

Humm a mon avis tu devais avoir au moin 2 processus explorer.exe lorsque tu as essaye... Verifie...

Par contre tu risque de te retrouver devant un autre probleme, si l'explorer est configure pour redemarrer automatiquement... si c'est le cas, je t'expliquerai comment faire.

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
Messages postés
22
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2010

Je laisse la fenêtre du gestionnaire. Je vérifie qu'il y a qu'un seul explorer.exe. Je lance ton code et je vois qu'il s'efface puis réapparait au bout de 2 secondes ???