Ouverture/fermeture du tiroir du cdrom (ejection)

1/5 (4 avis)

Vue 15 542 fois - Téléchargée 840 fois

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

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
25 avril 2006

Génial, c'est très exactement ce que je cherchais. Sous Windows, on a la commande "Ejecter" mais pas "Refermer".
C'est vraiment un confort de ne pas avoir à refermer manuellement ses CDROMS.
Plateforme W2kPRO sp4. 2 lecteurs optiques. aucun bug de fonctionnement !

Gil
Messages postés
99
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
1 septembre 2010

est-ce qu'il y a po moyen d'ouvrir le cd-rom rien qu'en ouvrant le fichier exe??
Messages postés
338
Date d'inscription
jeudi 22 août 2002
Statut
Membre
Dernière intervention
14 juin 2005

je comprends pas trop l'histoire du .txt : en effet, pourquoi ne pas stocker l'état ds une variable plutot que ds un fichier ?
Messages postés
3
Date d'inscription
lundi 30 septembre 2002
Statut
Membre
Dernière intervention
12 novembre 2002

question :
Qd je fais:
mciSendString("set CDAudio door open",NULL,0,NULL);
ça marche alors que je n'ai pas ouvert le device.
Est il vraiment necessaire de l'ouvrir ??
Pourquoi ??
damien

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.