Cd opener/closer

Contenu du snippet

Ce petit programme tourne en arrière plan, il ouvre le lecteur attribué a une touche.

Exemple:
Shift+F12 Ouvrir le lecteur X:\
F12 Fermer le lecteur X:\

Au premier lancer notepad s'ouvre et vous pouvez changer les lecteurs attribués aux différentes touches. Vous êtes égallement libre de modifier ce fichier plus tard, il se trouve dans: "C:\CDOpenerCloser.ini"

Je vous conseille d'ajouter une référence a ce programme dans:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\Run
Mais c'est a vous de voir.

Source / Exemple :


using System;
//Pour la lecture/écriture du fichier "C:\CDOpenerCloser.ini"
using System.IO;
//Pour: Thread.Sleep();
using System.Threading;
//Pour importer les deux methodes exeternes
using System.Runtime.InteropServices;

namespace CDOpenerCloser
{
	public class CDOpenerCloser
	{
		[STAThread]
		static void Main() 
		{
			char[] F=new char[13];
			beginning:
			//Initialisation du programme
			try
			{
				//Si le fichier "C:\CDOpenerCloser.ini" existe déja on le lit.
				FileStream IniFile= new FileStream("C:\\CDOpenerCloser.ini",FileMode.Open);
				StreamReader IniFileReader = new StreamReader(IniFile);
				string IniText=IniFileReader.ReadToEnd();
				for(int i=1;i<=12;i++)
					F[i]=IniText[IniText.IndexOf("F"+i.ToString()+"->")+i.ToString().Length+3];

				//Important on ferme le flux
				IniFileReader.Close();
				IniFile.Close();
			}
			catch
			{
				//On crée le fichier "C:\CDOpenerCloser.ini"
				FileStream IniFile= new FileStream("C:\\CDOpenerCloser.ini",FileMode.Create);
				StreamWriter IniFileWriter = new StreamWriter(IniFile);

				//Ecriture de l'en tête
				IniFileWriter.WriteLine(new string('*',40));
				IniFileWriter.WriteLine(new string('*',40));
				IniFileWriter.Write("**"+"Wormkey 30.11.2004".PadRight(40-2*2)+"**"+IniFileWriter.NewLine);
				IniFileWriter.Write("**"+"Nothing's impossible".PadRight(40-2*2)+"**"+IniFileWriter.NewLine);
				IniFileWriter.Write("**"+"CD Opener/Closer".PadRight(40-2*2)+"**"+IniFileWriter.NewLine);
				IniFileWriter.Write("**"+"Spécifiez le(s) lecteur(s) CD.".PadRight(40-2*2)+"**"+IniFileWriter.NewLine);
				IniFileWriter.WriteLine(new string('*',40));
				IniFileWriter.WriteLine(new string('*',40));
				IniFileWriter.WriteLine("");

				//Ecriture des drives
				for(int i=1;i<=12;i++)
				{
					IniFileWriter.WriteLine("F"+i.ToString()+"->"+(i==12 ? "X:\\" : "<no-specified drive>"));
					F[i]= i==12 ? 'X' : '<';
				}

				//Ecriture de l'explication finale
				IniFileWriter.WriteLine("");
				IniFileWriter.WriteLine("Une foix notepad fermé vos choix seront pris en compte!");
				IniFileWriter.WriteLine("-Shift+F1-12: Ouvrir le lecteur CD spécifié");
				IniFileWriter.WriteLine("-F1-12: Fermer le lecteur spécifié");

				//Tres important on ferme le flux, pour permettre a notepad d'acceder au fichier
				IniFileWriter.Close();
				IniFile.Close();

				//Lancement de Notepad et attente jusqua sa fermeture (permet a l'utilisateur de paramétrer le prog)
				System.Diagnostics.Process notepad=System.Diagnostics.Process.Start(@"C:\Windows\system32\notepad.exe",@"C:\CDOpenerCloser.ini");
				while(notepad.HasExited==false)
				{
					Thread.Sleep(1000);
				}
				goto beginning;
			}

			//Boucle principale
			do
			{
				//On ne veut pas qu'il monopolise tout le processeur (il doit a peine être visible)
				Thread.Sleep(100);

				//On intercepte les entées au clavier F1-F12 +Shift
				for(int i=1;i<=12;i++)
				{
					if((F[i]>'A' && F[i]<'Z') || (F[i]>'a' && F[i]<'z'))
						if(/*32768=2^15*/(GetAsyncKeyState(110+i+1) & 32768)!=0)//F12
						{
							if(/*32768=2^15*/(GetAsyncKeyState(16) & 32768)!=0 && (GetAsyncKeyState(160) & 32768)!=0)//Shift
							{
								//On ouvre le lecteur
								mciSendString("open "+F[i].ToString()+":\\ type cdaudio alias cdaudio","",0,0);
								mciSendString("Set cdaudio door open wait","",0,0);
								mciSendString("close cdaudio","",0,0);
							}
							else
							{
								//On ferme le lecteur
								mciSendString("open "+F[i].ToString()+":\\ type cdaudio alias cdaudio","",0,0);
								mciSendString("Set cdaudio door closed wait","",0,0);
								mciSendString("close cdaudio","",0,0);
							}
						}
				}

			}
			while(true);
		}

		//Methode nécessaire a l'observation du clavier
		[DllImport("user32.dll")]
		public static extern int GetAsyncKeyState(int uAction);

		//Nécessaire pour envoyer des ordres aux lecteurs CD
		[DllImport("winmm.dll")]
		public static extern long mciSendString(string lptstrcommand,string lptreturnstring,int ureturnlenght,int hwndcallback);
	}
}

Conclusion :


Evitez de lance le prog plusieurs foix en même temps, je ne sais pas encore ce que ca donne...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.