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

DirectX Discussion :

[C#] savoir si un processus utilise DirectX


Sujet :

DirectX

  1. #1
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    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 éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 389
    Points : 20 489
    Points
    20 489
    Par défaut
    Bonjour,
    savoir si Direct X est appelé c'est quelque chose de très ardu parce que l'
    OS fait une sorte de "délégation" au matériel; en d'autres termes les interfaces de programmation de l'OS ou API sont contournées.

    Je pense que la seule possibilité c'est de faire du API Hooking
    ( http://www.codeproject.com/KB/system/hooksys.aspx par exemple )
    En fonction de cela il faut savoir si par exemple Direct3DCreate9 ou inférieur ou supérieur ( 8 ou 10 ) sera appelée.
    Donc c'est assez compliqué à faire ; et en C# je ne pense pas que cela soit le language/plateforme le plus adapté

  3. #3
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    Merci pour votre réponse,

    J'ai une solution sur cette discussion: http://www.developpez.net/forums/sho...d.php?t=575888

    à bientôt,
    Cyrill

  4. #4
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    tu vas avoir un problème sous Vista (le desktop utilise DirectX)

    LeGreg

  5. #5
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    oui, bien vu, l'explorer fait parti de la liste !!

    pas grave, je filtre...

  6. #6
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Est-ce que tu es l'auteur du logiciel de remote control ?

    Parce qu'il serait peut-etre plus intéressant de travailler sur le code pour voir ce qui cause l'incompatibilité ?

    Il y a énormément de logiciels (en dehors des jeux) qui utilisent ou vont utiliser direct3d à court ou moyen terme. Photoshop, Acrobat reader, internet explorer, le desktop vista, etc.

    LeGreg

  7. #7
    Nouveau membre du Club
    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
    Points : 27
    Points
    27
    Par défaut
    pas du tout !!

    Le logiciel, c'est TeamViewer et il est très bien excepté ce conflit !

+ 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 C#
    Réponses: 6
    Dernier message: 27/06/2008, 14h04
  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