• Jueves 18 de Abril de 2019, 18:23

Autor Tema:  Expulsar lectora de CD SATA  (Leído 900 veces)

juvinalch

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Expulsar lectora de CD SATA
« en: Miércoles 16 de Enero de 2019, 01:13 »
0
Hola a todos, desde ya agradezco por su ayuda
Estoy realizando un aplicativo para leer archivos y resulta que en la máquina donde funcionará tiene una lectora, de donde también se pretende leer el contenido de los CDs y ayudaría bastante al usuario que pueda abrir la bandeja de la lectora y cerrarla también. Estuve viendo algunos foros y me encontré con lo siguiente:
// COMO FUNCION LOCAL EXTERNA
Function long mciSendString( ref string strsend, &
ref string strret, &
uint returnSize, &
long handle) Library "WINMM.DLL" &
alias for "mciSendStringA"

// EN EL BOTON ABRIR LECTORA
string ls_command_open = "set CDAudio door open"
string ls_command_close = "set CDAudio door closed"
string ls_null; setnull(ls_null)
uint rsize = 1024

messagebox("Abrir", "Ahora voy a abrir la bandeja")

try
mciSendString(ls_command_open, ls_null , rsize , handle(this) );
catch (runtimeerror re)
messagebox("Error",re.Text)
end try

messagebox("Cerrar", "Ahora voy a cerrar la bandeja")

try
mciSendString(ls_command_close, ls_null , rsize , handle(this) );
catch (runtimeerror re1)
messagebox("Error",re1.Text)
end try

Y se supone que debería funcionar, pero no se que hago mal, pero no me ejecuta, tendrá algo que ver que mi lectora sea SATA ?, no me sale ningún error, pero no me expulsa la lectora, es como sino hiciera nada. Les rogaría si tuviesen algun ejemplo descargable. Gracias

Haggen

  • Miembro activo
  • **
  • Mensajes: 82
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re:Expulsar lectora de CD SATA
« Respuesta #1 en: Jueves 28 de Febrero de 2019, 22:54 »
0
  Fíjate que yo tuve el mismo problema, yo programo en VB.Net y tampoco me daba ningún error, pero tampoco expulsaba el cd, simplemente nada pasaba. Resolví el problema llamando desde el programa a una utilería llamada CDR (es gratis, la puedes bajar de https://www.codeguru.com/cpp/w-p/system/cd-rom/article.php/c5775/CDREXE--OpenClose-CD-Drives-Programmatically.htm ) y para ejecutarla lo haces con los siguientes parámetros:


CDR open g:
CDR close g:


Donde g: es la unidad de cd que quieres abrir o cerrar, o bien puedes abrir/cerrar todas a la vez.


CDR open all
CDR close all


Ahora lo que yo hago es lo siguiente:


Mediante código genero un archivo bat con la llamada a la rutina y sus parámetros, lo ejecuto (en modo invisible), espero a que termine la ejecución y luego compruebo si la unidad se expulsó o no (esta utilería no da ningún aviso).


If My.Computer.FileSystem.Drives(index).IsReady Then
  MsgBox("CD Expulsado")
Else
  MsgBox("Ocurrió un error desconocido al expulsar el CD")
End If


Donde index es el número de tu unidad (debes conocer previamente ese index antes de expulsar), te recomiendo esta comprobación la metas en un timer que ejecutes unos segundos después de que tu utilería halla terminado (puede dar falsos positivos la comprobación).


No tengo idea porque la función mciSendString no trabaja pero yo resolví el problema de esta manera, espero te sea de utilidad.




juvinalch

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re:Expulsar lectora de CD SATA
« Respuesta #2 en: Miércoles 27 de Marzo de 2019, 03:26 »
0
Muchas gracias por su ayuda.
Recibí la colaboración de una persona en la red que me planteo crear un archivo BAT con el siguiente código:

@echo off
echo Run open/close protocol
echo Drive tray open
nircmd.exe cdrom open E:
pause
echo Drive tray close
nircmd.exe cdrom close E:

El archivo BAT lo ejecuo mediante linea de código desde Power Builder y funciona a la perfección.
Muchas gracias por sus respuestas, yo lo solucioné así.

Haggen

  • Miembro activo
  • **
  • Mensajes: 82
  • Nacionalidad: mx
    • Ver Perfil
    • Mis proyectos
Re:Expulsar lectora de CD SATA
« Respuesta #3 en: Sábado 30 de Marzo de 2019, 18:08 »
0
que bien  :jumpie: