elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Abrir y cerrar bandeja.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Abrir y cerrar bandeja.  (Leído 13,975 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Abrir y cerrar bandeja.
« en: 17 Mayo 2009, 19:44 pm »

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 Desconectado

Mensajes: 303


Algorithmics & C++ Studient


Ver Perfil
Re: Abrir y cerrar bandeja.
« Respuesta #1 en: 17 Mayo 2009, 19:58 pm »

Hola meta te refieres a esto?:

Código
  1. using System;
  2. using System.Text;
  3. using System.Runtime.InteropServices;
  4.  
  5. namespace EjectMedia
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. // My CDROM is on drive E:
  12. EjectMedia.Eject(@"\\.\E:");
  13. }
  14. }
  15.  
  16. class EjectMedia
  17. {
  18. // Constants used in DLL methods
  19. const uint GENERICREAD = 0x80000000;
  20. const uint OPENEXISTING = 3;
  21. const uint IOCTL_STORAGE_EJECT_MEDIA = 2967560;
  22. const int INVALID_HANDLE = -1;
  23.  
  24.  
  25. // File Handle
  26. private static IntPtr fileHandle;
  27. private static uint returnedBytes;
  28.  
  29. // Use Kernel32 via interop to access required methods
  30.  
  31. // Get a File Handle
  32. [DllImport("kernel32", SetLastError = true)]
  33. static extern IntPtr CreateFile(string fileName,
  34. uint desiredAccess,
  35. uint shareMode,
  36. IntPtr attributes,
  37. uint creationDisposition,
  38. uint flagsAndAttributes,
  39. IntPtr templateFile);
  40.  
  41. [DllImport("kernel32", SetLastError=true)]
  42. static extern int CloseHandle(IntPtr driveHandle);
  43.  
  44. [DllImport("kernel32", SetLastError = true)]
  45. static extern bool DeviceIoControl(IntPtr driveHandle,
  46. uint IoControlCode,
  47. IntPtr lpInBuffer,
  48. uint inBufferSize,
  49. IntPtr lpOutBuffer,
  50. uint outBufferSize,
  51. ref uint lpBytesReturned,
  52. IntPtr lpOverlapped);
  53.  
  54.  
  55. public static void Eject(string driveLetter)
  56. {
  57. try
  58. {
  59. // Create an handle to the drive
  60. fileHandle = CreateFile(driveLetter,
  61. GENERICREAD,
  62. 0,
  63. IntPtr.Zero,
  64. OPENEXISTING,
  65. 0,
  66. IntPtr.Zero);
  67.  
  68. if ((int)fileHandle != INVALID_HANDLE)
  69. {
  70. // Eject the disk
  71. DeviceIoControl(fileHandle,
  72. IOCTL_STORAGE_EJECT_MEDIA,
  73. IntPtr.Zero, 0,
  74. IntPtr.Zero, 0,
  75. ref returnedBytes,
  76. IntPtr.Zero);
  77. }
  78.  
  79. }
  80. catch
  81. {
  82. throw new Exception(Marshal.GetLastWin32Error().ToString());
  83. }
  84. finally
  85. {
  86. // Close Drive Handle
  87. CloseHandle(fileHandle);
  88. fileHandle = IntPtr.Zero;
  89. }
  90. }
  91.  
  92.  
  93. }
  94. }


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 Desconectado

Mensajes: 303


Algorithmics & C++ Studient


Ver Perfil
Re: Abrir y cerrar bandeja.
« Respuesta #2 en: 17 Mayo 2009, 20:04 pm »

O tambien a este ejemplo:

http://www.codeproject.com/KB/cs/workingcd.aspx

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.
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #3 en: 18 Mayo 2009, 01:07 am »

Gracias, dejo el código más simple.

El primer código que me pusiste lo veo muy grande y complejo.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10.  
  11. namespace CD_Control
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
  21.        public static extern void mciSendStringA(string lpstrCommand,
  22.            string lpstrReturnString, long uReturnLength, long hwndCallback);
  23.        //Why did i put this here?
  24.        string rt = "";
  25.        private void button1_Click(object sender, EventArgs e)
  26.        {
  27.            mciSendStringA("set CDAudio door open PROBANDO", rt, 127, 0);
  28.        }
  29.  
  30.        private void button2_Click(object sender, EventArgs e)
  31.        {
  32.            mciSendStringA("set CDAudio door closed PROBANDO", rt, 127, 0);
  33.        }
  34.    }
  35. }
  36.  

Saludo.
En línea

Myth.ck


Desconectado Desconectado

Mensajes: 303


Algorithmics & C++ Studient


Ver Perfil
Re: Abrir y cerrar bandeja.
« Respuesta #4 en: 18 Mayo 2009, 20:48 pm »

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 Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #5 en: 30 Mayo 2009, 23:37 pm »

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


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #6 en: 31 Mayo 2009, 20:59 pm »

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.

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Runtime.InteropServices;
  10.  
  11. namespace CD_Control
  12. {
  13.    public partial class Form1 : Form
  14.    {
  15.        public Form1()
  16.        {
  17.            InitializeComponent();
  18.        }
  19.  
  20.        [DllImport("winmm.dll", EntryPoint = "mciSendStringA")]
  21.        public static extern void mciSendStringA(string lpstrCommand,
  22.            string lpstrReturnString, long uReturnLength, long hwndCallback);
  23.        //Why did i put this here?
  24.        string rt = "";
  25.        private void button1_Click(object sender, EventArgs e)
  26.        {
  27.            mciSendStringA("set CDAudio door open", rt, 127, 0);
  28.            label1.Text = "Abierto";
  29.        }
  30.  
  31.        private void button2_Click(object sender, EventArgs e)
  32.        {
  33.            mciSendStringA("set CDAudio door closed", rt, 127, 0);
  34.            label1.Text = "Cerrado";
  35.        }
  36.    }
  37. }
  38.  
« Última modificación: 31 Mayo 2009, 21:06 pm por Meta » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #7 en: 31 Mayo 2009, 21:37 pm »

 ::) No me entendiste meta  ;D

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  :P o yo mismo empujo la bandeja  :xD 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


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #8 en: 31 Mayo 2009, 21:58 pm »

Averiguando si se puede hacer lo que pides...
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Abrir y cerrar bandeja.
« Respuesta #9 en: 31 Mayo 2009, 22:01 pm »

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:

Citar
function mciSendStringA(

  x1: LPCSTR;

  x2: LPSTR;

  x3: UINT;

  x4: HWND

):MCIERROR;

¿Cuál es el valor de retorno si falla? NULL?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cerrar y Abrir Aplicacion
Programación Visual Basic
Gionix 3 2,979 Último mensaje 16 Marzo 2006, 00:41 am
por _Sergi_
abrir y cerra bandeja cd de la victima!
Programación Visual Basic
Carpex 3 2,339 Último mensaje 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,641 Último mensaje 13 Agosto 2011, 04:37 am
por Nakp
abrir bandeja de cd rom con ensamblador
Programación General
jim12328 2 3,489 Último mensaje 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,141 Último mensaje 23 Marzo 2017, 14:16 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines