begin process at 2013 06 20 02:39:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > ÉJECTER LE CD-ROM

ÉJECTER LE CD-ROM


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :Éjecter, CD-ROM, Windows, KERNEL32, EjectCD Niveau :Débutant Date de création :03/09/2012 Date de mise à jour :11/09/2012 17:03:19 Vu / téléchargé :1 692 / 130

Auteur : happy05

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Titre: Éjecter le CD-ROM
Un exemple de code qui montre comment Éjecter le CD-ROM avec la DLL de Windows 'KERNEL32.DLL'.

Source

  • unit Unit1;
  • {
  • PfA A0E ùùùfùNNNN.,M, 0¨¨oMPDMMM M£,M+yooo¨ ¨AA o*A f01HH2M,0 ¨oMM,0oEEMM
  • ED¨ MM? I+o MD, 0oM M,P f0o MM£ MZP Zll AND SC,0o MMPMMM?ùSùI
  • ¨oM ùùù EMM MCM £Mf ?¨£ ùAA ùoo o+: IYd Ddd ddEAoE Eoo
  • MfM NN. A£o oo+ DP: ds£ C o dDd dYI ddd EIZ fEùSùNN NN.
  • TISM,0o£MMMM, odDddIdddEIdd A£A,,,AP oddddd;nn Yn::Y:!* 0¨¨ MPD MMM £?ù CùZMCM£
  • PfA A0E A£A ,,, AP, ZZY EE, ,*,Z,My ,NM ooo
  • ED¨ MM? ooo +:d s o dAA d¨¨ dd?ùCù ZEf ,,,
  • ¨oM ùùù SZE fEù SùN .NN N., NM*nY ddd dddMM,M+ooo
  • MfM NN. I+o MD, 0oM M,P fY0 f?¨£¨ùAAù M*M£MZPZ+:d
  • Titre: Éjecter le CD-ROM
  • Auteur: H@PPyZERØ5
  • E-mail: happy05@programmer.net
  • }
  • interface
  • uses
  • Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  • Dialogs, StdCtrls;
  • type
  • TForm1 = class(TForm)
  • Button1: TButton;
  • Edit1: TEdit;
  • Label1: TLabel;
  • procedure Button1Click(Sender: TObject);
  • private
  • { Private declarations }
  • public
  • { Public declarations }
  • end;
  • var
  • Form1: TForm1;
  • const
  • {GENERIC_READ = $80000000;
  • GENERIC_WRITE = $40000000;} //déjà déclaré dans Windows.pas
  • OPEN_EXISTING = 3; //ouvre un fichier ou un périphérique, uniquement si
  • //il existe
  • INVALID_HANDLE_VALUE = -1; //HANDLE INVALID
  • IOCTL_STORAGE_EJECT_MEDIA = 2967560; //Le code de controle pour l'opération
  • //EJECT_MEDIA
  • implementation
  • {$R *.dfm}
  • {
  • les 3 functions sont déjà déclaré dans Windows.pas
  • <<-------------------------------------------------------------------------->>
  • //crée ou ouvre un fichier ou un périphérique...
  • Function CreateFile(
  • lpFileName: string;
  • dwDesiredAccess: integer;
  • dwShareMode: integer;
  • lpSecurityAttributes: PSecurityAttributes;
  • dwCreationDisposition: integer;
  • dwFlagsAndAttributes: integer;
  • hTemplateFile: Integer): Integer; //La fonction retourne un handle
  • stdcall; external 'KERNEL32.DLL';
  • //lpFileName: Le nom du fichier ou le périphérique
  • //dwDesiredAccess: l'accès demandé au fichier ou au périphérique
  • //GENERIC_READ or GENERIC_WRITE
  • //dwShareMode: le mode de partage demandée du fichier ou le périphérique
  • //lpSecurityAttributes: un pointeur vers une TSecurityAttributes
  • //dwCreationDisposition: une action à effectuer sur un fichier ou un dispositif
  • //qui existe ou n'existe pas
  • //pour les périphériques autres que des fichiers, ce paramètre est généralement
  • //réglé sur OPEN_EXISTING
  • //OPEN_EXISTING = 3
  • //dwFlagsAndAttributes: les attributs de fichier ou d'un dispositif et des
  • //drapeaux
  • //...
  • //hTemplateFile: ce paramètre peut être nil
  • <<-------------------------------------------------------------------------->>
  • //envoie un code de controle directement à un pilote de périphérique spécifié...
  • Function DeviceIoControl(
  • hDevice: Integer;
  • dwIoControlCode: DWORD;
  • lpInBuffer: Pointer;
  • nInBufferSize: DWORD;
  • lpOutBuffer: Pointer;
  • nOutBufferSize: DWORD;
  • var lpBytesReturned: DWORD;
  • lpOverlapped: POverlapped
  • ): Boolean; //La fonction retourne un Boolean
  • stdcall; external 'KERNEL32.DLL';
  • //hDevice: handle de périphérique
  • //pour récupérer un handle de périphérique, utilisez la fonction CreateFile
  • //dwIoControlCode: Le code de controle pour l'opération
  • //utilisez IOCTL_STORAGE_EJECT_MEDIA pour cette opération
  • //lpInBuffer: non utilisé avec cette opération (nil)
  • //nInBufferSize: non utilisé avec cette opération (zéro)
  • //lpOutBuffer: non utilisé avec cette opération (nil)
  • //nOutBufferSize: non utilisé avec cette opération (zéro)
  • //lpBytesReturned: un pointeur sur une variable qui reçoit la taille des données
  • stockées dans la mémoire tampon de sortie...
  • //lpOverlapped: un pointeur vers un POverlapped
  • <<-------------------------------------------------------------------------->>
  • //ferme un handle d'Objet ouvert...
  • Function CloseHandle(
  • hObject: Integer
  • ): Boolean; //La fonction retourne un Boolean
  • stdcall; external 'KERNEL32.DLL';
  • //hObject: un handle d'Objet ouvert q'on va fermer
  • <<-------------------------------------------------------------------------->>
  • }
  • {
  • procedure EjectCD
  • }
  • procedure EjectCD(Drive: String);
  • var
  • Path: String;
  • HWNDDrive: Integer;
  • BytesReturned: DWORD;
  • Longueur: Integer;
  • begin
  • Longueur := Length(Drive);
  • if (Drive[Longueur]) <> ':' then
  • Drive := Drive + ':';
  • Path := '\\.\' + Drive; //le nom du périphérique
  • //en utilise CreateFile pour récupérer le handle de périphérique
  • HWNDDrive := CreateFile(PChar(path), GENERIC_READ OR GENERIC_WRITE, 0, nil,
  • OPEN_EXISTING, 0, 0);//si la fonction échoue, la valeur de retour est
  • //INVALID_HANDLE_VALUE
  • //si le périphérique n'existe pas
  • if HWNDDrive = INVALID_HANDLE_VALUE then
  • Exit; //pour afficher l'error remplacer Exit; par RaiseLastWin32Error;
  • try
  • BytesReturned := 0;
  • if not
  • //envoie un code de controle directement à un pilote de périphérique
  • DeviceIoControl(HWNDDrive, IOCTL_STORAGE_EJECT_MEDIA, nil, 0, nil, 0, BytesReturned,
  • 0) then
  • Exit; //pour afficher l'error remplacer Exit; par RaiseLastWin32Error;
  • finally
  • //ferme le handle HWNDDrive
  • CloseHandle(HWNDDrive)
  • end;
  • end;
  • {
  • <<-------------------------------------------------------------------------->>
  • }
  • procedure TForm1.Button1Click(Sender: TObject);
  • begin
  • EjectCD(Edit1.Text);
  • ShowMessage('ejected !!!');
  • end;
  • end.
  • //to be continued...
