IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] savoir si un processus utilise DirectX


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut [C#] savoir si un processus utilise DirectX
    Bonjour,

    J'ai un programme de remote control qui ne supporte pas de tourner en même temps que des jeux vidéos. Les jeux restent ainsi minimisés dans la barre des tâches et il est nécessaire de quitter le logiciel de remote control.

    J'ai pensé faire un petit programme qui quitte automatiquement le logiciel quand il détecte une application qui vient d'être exécutée et qui utilise Directx.
    Pour l'instant, le programme fonctionne si on passe en paramètre le chemin d'accès du jeux vidéo mais j'aimerai généraliser ceci à tous les programmes du même type sans pour autant créer des raccourcis pour chaque application qui est susceptible de poser problème.

    Ma question: J'aimerai savoir si il est possible (avec la liste des processus en cours d'exécution) de savoir si un processus utilise DirectX ou non ?

    Merci d'avance


    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    	class Program
    	{
    		static string messageRecu;
    		static bool progTermine;
    		static int numProcessusADemarrer;
    		static Thread threadAttenteFinProgramme;
    		static Process prcEnCours, app;
    		static Process[] prcsEnCours;
     
    		static void Main(string[] args)
    		{
    			try
    			{
    				Console.SetWindowSize(1, 1);
    				messageRecu = args[0];
    				Manage();
    				threadAttenteFinProgramme = new Thread(new ThreadStart(ThreadAttFinPrg));
    				threadAttenteFinProgramme.Start();
     
    			}
    			catch
    			{
    			}
    		}
     
    		static void Manage()
    		{
    			Process Aplli = new Process();
    			Aplli.StartInfo.FileName = "taskkill.exe";
    			Aplli.StartInfo.UseShellExecute = false;
    			Aplli.StartInfo.RedirectStandardOutput = false;
    			Aplli.StartInfo.Arguments = "/f /im TeamViewer.exe";
     
    			Process Aplli2 = new Process();
    			Aplli2.StartInfo.FileName = "taskkill.exe";
    			Aplli2.StartInfo.UseShellExecute = false;
    			Aplli2.StartInfo.RedirectStandardOutput = false;
    			Aplli2.StartInfo.Arguments = "/f /im TeamViewer_Host.exe";
     
    			Process Appli3 = new Process();
    			Appli3.StartInfo.FileName = messageRecu;
     
    			try
    			{
    				Aplli.Start();
    				Aplli2.Start();
    				Appli3.Start();
    				numProcessusADemarrer = Appli3.Id;
    			}
    			catch (System.ComponentModel.Win32Exception)
    			{
    			}
    		}
     
     
    		static void ThreadAttFinPrg()
    		{
    			try
    			{
    				prcEnCours = Process.GetProcessById(numProcessusADemarrer);
    				prcsEnCours = Process.GetProcesses();
    			}
    			catch
    			{
    				progTermine = true;
    			}
    			while (!progTermine)
    			{
    				if (prcEnCours.HasExited)
    				{
    					progTermine = true;
    				}
    				Thread.Sleep(2000);
    			}
    			Process Appli4 = new Process();
    			Appli4.StartInfo.FileName = "C:\\Program Files\\TeamViewer3\\TeamViewer.exe\\";
    			Appli4.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
    			Appli4.Start();
    			Thread.Sleep(1000);
    			Appli4.CloseMainWindow();
    		}
    	}

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Ne suffit-il pas de regarder si dans la liste des modules chargés par les processus il y a une des dlls de directx ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut
    Je n'arrive pas à trouver ces informations...
    Si vous avez une idée du chemin, n'hésitez pas !

    Merci

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Je pensais à un truc genre ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    private void button2_Click(object sender, EventArgs e)
            {
     
                listBox1.Items.Clear();
                var result = from p in Process.GetProcesses()
                             where IsDirectXProcess(p)
                             orderby p.ProcessName
                             select p.ProcessName;
                foreach (var item in result)
                {
                    listBox1.Items.Add(item);
                }
            }
     
            bool IsDirectXProcess(Process p)
            {
                if (p.MainWindowHandle != IntPtr.Zero) /* Sinon celà ne peut pas être du DirectX */
                {
                    string description = null;
                    foreach (ProcessModule item in p.Modules)
                    {
                        description = item.FileVersionInfo.FileDescription;
                        if(description != null && description != "")
                        {
                            if (description.IndexOf("Direct3D", StringComparison.OrdinalIgnoreCase) > -1 ||
                                description.IndexOf("DirectInput", StringComparison.OrdinalIgnoreCase) > -1 ||
                                description.IndexOf("DirectSound", StringComparison.OrdinalIgnoreCase) > -1)
                            {
                                return true;
                            }
                        }
                    }
     
                    return false;
                }
                else
                    return false;
            }
    J'obtiens ainsi les jeux mais aussi firefox et msn messenger. Doit y'avoir d'autres moyens ... ou alors il faut filtrer parmi les résultats.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Par défaut


    Merci beaucoup, ça marche très bien !

    Je n'ai pas ce problème avec messenger et firefox 3...

    à+
    Cyrill

  6. #6
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Cyrill26 Voir le message
    Je n'ai pas ce problème avec messenger et firefox 3...
    C'est peut être quand on lit une vidéo qu'il charge DirectX ... enfin je sais pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Savoir quel processus utilise un fichier en C#
    Par Farçous dans le forum Windows XP
    Réponses: 3
    Dernier message: 11/08/2010, 09h48
  2. Savoir quel processus utilise un fichier donné
    Par boisdin dans le forum Windows
    Réponses: 2
    Dernier message: 25/03/2010, 09h47
  3. Savoir si une instance utilisant DirectX a été lancée
    Par predalpha dans le forum Windows
    Réponses: 17
    Dernier message: 10/01/2010, 21h32
  4. [C#] savoir si un processus utilise DirectX
    Par Cyrill26 dans le forum DirectX
    Réponses: 6
    Dernier message: 03/07/2008, 19h59
  5. Comment faire pour savoir quel processus utilise un DLL
    Par Furius dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 02/11/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo