begin process at 2008 07 19 08:54:08
1 212 721 membres
60 nouveaux aujourd'hui
14 165 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SUSPENDRE UN PROCESSUS DEPUIS SON PID


Information sur la source

Catégorie :Système Classé sous : processus, geler, suspendre, desactiver, pid Niveau : Débutant Date de création : 22/09/2006 Vu : 4 600

Note :
10 / 10 - par 4 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note


Description

Ce ptit bout de code montre comment suspendre directement un processus depuis son pid

Utilisation:

pour suspendre un process :

SuspendResumeProcess Pid, True

pour le relancer:

SuspendResumeProcess Pid, False

Source

  • Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  • Private Declare Function NtSuspendProcess Lib "Ntdll.dll" (ByVal hProc As Long) As Long
  • Private Declare Function NtResumeProcess Lib "Ntdll.dll" (ByVal hProc As Long) As Long
  • Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal hObject As Long) As Long
  • Private Const PROCESS_SUSPEND_RESUME As Long = &H800
  • Public Function SuspendResumeProcess(ByVal Pid As Long, ByVal Action As Boolean) As Long
  • Dim hProcess As Long
  • hProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, Pid)
  • If hProcess Then
  • If Action Then
  • SuspendResumeProcess = NtSuspendProcess(hProcess)
  • Else
  • SuspendResumeProcess = NtResumeProcess(hProcess)
  • End If
  • CloseHandle hProcess
  • End If
  • End Function
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function NtSuspendProcess Lib "Ntdll.dll" (ByVal hProc As Long) As Long
Private Declare Function NtResumeProcess Lib "Ntdll.dll" (ByVal hProc As Long) As Long
Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal hObject As Long) As Long
Private Const PROCESS_SUSPEND_RESUME As Long = &H800

Public Function SuspendResumeProcess(ByVal Pid As Long, ByVal Action As Boolean) As Long
    
    Dim hProcess   As Long
    
    hProcess = OpenProcess(PROCESS_SUSPEND_RESUME, 0&, Pid)
    
    If hProcess Then
        If Action Then
            SuspendResumeProcess = NtSuspendProcess(hProcess)
        Else
            SuspendResumeProcess = NtResumeProcess(hProcess)
        End If
        CloseHandle hProcess
    End If

