Accueil > > > SUSPENDRE/GELER UN PROCESSUS/UN THREAD
SUSPENDRE/GELER UN PROCESSUS/UN THREAD
Information sur la source
Description
Depuis le temps que je cherchais je finissais par penser que ça n'était pas possible, mais si mais si. J'ai trouvé ces fonctions sur le blog d'EBArtSoft car il faisait un pti tuto bien interessant sur l'injection de code... Donc merci EB pour m'avoir (involontairement) révélé l'existence de ces deux magnifiques api. Ce code permet donc de geler / dégeler un thread. Pour geler un processus, il faut bien sur geler tous les threads du processus : donc je vous ai mis une fonction qui permet de récupérer la liste des threads d'un processus, il n'y a plus qu'à les geler. Dans le code que je vous met, on précise le nom d'une fenetre et à partir de ça on retrouve le thread associé et on le gèle. Comme ça on peut voir l'effet immédiatement, j'ai mis l'exemple avec wordpad.
Source
- Je vous met ici juste le code qui gèle le thread pour bien que vous voyez la simplicité de la chose :
-
- ' Retrouver une fenetre à partir de son titre
- Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- ' Retrouver le thread associé à la fenêtre
- Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
- ' Suspend un thread
- Public Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
- ' Reprend le thread arreté
- Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
- ' Accéder au thread
- Public Declare Function OpenThread Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInherit As Long, ByVal dwThreadId As Long) As Long
-
- Public Const THREAD_ALL_ACCESS = &H1F03FF
-
- ' Suspendre un thread
- Public Function mtSuspendThread(ByVal ThreadID As Long)
- Dim hThread As Long
- ' Renvoie le handle du thread "ouvert" (pour agir dessus)
- hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadID)
- ' Suspend le thread
- SuspendThread hThread
- ' Ferme le handle
- CloseHandle hThread
- End Function
-
- ' Reprendre un thread (qui est suspendu)
- Public Function mtResumeThread(ByVal ThreadID As Long)
- Dim hThread As Long
- ' Renvoie le handle du thread "ouvert" (pour agir dessus)
- hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadID)
- ' Reprend le thread
- ResumeThread hThread
- ' Ferme le handle
- CloseHandle hThread
- End Function
-
-
-
- ' Extra : si vous voulez geler un processus, voici une fonction pour récupérer la liste des threads d'un processus. Il n'y a plus qu'à tous les geler
- Public Sub mtGetThreadListFromProcess(ByVal ProcessID As Long, ByRef tabThreadID() As Long, ByRef Compteur As Long)
- Dim hSnapshot As Long
- Dim Thread As THREADENTRY32
- ReDim tabThreadID(0) As Long
- Compteur = 0
- ' On crée une capture des threads du système
- hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, ProcessID)
- Thread.dwSize = Len(Thread)
- ' On prend le premier
- If Thread32First(hSnapshot, Thread) Then
- Thread.dwSize = Len(Thread)
- ' On parcourt tous les threads existants
- Do
- ' Si le thread a bien processId pour processus parent, on le liste
- If Thread.th32OwnerProcessID = ProcessID Then
- tabThreadID(Compteur) = Thread.th32ThreadID
- Compteur = Compteur + 1
- ReDim Preserve tabThreadID(Compteur) As Long
- End If
- Loop While Thread32Next(hSnapshot, Thread)
- End If
- CloseHandle hSnapshot
- End Sub
Je vous met ici juste le code qui gèle le thread pour bien que vous voyez la simplicité de la chose :
' Retrouver une fenetre à partir de son titre
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
' Retrouver le thread associé à la fenêtre
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
' Suspend un thread
Public Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
' Reprend le thread arreté
Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
' Accéder au thread
Public Declare Function OpenThread Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInherit As Long, ByVal dwThreadId As Long) As Long
Public Const THREAD_ALL_ACCESS = &H1F03FF
' Suspendre un thread
Public Function mtSuspendThread(ByVal ThreadID As Long)
Dim hThread As Long
' Renvoie le handle du thread "ouvert" (pour agir dessus)
hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadID)
' Suspend le thread
SuspendThread hThread
' Ferme le handle
CloseHandle hThread
End Function
' Reprendre un thread (qui est suspendu)
Public Function mtResumeThread(ByVal ThreadID As Long)
Dim hThread As Long
' Renvoie le handle du thread "ouvert" (pour agir dessus)
hThread = OpenThread(THREAD_ALL_ACCESS, 0, ThreadID)
' Reprend le thread
ResumeThread hThread
' Ferme le handle
CloseHandle hThread
End Function
' Extra : si vous voulez geler un processus, voici une fonction pour récupérer la liste des threads d'un processus. Il n'y a plus qu'à tous les geler
Public Sub mtGetThreadListFromProcess(ByVal ProcessID As Long, ByRef tabThreadID() As Long, ByRef Compteur As Long)
Dim hSnapshot As Long
Dim Thread As THREADENTRY32
ReDim tabThreadID(0) As Long
Compteur = 0
' On crée une capture des threads du système
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, ProcessID)
Thread.dwSize = Len(Thread)
' On prend le premier
If Thread32First(hSnapshot, Thread) Then
Thread.dwSize = Len(Thread)
' On parcourt tous les threads existants
Do
' Si le thread a bien processId pour processus parent, on le liste
If Thread.th32OwnerProcessID = ProcessID Then
tabThreadID(Compteur) = Thread.th32ThreadID
Compteur = Compteur + 1
ReDim Preserve tabThreadID(Compteur) As Long
End If
Loop While Thread32Next(hSnapshot, Thread)
End If
CloseHandle hSnapshot
End Sub
Conclusion
Et enfin je souhaite utiliser ces fonctions pour geler à peut près tout le système pour faire une sorte de Ctrl Alt Suppr comme dans win98 ou tout était bloqué, mais sous XP... Pensez vous que c'est raisonnable (lol) et y'a t'il des contre-indications docteur...
Si vous avez des réponses ou commentaires, exprimez vous En espérant que ça vous serve, comme d'ab MadMatt
Historique
- 22 novembre 2005 18:27:08 :
- Ajout des mots clés
- 10 juillet 2006 22:22:30 :
- Ajout de la fonction qui liste les threads d'un processus
- 10 juillet 2006 22:26:10 :
- ajout du mot clé "thread"
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pourcentage d'un processus thread ou process CPU [ par DavidT ]
Comme le gestionnaire de tache, il existe la possibilité de de visualiser sur un système NT la mémoire physique consommée par un process déterminé par
Geler le système comme dans win98 (Ctrl-Alt-Suppr) [ par MadM@tt ]
Bonjour a tousVoilà je cherche à faire la même chose que le gestionnaire des taches de win98, quand on le lance tous les processus sont bloqués et on
un thread en vbs ? est-ce possible ? [ par johann91 ]
Bonjour, Je souhaiterais savoir si il est possible de créer une sorte de thread en vbs, ou alors un processus qui tournerait en permanence. En e
SYNTHESE PROCESSUS, HANDLE, THREAD, (MODULE) & gestion des processus ?! [ par youkizouki ]
interrompre et relancer processus sous VBA [ par beadjam ]
bonjourJe fais comment pour faire une pause dans le système,c'est à dire que tout le programme en chargement ou en exécution soit "pauser" donc d'inte
Fermer un service proprement [ par florentp ]
Bonjour à tous,Je voudrai savoir comment on fait pour fermer proprement un Service. On fait comme pour un processus "normal" ou y a un autre moyen?En
kill de processus excel [ par jollyJumper ]
bonjour,je recherche une méthode vb pour tuer un processus Excel en coursen fait quand je quitte prématurément mon application vb alors qu'elle est en
Suspendre l'exécution d'un programme [ par CochonPerdu ]
Dans une feuille, je voudrais arrêter l'exécution du programme le temps d'en ouvrir une autre puis de la refermer.AutreFeuille.show'Exécution interrom
Processus qui "freeze" en plein traitements. [ par KSK ]
Bonjour,J'ai un gros problème avec un programme VB. C'est un programme qui fait divers traitements, et parmi ces traitements il y'a une fonction qui f
thread [ par SoniqExnihilo ]
juste une question : peut on faire des thread en VB ?et une deuxieme maintenant : si oui,où dois je regarder pour en savoir plus?MerciSoniq Exnihilo
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|