Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1718 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Detection CDROM

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Detection CDROM

n°1155973
squelletto​r
Posté le 21-07-2005 à 13:48:19  profilanswer
 

Bonjour,
POur mon programme en C++ qui va graver des cd, j'ai besoin de savoir si un cd est insérer dans le lecteur ou pas.J'utilise donc la fonction DiskSize() qui renvoi -1 en cas d'echec. Le truc c que si j'insere un cd vierge, la fonction renvoi également -1 comme si il n'y avait pas de cd.
 
Je cherche donc un moyen de savoir si le cd inséré est vierge en C++...
 
Merci de votre aide!

mood
Publicité
Posté le 21-07-2005 à 13:48:19  profilanswer
 

n°1156739
karlkox
Posté le 22-07-2005 à 03:32:46  profilanswer
 

mciSendString et MCI_STATUS_MEDIA_PRESENT

n°1156808
squelletto​r
Posté le 22-07-2005 à 09:53:19  profilanswer
 

Salut,
J'ai cherché et j'ai trouvé le code suivant :
 
MCI_STATUS_PARMS Info;
ZeroMemory(&Info, sizeof(Info));
Info.dwItem = MCI_STATUS_MEDIA_PRESENT;
mciSendCommand(mci_cd_device, MCI_STATUS, MCI_STATUS_ITEM,
                              DWORD(&Info));
if(!Info.dwReturn)
  MessageBox(NULL, "Pas de CD détecté !", "", MB_OK);
else
  MessageBox(NULL, "C bon y'a un cd :)", "", MB_OK);
 
 
Mais je trouve pas ou on defini quel lecteur il doit tester .
Je pense que c'est la variable mci_cd_device mais je ne sais po comment lui dire .
 
Merci

n°1157515
karlkox
Posté le 22-07-2005 à 18:18:38  profilanswer
 

(Pas testé)

Code :
  1. MCI_OPEN_PARMS params;
  2. MCIERROR       err;
  3. MCIDEVICEID    deviceID;
  4. DWORD          flags; 
  5.    ZeroMemory(&params, sizeof(MCI_OPEN_PARMS));
  6.    params.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
  7.    flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE;
  8.    err = mciSendCommand(0, MCI_OPEN, flags, DWORD(&params) );
  9.    if (err == MMSYSERR_NOERROR)
  10.       deviceID = params.wDeviceID;
  11.    else
  12.       MessageBox(NULL, "Pas de CD détecté !", "", MB_OK);

n°1158701
squelletto​r
Posté le 25-07-2005 à 09:39:21  profilanswer
 

J'ai rajouté ca dans ton code pou tester:
 

Code :
  1. if (err == MMSYSERR_NOERROR)
  2. {
  3.     deviceID = params.wDeviceID;
  4.     MessageBox(NULL, "Un CD détecté !", "", MB_OK);
  5. }
  6. else
  7.     MessageBox(NULL, "Pas de CD détecté !", "", MB_OK);


 
 
Mais dans tout les cas il me renvois qu'il y'a un cd détecté....
tu defini bien le lecteur qu'il scan grace a DEVTYPE_CD_AUDIO ? de cette facon la :
 

Code :
  1. AnsiString commandeCDROM = "open J:\ type cdaudio alias cdaudio";
  2. mciSendString(commandeCDROM.c_str(), 0, 0, 0);


 
Merci de ton aide!

n°1166679
squelletto​r
Posté le 01-08-2005 à 13:20:16  profilanswer
 

svp..., qqun sait?

n°1166813
HelloWorld
Salut tout le monde!
Posté le 01-08-2005 à 14:59:26  profilanswer
 

Avec IOCTL_CDROM_GET_DRIVE_GEOMETRY, tu dois pouvoir déterminer si un CD est présent, ainsi que s'il est vierge ou non.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1167182
squelletto​r
Posté le 01-08-2005 à 18:13:19  profilanswer
 

Salut ,
J'ai cherché, mais je ne trouve pas comment utiliser IOCTL_CDROM_GET_DRIVE_GEOMETRY pour detecter si un cd est vierge .
Pourrai tu me donner un code d'exmple, ou me renvoyer vers un site qui en parle si tu trouve.
 
MErci !

n°1167614
HelloWorld
Salut tout le monde!
Posté le 02-08-2005 à 10:45:16  profilanswer
 

http://support.microsoft.com/defau [...] -US;138434
Tu peux simplifier l'exemple en virant l'utilisation du fichier (1° CreateFile) et en supprimant les appels à IOCTL_CDROM_MEDIA_REMOVAL qui ne sont pas utiles dans ton cas.
Bon finallement j'ai fait le test, ça marche:

Code :
  1. #include <windows.h>
  2. #include <iostream>
  3. using namespace std;
  4. #define IOCTL_CDROM_GET_DRIVE_GEOMETRY 0x0002404C
  5. int main()
  6. {
  7.     HANDLE hCdrom = ::CreateFile(
  8.         "\\\\.\\Cdrom0",
  9.         GENERIC_READ,
  10.         FILE_SHARE_READ | FILE_SHARE_WRITE,
  11.         NULL,
  12.         OPEN_EXISTING,
  13.         0,
  14.         NULL );
  15.     if ( hCdrom == INVALID_HANDLE_VALUE )
  16.     {
  17.         return 1;
  18.     }
  19.     DWORD           bytes;
  20.     DISK_GEOMETRY   disk_geom;;
  21.     if ( ::DeviceIoControl(
  22.         hCdrom,
  23.         IOCTL_CDROM_GET_DRIVE_GEOMETRY,
  24.         NULL,
  25.         0,
  26.         &disk_geom,
  27.         sizeof disk_geom,
  28.         &bytes,
  29.         NULL ) )
  30.     {
  31.         cout << "CD-ROM present.\n";
  32.         if ( disk_geom.Cylinders.HighPart == 0 &&
  33.              disk_geom.Cylinders.LowPart == 0 )
  34.         {
  35.             cout << "C'est un CD vierge.\n";
  36.         }
  37.     }
  38.     else
  39.     {
  40.         cout << "Aucun CD n'est present.\n";
  41.     }
  42.     ::CloseHandle( hCdrom );
  43. }


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1167667
squelletto​r
Posté le 02-08-2005 à 11:16:39  profilanswer
 

Ca marche !!!
 
Merci beaucoup de ton aide .


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Detection CDROM

 

Sujets relatifs
[VBS] Détection d'une connection RASdetection de la derniere colonne d'un tableau en vb6
Aide : Détection de mouvementBSP Collisions detection
Article concernant traitant de la detection de navigateurbesoin d'aide sur la detection de collision
Programmation d'un programme de détection d'attaque réseauPb de detection de types d'image :s
[JS] Script de détection flash : comment le tester ?Detection ejection Cdrom
Plus de sujets relatifs à : Detection CDROM


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR