IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

[API] Comment obtenir le statut d'un lecteur de cdrom ?


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 12
    Par défaut [API] Comment obtenir le statut d'un lecteur de cdrom ?
    bonjour
    j'aimerai savoir s'il est possible de connaitre le status du cdrom( fermé ou ouvert)
    J'ai déja parcourus le forum et la faq. La question à déja été posé. J'ai essayé les différentes solutions proposé mais ca ne marche pas.
    Avec le composant tmediaPlayer en utilisant la propriété mode (MediaPlayer.Mode),la valeur mpOpen est normallement retourné si le lecteur est ouvert. Mais lorsque je teste, mpOpen est à chaque fois retourné, que le tiroir soit ouvert ou fermé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.ButtonClick(Sender:TObject);
    begin
    	with mediaPlayer1 do
    		if (MediaPlayer1.Mode=mpOpen)then
    			mciSendCommand(mediaPlayer1.DeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0)
    		else
    			mciSendCommand(mediaPlayer1.DeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0);
    end;
    Est ce que la valeur mpOpen concerne finallement le statut du tiroir ou bien la présence d'un cd?

    Sans utiliser le composant mediaplayer, la foncion mciSendCommand retourne 0 si cela à marché. Normallement ,si je veux ouvrir le tiroir avec cette fonction et que le tiroir est déja ouvert, est ce qu'elle doit quand même retourner 0? J'espère que ma demande est clair
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Par défaut
    Je ne pense pas qu'il soit possible de détecter si le lecteur est ouvert. Il y a une bonne raison à ça : certains lecteurs n'ont pas de chariot. Je pense au modèle de type slot-in. Comment détecter quelque chose qui n'existe pas ?
    Le seul test réel qui soit valable est de vérifier si un CD est dans le lecteur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 12
    Par défaut
    Ahhhhhh, j'suis dégouté. Va falloir trouvé un autre moyen.
    Merci pour ta réponse

  4. #4
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Une solution serait de passer par une variable.
    Tu peux détecter la fermeture ou l'ouverture du tiroir avec le code de la FAQ.
    Au démarrage de ton application, tu essaye de fermer le tiroir, si la fonction renvoie true, c'est que le tiroir était ouvert et que tu l'as fermé, si elle renvoie false, c'est qu'il était déja fermé, dans les deux cas, tu initialise ta variable à false (tiroir fermé). Ensuite tu détectes l'ouverture et la fermeture du lecteur avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    type
      TForm1 = class(TForm)
      private
        procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
      public
     
      end;
     
    {...}
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.WMDeviceChange(var Msg: TMessage);
    const
      DBT_DEVICEARRIVAL = $8000; // un CD est inséré
      DBT_DEVICEREMOVECOMPLETE = $8004;  // un CD est retiré
    var
      myMsg: string;
    begin
      inherited;
      case Msg.wParam of
        DBT_DEVICEARRIVAL: 
          begin
            // tu mets ta variable à false (fermeture)
          end;
        DBT_DEVICEREMOVECOMPLETE: 
          begin
            // tu mets ta variable à true (ouverture)
          end;
      end;
    end;
    Et pour faire tes tests, tu les fait sur ta variable:
    - true --> lecteur ouvert
    - false --> lecteur fermé

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 12
    Par défaut
    je n'ai pas trouvé le code que tu as mis dans la faq mais je l'ai retrouvé ailleurs. Par contre, étant ujn super débutant en delphi, j'aurai aimé avoir quelques infos sur les lignes de code que tu as écrit plus haut.
    Dans cette déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;
    Cela concerne des évenements?
    La procédure est elle appelé automatiquement? Je suis dans le flou

  6. #6
    Membre chevronné
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Par défaut
    Oui, la procedure WMDeviceChange(var Msg: TMessage); te permet d'intercepter le message WM_DEVICECHANGE qui est envoyé automatiquement dès qu'un nouveau media est inséré ou retiré (ici c'est un CD) .

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 12
    Par défaut
    merci pour toutes ces info, je vais essayer de me débrouiller avec
    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/06/2009, 17h50
  2. Réponses: 2
    Dernier message: 29/01/2006, 22h51
  3. Comment obtenir le nom complet d'un lecteur réseau ?
    Par Speed41 dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 26/08/2004, 07h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo