Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ejecter un disque

3 réponses
Avatar
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

3 réponses

Avatar
Jean-Philippe Gouigoux
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
Avatar
Kerem Gümrükcü
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" schrieb im Newsbeitrag
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


Avatar
Fabien
Bonsoir
Je vous remercie beaucoup de votre réponse elle m’a été d’une très grande
utilité !
Cordialement
Fabien