unit Unit1;

{
PfA       A0E  ùùùfùNNNN.,M,  0&#168;&#168;oMPDMMM   M£,M+yooo&#168;   &#168;AA     o*A   f01HH2M,0   &#168;oMM,0oEEMM
ED&#168;       MM?  I+o       MD,  0oM     M,P  f0o     MM£  MZP     Zll  AND   SC,0o  MMPMMM?ùSùI
&#168;oM       ùùù  EMM       MCM  £Mf     ?&#168;£  ùAA     ùoo  o+:     IYd  Ddd  ddEAoE  Eoo
MfM       NN.  A£o       oo+  DP:    ds£   C o    dDd   dYI     ddd  EIZ fEùSùNN  NN.
TISM,0o£MMMM,  odDddIdddEIdd  A£A,,,AP     oddddd;nn      Yn::Y:!*   0&#168;&#168; MPD MMM  £?ù CùZMCM£
PfA       A0E  A£A       ,,,  AP,          ZZY               EE,     ,*,Z,My ,NM          ooo
ED&#168;       MM?  ooo       +:d  s o          dAA               d&#168;&#168;     dd?ùCù  ZEf          ,,,
&#168;oM       ùùù  SZE       fEù  SùN          .NN              N.,      NM*nY   ddd  dddMM,M+ooo
MfM       NN.  I+o       MD,  0oM          M,P             fY0        f?&#168;£&#168;ùAAù   M*M£MZPZ+:d

Titre: Éjecter le CD-ROM
Auteur: H@PPyZERØ5
E-mail: happy05@programmer.net
}


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
const
   {GENERIC_READ = $80000000;
    GENERIC_WRITE = $40000000;} //déjà déclaré dans Windows.pas
    OPEN_EXISTING = 3; //ouvre un fichier ou un périphérique, uniquement si
    //il existe
    INVALID_HANDLE_VALUE = -1; //HANDLE INVALID
    IOCTL_STORAGE_EJECT_MEDIA = 2967560; //Le code de controle pour l'opération
    //EJECT_MEDIA

implementation
{$R *.dfm}

{
les 3 functions sont déjà déclaré dans Windows.pas
<<-------------------------------------------------------------------------->>
//crée ou ouvre un fichier ou un périphérique...
Function CreateFile(
  lpFileName: string;
  dwDesiredAccess: integer;
  dwShareMode: integer;
  lpSecurityAttributes: PSecurityAttributes;
  dwCreationDisposition: integer;
  dwFlagsAndAttributes: integer;
  hTemplateFile: Integer): Integer; //La fonction retourne un handle
  stdcall; external 'KERNEL32.DLL';

//lpFileName: Le nom du fichier ou le périphérique

//dwDesiredAccess: l'accès demandé au fichier ou au périphérique
//GENERIC_READ or GENERIC_WRITE

//dwShareMode: le mode de partage demandée du fichier ou le périphérique

//lpSecurityAttributes: un pointeur vers une TSecurityAttributes

//dwCreationDisposition: une action à effectuer sur un fichier ou un dispositif
//qui existe ou n'existe pas
//pour les périphériques autres que des fichiers, ce paramètre est généralement
//réglé sur OPEN_EXISTING
//OPEN_EXISTING = 3

//dwFlagsAndAttributes: les attributs de fichier ou d'un dispositif et des 
//drapeaux
//...

//hTemplateFile: ce paramètre peut être nil

<<-------------------------------------------------------------------------->>
//envoie un code de controle directement à un pilote de périphérique spécifié...
Function DeviceIoControl(
  hDevice: Integer;
  dwIoControlCode: DWORD;
  lpInBuffer: Pointer;
  nInBufferSize: DWORD;
  lpOutBuffer: Pointer;
  nOutBufferSize: DWORD;
  var lpBytesReturned: DWORD;
  lpOverlapped: POverlapped
  ): Boolean; //La fonction retourne un Boolean
  stdcall; external 'KERNEL32.DLL';


//hDevice: handle de périphérique
//pour récupérer un handle de périphérique, utilisez la fonction CreateFile

//dwIoControlCode: Le code de controle pour l'opération
//utilisez IOCTL_STORAGE_EJECT_MEDIA pour cette opération

//lpInBuffer: non utilisé avec cette opération (nil)

//nInBufferSize: non utilisé avec cette opération (zéro)

//lpOutBuffer: non utilisé avec cette opération (nil)

//nOutBufferSize: non utilisé avec cette opération (zéro)

//lpBytesReturned: un pointeur sur une variable qui reçoit la taille des données
stockées dans la mémoire tampon de sortie...

//lpOverlapped: un pointeur vers un POverlapped

<<-------------------------------------------------------------------------->>
//ferme un handle d'Objet ouvert...
Function CloseHandle(
  hObject: Integer
  ): Boolean; //La fonction retourne un Boolean
  stdcall; external 'KERNEL32.DLL';

//hObject: un handle d'Objet ouvert q'on va fermer

<<-------------------------------------------------------------------------->>
}

{
procedure EjectCD
}
procedure EjectCD(Drive: String);
var
  Path: String;
  HWNDDrive: Integer;
  BytesReturned: DWORD;
  Longueur: Integer;
begin
Longueur := Length(Drive);

   if (Drive[Longueur]) <> ':' then
   Drive :=  Drive + ':';

Path := '\\.\' + Drive; //le nom du périphérique

//en utilise CreateFile pour récupérer le handle de périphérique
HWNDDrive := CreateFile(PChar(path), GENERIC_READ OR GENERIC_WRITE, 0, nil,
  OPEN_EXISTING, 0, 0);//si la fonction échoue, la valeur de retour est 
  //INVALID_HANDLE_VALUE

   //si le périphérique n'existe pas
   if HWNDDrive = INVALID_HANDLE_VALUE then
   Exit; //pour afficher l'error remplacer Exit; par RaiseLastWin32Error;

   try
   BytesReturned := 0;
   if not
   //envoie un code de controle directement à un pilote de périphérique
   DeviceIoControl(HWNDDrive, IOCTL_STORAGE_EJECT_MEDIA, nil, 0, nil, 0, BytesReturned,
      0) then
   Exit; //pour afficher l'error remplacer Exit; par RaiseLastWin32Error;
   finally
   //ferme le handle HWNDDrive
   CloseHandle(HWNDDrive)
   end;

end;

{
<<-------------------------------------------------------------------------->>
}
procedure TForm1.Button1Click(Sender: TObject);
begin
EjectCD(Edit1.Text);
ShowMessage('ejected !!!');
end;

end.



//to be continued...


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 septembre 2012 17:01:52 :
j'ai ajouté des commentaires...
11 septembre 2012 17:03:19 :
j'ai ajouté des commentaires...

 Sources du même auteur

Source avec Zip Source avec une capture AFFICHER LES OBJECTS DE WINDOWS EXPLORER DANS UN WEBBROWSER
Source avec Zip UTILISER LES FICHIERS *.CPL
Source avec Zip Source avec une capture LE BUREAU DANS LA FORM
Source avec Zip BARRE DES TACHES-ASTUCES
Source avec Zip Source avec une capture [DEMO] DELPHI HGE MAP EDITEUR

 Sources de la même categorie

Source avec Zip Source avec une capture AFFICHER LES OBJECTS DE WINDOWS EXPLORER DANS UN WEBBROWSER par happy05
Source avec Zip Source avec une capture KINECT TEST V1 par FFCAST
Source avec Zip DÉCOUPER UNE FENÊTRE par gta126
Source avec Zip TRANSCRIRE UN FICHIER OPEN FINANCIAL EXCHANGE (OFX) EN FICHI... par jeffem
Source avec Zip Source avec une capture MSXML 4.0 VALIDATION XML / XSD par redtux

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture AFFICHER LES OBJECTS DE WINDOWS EXPLORER DANS UN WEBBROWSER par happy05
Source avec Zip UTILISER LES FICHIERS *.CPL par happy05
Source avec Zip Source avec une capture LE BUREAU DANS LA FORM par happy05
Source avec Zip BARRE DES TACHES-ASTUCES par happy05
Source avec Zip Source avec une capture AUTO-COMPLÉTION D'UN CONTRÔLE DE SAISIE par Bacterius

Commentaires et avis

Commentaire de Francky23012301 le 03/09/2012 22:46:28

Salut c'est bien mais on peut faire la meme chose en une ligne de code via l'API mcisendstring

Commentaire de happy05 le 05/09/2012 10:45:36

Salut,
oui c'est vrai on peut utiliser mcisendstring...

Commentaire de Mowglinaute le 06/09/2012 09:13:01

Bonjour,
Le plus simple:
1) placer dans uses 'Mmsystem'
2) placer une touche dans Form1.
3) taper:
   procedure TForm1.Button1Click(Sender: TObject);
   begin
      mciSendString('Set cdaudio door Open wait',nil,0,0);// <<< Ouvre le lecteur.
      {Pour fermer le lecteur remplacer Open par Closed}
   end;

Voilà bonne continuation ...
MOWGLINAUTE.

Commentaire de Killer42 le 10/09/2012 19:09:55

Bonjour,
A par le nombre de lignes ;) ce qui serait intéressant est de savoir comparer les 2 méthodes en mémoires, rapidité, compatibilité etc... Peut-être que mciSendString est codé différemment ?

Commentaire de simonpelloquin le 11/09/2012 09:56:29

Salut,

Ce qui serait bienvenu (voire indispensable...), ce serait de commenter le code que tu proposes. Parce qu'il me semblait (mais peut être que je me trompe) que ce site avait pour vocation d'expliquer un peu la programmation. Je doute fort qu'un débutant (niveau indiqué pour ta source) comprenne l'intégralité de ton code... Un peu de pédagogie que diable !!! :)
Par ailleurs, à quoi servent les déclarations de fonctions CreateFileA, DeviceIoControl et CloseHandle ? (CreateFileA n'est d'ailleurs pas utilisé dans EjectCD...) Si c'est vraiment utile indique pourquoi. Je les ai mises en commentaire et le code fonctionne...

Commentaire de happy05 le 11/09/2012 17:07:33

j'ai ajouté des commentaires...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Interruption en Delphi sous windows 98 [ par star wars ] Bonjour à tous Je souhaiterais gérer une interruption matérielle.J'utilise le delphi 4 pour programmer.L'environnement est Windows 98.En developpement Verrouiller la touche windows [ par slhuilli ] Bonjour,je cherche un bout de code qui permette que quand on appuie sur la touche du clavier Windows, rien ne se passe.Merci Les Api Windows [ par twoupy ] Est-ce que quelqu'un possède ou sait où je pourrais trouver l'aide sur les Api Windows (win32.hlp) en français. ce serait bien cool, parce que l'angl Windows XP et acces simultané en reseau (DELPHI et PARADOX) [ par Jaco ] Salut tout le mondeVoila, j'ai une application (Dephi , paradox) qui tourne en reseau sans pb avec win98 et MEen installant le windows XP sur une mach Installation WINDOWS XP [ par Bde ] Je possède le Backup du CD de WINDOWS XP, et je souhaite l'installer sur un second PC.Toutefois, je ne possède pas le code pour l'installation...Comme Paradox en resauw& Windows XP . HEEELP [ par Jaco ] Salut tout le mondeVoila, j'ai une application (Dephi , paradox) qui tourne en reseau sans pb avec win98 et MEen installant le windows XP sur une mach FileListBox [ par jlg75 ] Question idiote, j'affiche une liste de fichiers dans une TFileListBox synchronisée avec l'affichage des répertoires dans une DirListBox(façon explora application en attente invisible perturbe windows. [ par crogger ] Salut, j'ai mon appli qui se lance au demarage de windows qui permet de detecter la presence de connexion internet avec une boucle WHILEex:while monip Compatibiliter Different Windows [ par lanosic ] J'ai eu déjà plusieur fois des ereur quand je lancai une application (compilée sur Win 2000) sur Win NT 4.0 ou autre. J'aimerais savoir si on peut cré Windows XP !!! [ par MAsterC ] Avec le programme (Delphi 6) je me crée un programme pour windows XP mais comment on fait pour avoir le style (apparence) de windows XP (les Tboutton,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juin 2013
LMMJVSD
     12
3456789
10111213141516
17181920212223
24252627282930

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,758 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales