begin process at 2012 02 16 17:43:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > DÉCOURVIR LES "BACKGROUND IO PRIORITY" DE VISTA

DÉCOURVIR LES "BACKGROUND IO PRIORITY" DE VISTA


 Information sur la source

Note :
Aucune note
Catégorie :Système Source .NET ( DotNet ) Classé sous :Background, io, vista, thread, process Niveau :Débutant Date de création :13/12/2007 Vu / téléchargé :4 973 / 105

Auteur : Willi

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


 Description

Décrouvrez ici une des nombreuses nouveautés apparue avec Vista, permettant de définir une priorité sur les IO de notre process ou thread courant. (utile pour les anti-virus, l'indexation, etc...)

Cette classe propose des méthodes afin de modifier la priorité IO pour process et/ou thread. 2 méthodes sont là également pour indiquer si un process/thread n'est pas déjà en priorité faible sur les IO.

Cela est vraiment simple à mettre en place, d'ou la simplicité de ce code. Microsoft à vraiment simplifier la chose merci aux équipes Windows ;)

Source

  • Imports System.Runtime.InteropServices
  • ''' <summary>
  • ''' Classe fournissant des méthodes permettant changer les priorités IO pour le process et thread courant.
  • ''' </summary>
  • ''' <remarks>Vista ou 2008 Server requit.</remarks>
  • Public Class IOPriority
  • Const THREAD_MODE_BACKGROUND_BEGIN As Integer = &H10000
  • Const THREAD_MODE_BACKGROUND_END As Integer = &H20000
  • Const PROCESS_MODE_BACKGROUND_BEGIN As Integer = &H100000
  • Const PROCESS_MODE_BACKGROUND_END As Integer = &H200000
  • Public Const ERROR_THREAD_MODE_ALREADY_BACKGROUND As Integer = &H400
  • Public Const ERROR_THREAD_MODE_NOT_BACKGROUND As Integer = &H401
  • Public Const ERROR_PROCESS_MODE_ALREADY_BACKGROUND As Integer = &H402
  • Public Const ERROR_PROCESS_MODE_NOT_BACKGROUND As Integer = &H403
  • Public Const ERROR_FAILED_TO_ENTER_BACKGROUND_MODE As Integer = -1
  • ''' <summary>
  • ''' Indique si le thread courant est en priorité faible sur les IO.
  • ''' </summary>
  • ''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
  • Public Shared Function IsThreadBackgroundMode() As Integer
  • Dim iret As Integer = False
  • Dim bIOBckMode As Boolean = SetThreadBackgroundMode(True)
  • If (bIOBckMode) Then
  • SetThreadBackgroundMode(False)
  • iret = ERROR_THREAD_MODE_NOT_BACKGROUND
  • Else
  • If Marshal.GetLastWin32Error() = ERROR_THREAD_MODE_ALREADY_BACKGROUND Then
  • iret = ERROR_THREAD_MODE_ALREADY_BACKGROUND
  • Else
  • iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
  • End If
  • End If
  • Return iret
  • End Function
  • ''' <summary>
  • ''' Indique si le process courant est en priorité faible sur les IO.
  • ''' </summary>
  • ''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
  • Public Shared Function IsProcessBackgroundMode() As Integer
  • Dim iret As Integer = False
  • Dim bIOBckMode As Boolean = SetProcessBackgroundMode(True)
  • If (bIOBckMode) Then
  • SetProcessBackgroundMode(False)
  • iret = ERROR_PROCESS_MODE_NOT_BACKGROUND
  • Else
  • If Marshal.GetLastWin32Error() = ERROR_PROCESS_MODE_ALREADY_BACKGROUND Then
  • iret = ERROR_PROCESS_MODE_ALREADY_BACKGROUND
  • Else
  • iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
  • End If
  • End If
  • Return iret
  • End Function
  • ''' <summary>
  • ''' Définit la priorité du process courant sur les IO.
  • ''' </summary>
  • ''' <param name="enable"><b>True</b> pour passer le process en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
  • ''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
  • Public Shared Function SetProcessBackgroundMode(ByVal enable As Boolean) As Boolean
  • If CheckOsVersion() Then
  • Dim bret As Boolean = False
  • Dim hProcess As IntPtr = Process.GetCurrentProcess().Handle
  • If enable Then
  • bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_BEGIN)
  • Else
  • bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_END)
  • End If
  • Return bret
  • Else
  • Throw New Exception("Not supported by this Windows version.")
  • End If
  • End Function
  • ''' <summary>
  • ''' Définit la priorité du thread courant sur les IO.
  • ''' </summary>
  • ''' <param name="enable"><b>True</b> pour passer le thread en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
  • ''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
  • Public Shared Function SetThreadBackgroundMode(ByVal enable As Boolean) As Boolean
  • If CheckOsVersion() Then
  • Dim bret As Boolean = False
  • Dim hThread As IntPtr = IntPtr.Zero
  • Try
  • hThread = ThreadHelper.GetCurentThread()
  • If enable Then
  • bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_BEGIN)
  • Else
  • bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_END)
  • End If
  • Catch ex As Exception
  • Finally
  • ThreadHelper.CloseHandle(hThread)
  • End Try
  • Return bret
  • Else
  • Throw New Exception("Not supported by this Windows version.")
  • End If
  • End Function
  • ''' <summary>
  • ''' Vérifie la version de Windows (Vista ou 2008 Server).
  • ''' </summary>
  • ''' <returns></returns>
  • ''' <remarks></remarks>
  • Private Shared Function CheckOsVersion() As Boolean
  • If Environment.OSVersion.Version.Major >= 6 Then
  • Return True
  • Else
  • Return False
  • End If
  • End Function
  • End Class
Imports System.Runtime.InteropServices

''' <summary>
''' Classe fournissant des méthodes permettant changer les priorités IO pour le process et thread courant.
''' </summary>
''' <remarks>Vista ou 2008 Server requit.</remarks>
Public Class IOPriority

    Const THREAD_MODE_BACKGROUND_BEGIN As Integer = &H10000
    Const THREAD_MODE_BACKGROUND_END As Integer = &H20000
    Const PROCESS_MODE_BACKGROUND_BEGIN As Integer = &H100000
    Const PROCESS_MODE_BACKGROUND_END As Integer = &H200000

    Public Const ERROR_THREAD_MODE_ALREADY_BACKGROUND As Integer = &H400
    Public Const ERROR_THREAD_MODE_NOT_BACKGROUND As Integer = &H401
    Public Const ERROR_PROCESS_MODE_ALREADY_BACKGROUND As Integer = &H402
    Public Const ERROR_PROCESS_MODE_NOT_BACKGROUND As Integer = &H403
    Public Const ERROR_FAILED_TO_ENTER_BACKGROUND_MODE As Integer = -1


    ''' <summary>
    ''' Indique si le thread courant est en priorité faible sur les IO.
    ''' </summary>
    ''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
    Public Shared Function IsThreadBackgroundMode() As Integer

        Dim iret As Integer = False

        Dim bIOBckMode As Boolean = SetThreadBackgroundMode(True)

        If (bIOBckMode) Then
            SetThreadBackgroundMode(False)
            iret = ERROR_THREAD_MODE_NOT_BACKGROUND
        Else

            If Marshal.GetLastWin32Error() = ERROR_THREAD_MODE_ALREADY_BACKGROUND Then
                iret = ERROR_THREAD_MODE_ALREADY_BACKGROUND
            Else
                iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
            End If

        End If

        Return iret

    End Function

    ''' <summary>
    ''' Indique si le process courant est en priorité faible sur les IO.
    ''' </summary>
    ''' <returns><b>True</b> si priorité faible.<b>False</b> sinon.</returns>
    Public Shared Function IsProcessBackgroundMode() As Integer

        Dim iret As Integer = False

        Dim bIOBckMode As Boolean = SetProcessBackgroundMode(True)

        If (bIOBckMode) Then
            SetProcessBackgroundMode(False)
            iret = ERROR_PROCESS_MODE_NOT_BACKGROUND
        Else

            If Marshal.GetLastWin32Error() = ERROR_PROCESS_MODE_ALREADY_BACKGROUND Then
                iret = ERROR_PROCESS_MODE_ALREADY_BACKGROUND
            Else
                iret = ERROR_FAILED_TO_ENTER_BACKGROUND_MODE
            End If

        End If

        Return iret

    End Function

    ''' <summary>
    ''' Définit la priorité du process courant sur les IO.
    ''' </summary>
    ''' <param name="enable"><b>True</b> pour passer le process en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
    ''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
    Public Shared Function SetProcessBackgroundMode(ByVal enable As Boolean) As Boolean

        If CheckOsVersion() Then

            Dim bret As Boolean = False
            Dim hProcess As IntPtr = Process.GetCurrentProcess().Handle

            If enable Then
                bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_BEGIN)
            Else
                bret = NativeMethods.SetPriorityClass(hProcess, PROCESS_MODE_BACKGROUND_END)
            End If

            Return bret

        Else

            Throw New Exception("Not supported by this Windows version.")

        End If

    End Function

    ''' <summary>
    ''' Définit la priorité du thread courant sur les IO.
    ''' </summary>
    ''' <param name="enable"><b>True</b> pour passer le thread en priorité faible sur les IO. <b>False</b> pour restaurer une priorité normal sur les IO.</param>
    ''' <returns><b>True</b> si changement réussi.<b>False</b> en cas d'échec.</returns>
    Public Shared Function SetThreadBackgroundMode(ByVal enable As Boolean) As Boolean

        If CheckOsVersion() Then

            Dim bret As Boolean = False
            Dim hThread As IntPtr = IntPtr.Zero

            Try

                hThread = ThreadHelper.GetCurentThread()

                If enable Then
                    bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_BEGIN)
                Else
                    bret = NativeMethods.SetThreadPriority(hThread, THREAD_MODE_BACKGROUND_END)
                End If

            Catch ex As Exception

            Finally
                ThreadHelper.CloseHandle(hThread)
            End Try

            Return bret

        Else

            Throw New Exception("Not supported by this Windows version.")

        End If

    End Function

    ''' <summary>
    ''' Vérifie la version de Windows (Vista ou 2008 Server).
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Shared Function CheckOsVersion() As Boolean

        If Environment.OSVersion.Version.Major >= 6 Then
            Return True
        Else
            Return False
        End If

    End Function

End Class

 Conclusion

Supporté par Vista et 2008 Server uniquement.

Commentaires, notes comme d'habitudes...:)
Merci.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) LISTVIEW SUPPORT TRI MULTI-COLONNES PAR MÉTHODES D'EXTENSION...
Source avec Zip Source avec une capture Source .NET (Dotnet) ROTATION D'ÉCRAN
Source avec Zip Source avec une capture Source .NET (Dotnet) IMAPI2 - GRAVER UN CD AUDIO
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTRÔLES COLOR PICKER: WHEEL COLOR PICKER - SCREEN COLOR PI...
Source avec Zip Source .NET (Dotnet) [.NET3.5] EXTENSION METHODS: SUR LES CLASSES SYSTEM.IO

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) STYLE AERO DE VISTA/SEVEN SUR FORM VB par Gabilach
Source avec une capture Source .NET (Dotnet) TEXTBOX AVEC IMAGE DE FOND POUR CRÉER UNE SEARCHBOX par Bill2web
Source avec Zip Source avec une capture LIBRAIRIE DE NOMBREUSES FONCTIONS POUR AGIR SUR LES FENETRES... par MadM@tt
Source avec Zip Source avec une capture NOTIFICATION PROCESSUS par draluorg
Source avec Zip Source avec une capture Source .NET (Dotnet) PROCESS THREADS MODULES HANDLES DANS UN TREEVIEW EN .NET ( O... par Alain Proviste

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Process thread mémory... [ par nicolas12 ] bonjour a vousje cherche à lire et a stoquer sous forme de fichier toutes les plages mémoires qu'une application utilise, et a modifier automatiquemen running process en vista [ par mortha ] Bonjour j'aimerais savoir si quelqu'un a trouver un example de code pour obtenir les process en fonction sur vista comme on fesais sur XP car javais u 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 BackGround MSFlexGrid [ par gilardh ] Boujour à tous,Comment puis-je adapter la taille d'un MSFlexGrid à son contenu.Je m'explique, comment eviter de voir le backColor quand on est en limi Ouvrir un process [ par metos ] J'ai une application qui tourne en invisble, c'est à dire qu'elle n'est visible que dans les processus. Mais j'aimerais pouvoir l'afficher lorsque je détection process en cours sur windows terminal server [ par paco67 ] Bonjour,Je recherche un moyen de tester si un process (excel par exemple) est lancé sur une session Terminal Server pour un utilisateur bien précis.J' Comment savoir si un Thread est tjs en cours d'exécution [ par Onclick ] Salut à tous,Comment savoir si un Thread est tjs en cours d'exécution, sachant que j'ai le handle de ce thread?Merci d'av,Onclick pbm avec API Create thread (NT) [ par venomp ] Bonjour à tous..J'ai récupere le source N°5856 de sephiro. Ca fonctionne très bien, même sur NT. Par contre, je n'arrive pas à l'adapter pour un des m Process /Service [ par rmlp ] Je souhaiterai retrouver le service rattaché à un process sous Win NT4. (en language Visual basic 6)J'ai plusieurs process de même nom mais chacun est Besoin d'aide sur la manipulation de process [ par PurpleSkunk ] Bonjour !J'ai besoin d'aide sur un problème de process pour un projet professionnel en cours.Je précise que tout doit se dérouler à travers une sessio


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,635 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales