Ouverture/fermeture du tiroir du cdrom (ejection)

Description

Utilitaire permettant de fermer ou d'ouvrir le tiroir du cdrom

Source / Exemple :


//---------------------------------------------
//Description : permet l'ouverture et la fermeture du tiroir
//	du cdrom par un simple clic

//Argument : la lettre du lecteur suivi de ":"
//	Exemple : E:

//Sorties : un fichier par lettre de lecteur passee en argument
//		etat_LETTRE.txt

//Linkage : linker avec winmm.lib
//---------------------------------------------

//---------------------------------------------
//Eric FAYOLLE   /   e.fayolle@wanadoo.fr   /   11 novembre 2002
//---------------------------------------------

#include <string.h>		//pour strcmp
#include <resapi.h>		//pour mciSendString

//Declaration des procedures et fonctions
int lit_etat(char *);
void envoi_commande(char*, char*);

void main (int argc, char** argv)
{

	
	int etat_tiroir = 0;

	char drive[2] ="";
	char action[6] = "";
	char commande[256] = "";

	if(argc!=2)
	{
		puts("Syntaxe : cdrom drive");
		return;
	}

	//Recuperation des parametres
	strcpy(drive,argv[1]);

	//On lit l'etat du tiroir (ouvert ou ferme)
	etat_tiroir = lit_etat(drive);

	//on effectue l'action
	if(etat_tiroir == 1)	//le tiroir est ferme, il fautl'ouvrir
	{
		envoi_commande(drive,"open");
	}
	else //le tiroir est ouvert, il faut le fermer
	{
		envoi_commande(drive,"closed");
	}
}

int lit_etat(char * drive)
//lit l'etat du tiroir du cdrom stocke dans le fichier etat.txt
	//etat = 1 => tiroir ferme
	//etat=2 => tiroir ouvert
{
	int etat = 0;
	
	FILE * fp;
	char fichier[256];

	//on declare le nom du fichier
	strcpy(fichier,"etat_");
	strncat(fichier,drive,1);	//on ne concatene que le 1er caractere
								//de drive, ie la lettre sans :
	strcat(fichier,".txt");

	fp = fopen(fichier,"r");

	if(!fp)	//le fichier n'existe pas, c'est la premiere utilisation
			//on le cree avec etat ferme et on envoi la commande fermeture
	{
		fp = fopen(fichier,"w");
		fprintf(fp,"1");
		etat = 1;
		envoi_commande(drive,"closed");		
	}
	else	//le fichier existe, il faut lire la valeur de etat
	{
		fscanf(fp,"%d",&etat);	
	}
	fclose(fp);								 		
	return etat;
}

void envoi_commande(char * drive, char * action)
//construit et envoi une commande au device
	//drive = lettre du device vers lequel envoyer la commande
	//action = ouverture/fermeture du tiroir
{
	char commande[256] = "";
	int etat = 0;
	FILE * fp;
	char fichier[256];

	//on declare le nom du fichier
	strcpy(fichier,"etat_");
	strncat(fichier,drive,1); //concatenation du 1er caractere de drive (cf plus haut)
	strcat(fichier,".txt");

	
	//Construction de la commande
	strcpy(commande,"open ");	
	strcat(commande,drive);
	strcat(commande," shareable type cdaudio");

	//Envoi de la commande : ouverture du device
	mciSendString(commande,NULL,0,NULL);
	
	//Construction  de la commande
	strcpy(commande,"set ");
	strcat(commande,drive);
	strcat(commande," door ");
	strcat(commande,action);	

	//Envoi de la commande : ouverture/fermeture de la porte
	mciSendString(commande,NULL,0,NULL);

	//Construction de la commande
	strcpy(commande, "close ");
	strcat(commande, drive);

	//Envoi de la commande : fermeture du device
	mciSendString(commande,NULL,0,NULL);

	//On stocke l'etat du tiroir dans le fichier etat.txt
	fp = fopen(fichier,"w");
	if (strcmp(action,"open")==0)	//on vient d'ouvrir le tiroir
	{
		etat = 2;
	}
	else							//on vient de fermer le tiroir
	{
		etat = 1;
	}
	fprintf(fp,"%d",etat);
	fclose(fp);
}

Conclusion :


Pour linker ce source, il est necessaire de faire appel a la libraire winmm.lib
Le fichier zip contient les sources, l'executable, et un fichier README.txt decrivant l'installation de l'utilitaire.
Cree avec Visual C++ 6.0

Tout commentaire a e.fayolle@wanadoo.fr

Codes Sources

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.