[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:
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();
}
} |