End Function
  • signaler à un administrateur
    Commentaire de MadM@tt le 22/09/2006 19:25:40

    Le code est plus court que de suspendre chaque thread du processus effectivement ^^ (plus rapide ?)
    par contre d'après le nom des api (NtSuspendProcess) ça marche que sous nt je suppose ?
    (enfin de nos jours, qui n'a pas nt ^^)

  • signaler à un administrateur
    Commentaire de draluorg le 22/09/2006 20:51:52

    Eh oui en effet, valable seulement sur Nt 2000 et XP je pense...

    Pour la rapidite, c'est en effet surement plus rapide que d'enumerer les threads de les ouvrir et les suspendre...

    Mais l'avantage c'est surtout la simplicite ;)

    ++

  • signaler à un administrateur
    Commentaire de PCPT le 22/09/2006 22:07:46 administrateur CS

    salut,
    (pas testé)
    umm... codyx?
    ++

  • signaler à un administrateur
    Commentaire de violent_ken le 22/09/2006 22:07:56

    Nickel, je remplace tout un module par 2 APIs ;)


    Merci, @+

  • signaler à un administrateur
    Commentaire de draluorg le 22/09/2006 22:32:26

    merci pour la note ^^

    PCPT >> "umm... codyx?"

    Eh ca veux dire quoi au juste ?

    ++

  • signaler à un administrateur
    Commentaire de violent_ken le 22/09/2006 22:33:22

    http://www.codyx.org/

    @+

  • signaler à un administrateur
    Commentaire de draluorg le 22/09/2006 23:19:54

    Ah ok... merci Ken ;)

    J'etais deja tombe sur cette page je savais pas trop ce que c'etait lol

    Je sais pas si ce ptit bout de code y a sa place, je vais la suggerer on verra...

    ++

  • signaler à un administrateur
    Commentaire de PCPT le 22/09/2006 23:45:14 administrateur CS

    snippet activé.
    et je viens de tester... çà peut vraiment être utile.
    précision : les actions sont suspendues mais pas en pause (donc pas perdues).
    qu'est-ce qu'il dit?
    beh suffit de tester avec le bloc-note par exemple :
    .on met en pause
    .on donne le focus (sans effet visuel)
    .on saisi une phrase (disabled donc rien)
    ...la phrase apparaît à lorsque réactive le pid

    un p'tit 10 de plus ;)
    PCPT  [AFCK]

  • signaler à un administrateur
    Commentaire de PCPT le 22/09/2006 23:46:16 administrateur CS

    ...la phrase apparaît lorsqu'on réactive le pid ***

  • signaler à un administrateur
    Commentaire de draluorg le 23/09/2006 15:25:00

    "la phrase apparaît lorsqu'on réactive le pid"

    Eh oui mais ca je pense que c'est Windows qui enregistre le(s) message(s) et qui l'envoi a l'appli lorsqu'elle se "reveille" (enfin je suppose)

    ++

  • signaler à un administrateur
    Commentaire de patrice_b le 25/09/2006 08:49:37

    Code interessant. Mais je ne sais pas ce qu'est un Pid. Merci pour l'explication
    Patrice

  • signaler à un administrateur
    Commentaire de MadM@tt le 25/09/2006 09:20:08

    PID > ProcessID c'est l'identificateur d'un processus, un numéro quoi.
    Pour le voir lance le gestionnaire des taches, onglets processus et dans le menu affichage clique sur sélectionner les colonnes, la active la case "numéro" ou "pid" ou je ne sais plus quel nom.
    Ensuite tu auras la colonne qui t'affichera le pID de chaque processus.

  • signaler à un administrateur
    Commentaire de PCPT le 25/09/2006 12:13:47 administrateur CS

    salut,
    exemple.. "Shell" renvoie le PID.
    lPid à déclarer en Long (déclarations générales)

    lPid=Shell("notepad.exe")

    et ensuite tu fais les tests sur cette variables....
    ++

  • signaler à un administrateur
    Commentaire de patrice_b le 26/09/2006 08:34:36

    Merci pour les explications. Le programme est donc très utile. Je le testerai sous XP.
    Patrice

  • signaler à un administrateur
    Commentaire de diablamanshadow le 07/11/2006 01:39:05

    je suis sous xp et sa fonctionne pas :-/ xp pro sp2 ^^

    enfin ptete un prob chez moi mais je doute

  • signaler à un administrateur
    Commentaire de draluorg le 07/11/2006 17:42:32

    Salut,

    Eh a mon avis c'est surement un probleme de droits utilisateur...
    Est tu bien administrateur de ta machine ?
    Si oui, tu pas peut etre un anti-malware qui t'as desactiver les droits de "debogage" des process...

    Enfin il peut y avoir des tonnes de raisons, mais je doute fort que ca vienne du code en lui meme...

    ++

  • signaler à un administrateur
    Commentaire de nnizarr le 04/05/2007 17:58:45

    pardon mais es ce qq peut m'aider? je chreche a programmer un PID avec VB .net
    et je ne sais pas par ou commence
    Merci

  • signaler à un administrateur
    Commentaire de draluorg le 04/05/2007 19:53:12

    Erf tu vas en faire rire plus d'un la ^^

    Un Pid (Process identifier) en francais (Identificateur de processus) est un nombre entier 32bit servant comme son nom l'indique a identifier un processus.
    Dans le gestionnaire de taches de Windows dans le menu affichage tu clic sur "Selectionner les colones" et tu coches PID.
    Tu verra alors les pid s'afficher dans la liste des processus.

    Tu verra que tu as plusieurs processus qui portent le meme nom genre Svchost.exe, c'est justement leur PID qui permet de les differencier.

    Le PID est attribué "aléatoirement" par Windows lors de la creation du processus.

    Donc voila en gros ce qu'est un PID, maintenant si tu veux toujours programmer un PID je ne peux rien faire pour toi! lol

    Mais peut etre peux tu reposer ta question ?
    Que veux tu faire au juste ?

    ++

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS