Ejecter un disque

Le
Fabien
En C# sous VS 2008
Après avoir copié le contenu d'un CD dans un répertoire de l'ordinateur
(File.copy()) est-il possible de déclencher une méthode pour éjecter
automatiquement le CD dès lors que la copie est terminée ?

Cordialement
Fabien
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Philippe Gouigoux
Le #21131921
Bonjour,

Si tu n'as pas peur de te lancer dans les pinvoke, je te conseille de
jeter un oeil sur ce lien :

http://netcode.ru/dotnet/?lang=&katID0&skatID&9&artIDs94

JP
Kerem Gümrükcü
Le #21144621
Salut Fabien,

un exemple:

public class MediaController
{
private const int OPEN_EXISTING = 3;
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const uint IOCTL_STORAGE_EJECT_MEDIA = 2967560;

[DllImport("kernel32.dll",
CharSet = CharSet.Unicode,
SetLastError = true)]
private static extern IntPtr CreateFile(
string filename,
uint desiredAccess,
uint shareMode,
IntPtr securityAttributes,
int creationDisposition,
int flagsAndAttributes,
IntPtr templateFile);

[DllImport("kernel32.dll",
CharSet = CharSet.Unicode,
SetLastError = true)]
private static extern int DeviceIoControl(
IntPtr deviceHandle,
uint ioControlCode,
IntPtr inBuffer,
int inBufferSize,
IntPtr outBuffer,
int outBufferSize,
ref int bytesReturned,
NativeOverlapped overlapped);

[DllImport("kernel32.dll",
SetLastError = true)]
private static extern int CloseHandle(
IntPtr handle);

public static void EjectMediaDevice(string DeviceLabel)
{
IntPtr hDevice = IntPtr.Zero;
int BytesReturned = 0;

try
{
string DevicePath = @"\." +
DeviceLabel.Replace(Path.DirectorySeparatorChar.ToString(),
"").Replace(@"", "").Replace(":","").Trim() + ":";

hDevice = CreateFile(
DevicePath,
GENERIC_READ | GENERIC_WRITE,
0,
IntPtr.Zero,
OPEN_EXISTING,
0,
IntPtr.Zero);

if (hDevice.ToInt32() == -1)
{
throw new Win32Exception();
}

NativeOverlapped no = new NativeOverlapped();
no.EventHandle = IntPtr.Zero;
no.InternalHigh = IntPtr.Zero;
no.InternalLow = IntPtr.Zero;
no.OffsetHigh = 0;
no.OffsetLow = 0;

DeviceIoControl(
hDevice,
IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero,
0,
IntPtr.Zero,
0,
ref BytesReturned,
no);
}
finally
{
CloseHandle(hDevice);
}
}
}

L'appel:

private void button1_Click(object sender, EventArgs e)
{
MediaController.EjectMediaDevice(@"D:");
}


Kerem

--
-----------------------
Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Latest Project: http://www.pro-it-education.de/software/deviceremover
Latest Open-Source Projects: http://entwicklung.junetz.de
-----------------------

"Fabien" news:
En C# sous VS 2008
Après avoir copié le contenu d'un CD dans un répertoire de l'ordinateur
(File.copy()) est-il possible de déclencher une méthode pour éjecter
automatiquement le CD dès lors que la copie est terminée ?

Cordialement
Fabien


Fabien
Le #21154691
Bonsoir
Je vous remercie beaucoup de votre réponse elle m’a été d’une très grande
utilité !
Cordialement
Fabien
Publicité
Poster une réponse
Anonyme