Autor
|
Tema: Abrir y cerrar bandeja. (Leído 14,063 veces)
|
Meta
|
Hello.
Trabajo con el Visual C# Express 2008. ¿Se puede hacer con un Firm1 y dos button abrir y cerrar la bandeja de un lector de disco del PC?
Si es posible. ¿Cómo se hace?
Adiós.
|
|
|
En línea
|
|
|
|
Myth.ck
Desconectado
Mensajes: 303
Algorithmics & C++ Studient
|
Hola meta te refieres a esto?: using System; using System.Text; using System.Runtime.InteropServices; namespace EjectMedia { class Program { static void Main(string[] args) { // My CDROM is on drive E: EjectMedia.Eject(@"\\.\E:"); } } class EjectMedia { // Constants used in DLL methods const uint GENERICREAD = 0x80000000; const uint OPENEXISTING = 3; const uint IOCTL_STORAGE_EJECT_MEDIA = 2967560; const int INVALID_HANDLE = -1; // File Handle private static IntPtr fileHandle; private static uint returnedBytes; // Use Kernel32 via interop to access required methods // Get a File Handle [DllImport("kernel32", SetLastError = true)] static extern IntPtr CreateFile(string fileName, uint desiredAccess, uint shareMode, IntPtr attributes, uint creationDisposition, uint flagsAndAttributes, IntPtr templateFile); [DllImport("kernel32", SetLastError=true)] static extern int CloseHandle(IntPtr driveHandle); [DllImport("kernel32", SetLastError = true)] static extern bool DeviceIoControl(IntPtr driveHandle, uint IoControlCode, IntPtr lpInBuffer, uint inBufferSize, IntPtr lpOutBuffer, uint outBufferSize, ref uint lpBytesReturned, IntPtr lpOverlapped); public static void Eject(string driveLetter) { try { // Create an handle to the drive fileHandle = CreateFile(driveLetter, GENERICREAD, 0, IntPtr.Zero, OPENEXISTING, 0, IntPtr.Zero); if ((int)fileHandle != INVALID_HANDLE) { // Eject the disk DeviceIoControl(fileHandle, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0, IntPtr.Zero, 0, ref returnedBytes, IntPtr.Zero); } } catch { throw new Exception (Marshal .GetLastWin32Error().ToString()); } finally { // Close Drive Handle CloseHandle(fileHandle); fileHandle = IntPtr.Zero; } } } }
|
|
|
En línea
|
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.
|
|
|
Myth.ck
Desconectado
Mensajes: 303
Algorithmics & C++ Studient
|
|
|
|
En línea
|
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.
|
|
|
Meta
|
Gracias, dejo el código más simple. El primer código que me pusiste lo veo muy grande y complejo. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace CD_Control { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("winmm.dll", EntryPoint = "mciSendStringA")] public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback); //Why did i put this here? string rt = ""; private void button1_Click(object sender, EventArgs e) { mciSendStringA("set CDAudio door open PROBANDO", rt, 127, 0); } private void button2_Click(object sender, EventArgs e) { mciSendStringA("set CDAudio door closed PROBANDO", rt, 127, 0); } } }
Saludo.
|
|
|
En línea
|
|
|
|
Myth.ck
Desconectado
Mensajes: 303
Algorithmics & C++ Studient
|
De nada meta.
Salu2!
|
|
|
En línea
|
Un intelectual es un hombre que usa más palabras de las necesarias para decir más cosas de las que sabe.
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Hola!
no estoy seguro si tengo que abrir otro hilo. Pero esta es mi pregunta. Hay alguna forma de saber en verdad si la bandeja de cd esta abierta o cerrada??
Ejemplo, al codigo de aplicacion poner un timer que refresce en un label y este diga su estado (abierto/cerrado). O a travez de un Hook. Estuve buscando pero no salio nada....
alguien tiene alguna idea de como saberlo???
|
|
|
En línea
|
|
|
|
Meta
|
Deja investigar a ver. Para mi lo del Timer no hace falta. Ahora te cuento. EDITO: Lo he probado. Inserta un label1. Al pulsar abrir la bandeja de abre y cuando termina de abrirse del todo, dice Abierto. Lo mismo al cerrarlo. No hace falta nada de Timer, se comporta como lo tuviera. Si te ha servido, hazlo saber. Gracias. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace CD_Control { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("winmm.dll", EntryPoint = "mciSendStringA")] public static extern void mciSendStringA(string lpstrCommand, string lpstrReturnString, long uReturnLength, long hwndCallback); //Why did i put this here? string rt = ""; private void button1_Click(object sender, EventArgs e) { mciSendStringA("set CDAudio door open", rt, 127, 0); label1.Text = "Abierto"; } private void button2_Click(object sender, EventArgs e) { mciSendStringA("set CDAudio door closed", rt, 127, 0); label1.Text = "Cerrado"; } } }
|
|
« Última modificación: 31 Mayo 2009, 21:06 pm por Meta »
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
No me entendiste meta Lo que yo quiero lograr es algo asi: · Presiono el botón1 Abre la bandeja y en el label aparece "abierto"· Cierro la bandeja en forma manual (el boton de la lectora o yo mismo empujo la bandeja etc) quiero que aparezca "cerrado" en el label automáticamente Y estoy si se tiene que poder (el mismo windows lo hace, sino como lee el autorun ¬¬)
|
|
|
En línea
|
|
|
|
Meta
|
Averiguando si se puede hacer lo que pides...
|
|
|
En línea
|
|
|
|
h0oke
Desconectado
Mensajes: 2.059
Coder ~
|
Lo que pregunta raul338 es por lógica, tendría que pensar un poquito más. Pero meta, estuve buscando documentación sobre la función: function mciSendStringA(
x1: LPCSTR;
x2: LPSTR;
x3: UINT;
x4: HWND
):MCIERROR; ¿Cuál es el valor de retorno si falla? NULL?
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cerrar y Abrir Aplicacion
Programación Visual Basic
|
Gionix
|
3
|
2,992
|
16 Marzo 2006, 00:41 am
por _Sergi_
|
|
|
abrir y cerra bandeja cd de la victima!
Programación Visual Basic
|
Carpex
|
3
|
2,354
|
24 Octubre 2007, 20:54 pm
por Mr pom0
|
|
|
Abrir la bandeja de CD/DVD por javascript
Desarrollo Web
|
Aikanáro Anário
|
6
|
5,669
|
13 Agosto 2011, 04:37 am
por Nakp
|
|
|
abrir bandeja de cd rom con ensamblador
Programación General
|
jim12328
|
2
|
3,522
|
12 Mayo 2014, 20:50 pm
por simorg
|
|
|
Cerrar y abrir la bandeja del lector con el botón manualmente, y que lo sepa C#
.NET (C#, VB.NET, ASP)
|
Meta
|
5
|
3,165
|
23 Marzo 2017, 14:16 pm
por Eleкtro
|
|