Récupérer PID courant et gestion de priorité.

Récupérer PID courant et gestion de priorité.

GetCurrentProcess,GetCurrentProcessId,SetPriorityClass

Voir version :

Pas de dépendances

Télécharger :

#include <windows.h>
#include <stdio.h>

int main()
{
    HANDLE h = GetCurrentProcess();
    DWORD pid = GetCurrentProcessId();
    printf ("PID = %d\n",pid );
    SetPriorityClass(h,HIGH_PRIORITY_CLASS);
    return 0;
}




Commentaires


  Sous Windows, chaque processus a ce qu'on appelle un HANDLE.
  un HANDLE, c'est un identifiant Windows.

  Si vous avez le Handle d'une application, d'une processus, de n'importe quoi, vous pouvez y accéder (selon les droits que vous avez)

  ici, je recupere le HANDLE du processus courant (notre programme) dans h.

  Dans ce HANDLE, il y a le pid, c'est le numéro de processus.
  On peut récupérer le pid avec GetCurrentProcessId.

  Lancez le programme, ne le fermez pas tout de suite quand il est marqué "appuyez sur une touche"

  faites ctrl+alt+supp (sous Windows XP) pour voir le gestionnaire de processus
  Menu "affichage" / "selectionnez les colonnes", cochez "pid"
  Vous pouvez constater que le PID donné par le programme est le meme dans la colonne PID.

  

  La ligne 
  SetPriorityClass(h,HIGH_PRIORITY_CLASS); 
  vous permet de modifier la priorité de votre processus par rapport aux autres.
  Si vous mettez une priorité haute pour un jeu vidéo, vous garantissez que le jeu passera avant le reste.

  Vérifiez, avec, et sans cette ligne, dans le gestionnaire de processus, que la priorité a été changée, en cliquant
  droit dans l'onglet "processus", sur votre processus (retrouvez le grace au PID !) et sur "définir la priorité"

  Il existe d'autres constantes pour changer la priorité : voir cette page
  http://msdn2.microsoft.com/en-us/library/ms686219.aspx

  Je ne conseille pas de monter plus haut que HIGH_PRIORITY_CLASS.
  En effet, si vous vous mettez en REALTIME_PRIORITY_CLASS, alors votre processus a une exclusivité abusive, qui fait que
  meme l'ordonnanceur du systeme n'aura pas vraiment son mot a dire : donc il sera complexe de reprendre le controle derriere le programme.
  Si jamais votre programme ne marche pas bien, et tombe en boucle infinie, et que vous voulez le tuer, vous aurez beaucoup de mal dans ce mode...


  (Spécial thanks to Lapintade pour m'avoir parlé de cette fonction.)