| |
|
511
|
Programación / Scripting / Crear funciones en est script
|
en: 28 Noviembre 2017, 09:57 am
|
Hola: Estoy usando desde ISE con PowerShell este código. Lo que hace ahora es crear un formulario Windows Form en el cual abre y cierra la bandeja del lector del disco. $MemDef = @" [DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback); "@
$winnm = Add-Type -memberDefinition $MemDef -ErrorAction 'SilentlyContinue' -passthru -name mciSendString function Set-CDAudioDoor { Param( [ValidateSet("open", "closed")][String[]]$Mode = 'open' ) $winnm::mciSendStringA("set cdaudio door $mode", $null, 0,0)}
[void][reflection.assembly]::loadwithpartialname("System.Windows.Forms") [void][reflection.assembly]::loadwithpartialname("System.Drawing")
$Form = New-Object system.Windows.Forms.Form $Form.Text = "PowerShell 2017" $Form.TopMost = $true $Form.Width = 300 $Form.Height = 300 $Form.StartPosition = "CenterScreen"
$button_Abrir = New-Object system.windows.Forms.Button $button_Abrir.Text = "Abrir" $button_Abrir.Width = 75 $button_Abrir.Height = 23 $button_Abrir.location = new-object system.drawing.point(40, 150) $button_Abrir.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Abrir)
$button_Cerrar = New-Object system.windows.Forms.Button $button_Cerrar.Text = "Cerrar" $button_Cerrar.Width = 75 $button_Cerrar.Height = 23 $button_Cerrar.location = new-object system.drawing.point(174, 150) $button_Cerrar.Font = "Microsoft Sans Serif,10" $Form.controls.Add($button_Cerrar)
$label_Mensaje = New-Object system.windows.Forms.Label $label_Mensaje.Text = "?" $label_Mensaje.AutoSize = $true $label_Mensaje.Width = 25 $label_Mensaje.Height = 10 $label_Mensaje.location = new-object system.drawing.point(54,26) $label_Mensaje.Font = "Microsoft Sans Serif,36,style=Bold" $Form.controls.Add($label_Mensaje)
# Abrir bandeja. $label_Mensaje.Text = "Abriendo..." $button_Abrir.Add_Click({Set-CDAudioDoor open}) $label_Mensaje.Text = "Abierto."
# Cerrar bandeja. $label_Mensaje.Text = "Cerrando..." $button_Cerrar.Add_Click({Set-CDAudioDoor closed}) $label_Mensaje.Text = "Cerrado."
[void]$Form.ShowDialog() $Form.Dispose() Al ejecutar este Script, muestra esta imagen.  Com podrás observar, siempre se ejecuta una detrás otra esta instrucción de mensajes. $label_Mensaje.Text = "Cerrado." Mi idea es, que al pulsar el botón Abrir, aparezca el mensaje "Abrriendo...", se abre la bandeja del todo, sale otro mensaje, "Abierto.", lo mismo al pulsar el botón Cerrar. ¿En que fallo? Saludos.
|
|
|
|
|
513
|
Programación / Java / Otro estilo en Java
|
en: 22 Noviembre 2017, 23:52 pm
|
Hola: Aquí hay un código hecho en Java usando WMPlayer.OCX.7. Quiero usar en Java mciSendString(L"Set CDAudio Door Open Wait", 0, 0, 0); Es para abrir y cerrar la bandeja. /** * */ package com.sabado; import java.io.File; import java.io.FileWriter; /** * -.- * */ public class Unidad { /** * @param args */ public static void main (String[] args ) { // TODO Auto-generated method stub //mostramos mensajes antes de abrir las bandejas de CD DVD null, "Pulsa OK para abrir las bandejas de los " + "lectores/grabadores de CD/DVD del equipo.", "Abrir CD/DVD", Unidad.abrirBandejaCDDVD(); //mostramos mensaje antes de cerrar las bandejas de CD DVD null, "Pulsa OK para cerrar las bandejas de los " + "lectores/grabadores de CD/DVD del equipo.", "Cerrar CD/DVD", Unidad.cerrarBandejaCDDVD(); } public static void abrirBandejaCDDVD () { try { File file = File. createTempFile("abrirbandejacd", ".vbs"); file.deleteOnExit(); String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n" + "Set collCDROM = objPlayer.cdromCollection \n" + "if collCDROM.Count >= 1 then \n" + "For i = 0 to collCDROM.Count - 1 \n" + "collCDROM.Item(i).Eject \n" + "Next \n" + "End If \n"; fw.write(vbs); fw.close(); Runtime. getRuntime(). exec("wscript " + file. getPath()). waitFor(); } { e.printStackTrace(); } } public static void cerrarBandejaCDDVD() { try { File file = File. createTempFile("cerrarbandejacd", ".vbs"); file.deleteOnExit(); //para cerrar las bandejas de CD hay que ejecutar "eject" dos veces String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n" + "Set collCDROM = objPlayer.cdromCollection \n" + "if collCDROM.Count >= 1 then \n" + "For i = 0 to collCDROM.Count - 1 \n" + "collCDROM.Item(i).Eject \n" + "collCDROM.Item(i).Eject \n" + "Next \n" + "End If \n"; fw.write(vbs); fw.close(); Runtime. getRuntime(). exec("wscript " + file. getPath()). waitFor(); } { e.printStackTrace(); } } }
¿Algún ejemplo usando mciSendString en Java? Lo pregunto porque el de arriba es mucho código para lo que hay que hacer, abrir y cerrar la bandeja. Un ejemplo en C++ se hace en menos líneas de códigos, por ejemplo este indicado abajo. Paso 1:  Paso 2:  Paso3: Escribir Winmm.lib.  Paso 4:  Sólo se necesita tres includes. #include "stdafx.h" #include "Windows.h" #include "iostream" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Consola C++ Win32 2017"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector: " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if ((entrada[0] == 'a') || (entrada[0] == 'A')) { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if ((entrada[0] == 'c') || (entrada[0] == 'C')) { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Saludos.
|
|
|
|
|
514
|
Programación / Scripting / Re: Hacer un menú sencillo con este Script
|
en: 22 Noviembre 2017, 14:20 pm
|
Hola: Ya he sido capaz de abrir y cerrar la bandeja con PowerShell. LA fomra como es el menú no me hace gracia. Hay que pulsar una letra, luego Enter y después Enter para pulsar otra tecla más para cerra la bandeja. Mi idea es que al pulsar la letra A o a, Abra la bandeja y preparado para que pulses otra letra. Nada de pulsar la A y luego Enter, para luego otra vez Enter. Si saben hacerlo mejor, avisen. De momento aquí funciona, es capaz de abrir y cerrara la bandeja. $MemDef = @" [DllImport("winmm.dll", CharSet = CharSet.Ansi)] public static extern int mciSendStringA( string lpstrCommand, string lpstrReturnString, int uReturnLength, IntPtr hwndCallback); "@ $winnm = Add-Type -memberDefinition $MemDef -ErrorAction 'SilentlyContinue' -passthru -name mciSendString function Set-CDAudioDoor { Param( [ValidateSet("open", "closed")][String[]]$Mode = 'open' ) $winnm::mciSendStringA("set cdaudio door $mode", $null, 0,0)} function mostrarMenu { param ( [string]$Titulo = ' Control bandeja del lector ' ) cls Write-Host "╔====================================╗" Write-Host "║ $Titulo ║" Write-Host "╠====================================╣" Write-Host "║ ║" Write-Host "║ A) Abrir. ║" Write-Host "║ C) Cerrar. ║" Write-Host "║ I) Información. ║" Write-Host "║ S) Presiona 'S' para salir. ║" Write-Host "║ ║" Write-Host "╚====================================╝" } do { mostrarMenu $input = Read-Host " Elegir una Opción" switch ($input) { 'a' { cls 'Abriendo...' Set-CDAudioDoor open 'Abierto.' ' ' } 'c' { cls 'Cerrando...' Set-CDAudioDoor closed 'Cerrado.' } 'i' { cls 'PowerShell' '==========' Get-Host } 's' { return } } pause } until ($input -eq 's')
Saludos.
|
|
|
|
|
515
|
Programación / Programación C/C++ / [SOLUCIONADO] Solucionando errores
|
en: 22 Noviembre 2017, 03:31 am
|
Hola NEBIRE: Ya descubrí el motivo, menudo despiste por mi parte. Antes hay que hacer esto. Lo pongo aquí por si alguien lo necesita. Paso 1:  Paso 2:  Paso3: Escribir Winmm.lib.  Paso 4:  Sólo se necesita tres includes. #include "stdafx.h" #include "Windows.h" #include "iostream" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Consola C++ Win32 2017"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector: " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if ((entrada[0] == 'a') || (entrada[0] == 'A')) { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if ((entrada[0] == 'c') || (entrada[0] == 'C')) { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Muchas gracias por darme ideas campeones. Me han ayudado mucho entender. Un cordial saludos.
|
|
|
|
|
518
|
Programación / Programación C/C++ / RE: Solucionando errores
|
en: 20 Noviembre 2017, 20:44 pm
|
Buenas: Problema resuelto y problema sin resolver. El código que está abajo funciona, el programa tiene un nombre del proyecto, lo curioso que he creado otro proyecto con otro nombre, así varias veces y esta vez no hay manera de que funcione el programa. El un problema muy curioso y eso que uso el mismo código. Donde da problemas en en lo señalado abajo. #include "stdafx.h" #include "stdio.h" #include "Windows.h" #include "iostream" #include "string" #include "conio.h" #include "string" #include "locale" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Abrir y cerrar bandeja del disco C++ Win32"); // Variable. char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { // Muestra en pantalla textos. cout << "Control bandeja del lector : " << endl << endl; cout << "A - Abrir bandeja." << endl; cout << "C - Cerrar bandeja." << endl; cout << "==========================" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if (entrada[0] == 'a' || entrada[0] == 'A') { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if (entrada[0] == 'c' || entrada[0] == 'C') { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } // Si haz pulsado otro caracter distinto de A, C, a, y c aparece else { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Concretamente falla en: mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
Código de error: Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error LNK2019 símbolo externo __imp__mciSendStringW@16 sin resolver al que se hace referencia en la función _main Bandeja_consola_win32_cpp C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Bandeja_consola_win32_cpp\Bandeja_consola_win32_cpp.obj 1
Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido Error LNK1120 1 externos sin resolver Bandeja_consola_win32_cpp C:\Users\Usuario\Documents\Visual Studio 2017\Projects\Bandeja_consola_win32_cpp\Debug\Bandeja_consola_win32_cpp.exe 1
A pesar de los enlaces que dan, no entiendo nada ni como resolverlo. LNK2019. LNK1120. ¿Es normal que funcione el código, para que lo vuelva a crear con otro nombre del proyecto no funcione ni una vez? ¿Qué es lo que ocurre? Gracias por todo.
|
|
|
|
|
519
|
Programación / Programación C/C++ / Re: Adaptar C++ CLR a C++ Win32
|
en: 20 Noviembre 2017, 20:43 pm
|
Ole, campeón. Te has resuelto el tema, solo te falta cambiar la "b" por "c", jejeje.
No lo he resuelto arriba, lo acabo de resolver ahora que pongo los resultado aquí mismo. Lo que he resuelto arriba es MFC C++ 2017. #include "stdafx.h" #include "stdio.h" #include "Windows.h" #include "iostream" #include "string" #include "conio.h" #include "string" #include "locale" using namespace std; int main() { // Título de la ventana. SetConsoleTitle(L"Abrir y cerrar bandeja del disco C++ Win32"); // Variable char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola. while (true) { cout << "Control bandeja del lector : \n\n" << endl; // Muestra en pantalla textos. cout << "A - Abrir bandeja. \n" << endl; cout << "C - Cerrar bandeja. \n" << endl; cout << "========================== \n\n" << endl; cin >> entrada; // Aquí introduces letras A, a, C, y c. cout << "\n" << endl; // Abrir bandeja. if (entrada[0] == 'a' || entrada[0] == 'A') { cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door open", nullptr, 0, nullptr); cout << "Abierto." << endl << endl; // Muestra en pantalla textos. } // Cerrar bandeja. else if (entrada[0] == 'c' || entrada[0] == 'C') { cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos. mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr); cout << "Cerrado." << endl << endl; // Muestra en pantalla textos. } else // Si haz pulsado otro caracter distinto de A, C, a, y c aparece { cout << "Solo pulsar A o C." << endl << endl; // este mensaje. } } return EXIT_SUCCESS; }
Gracias por todo.
|
|
|
|
|
520
|
Programación / Scripting / Re: Hacer un menú sencillo con este Script
|
en: 20 Noviembre 2017, 15:41 pm
|
Buenas: He mejorado el ménú y puedo abrir la bandeja del disco, pero no me se el código de cerrar la bandeja. function mostrarMenu { param ( [string]$Titulo = ' Control bandeja del lector ' ) cls Write-Host "╔====================================╗" Write-Host "║ $Titulo ║" Write-Host "╠====================================╣" Write-Host "║ ║" Write-Host "║ 1) Abrir. ║" Write-Host "║ 2) Cerrar. ║" Write-Host "║ 3) Información. ║" Write-Host "║ S) Presiona 'S' para salir. ║" Write-Host "║ ║" Write-Host "╚====================================╝" } do { mostrarMenu Write-Host "" $input = Read-Host " Elegir una Opción." switch ($input) { '1' { cls 'Abriendo...' $items = (New-Object -com "WMPlayer.OCX.7").cdromcollection.item(0) $items.eject() 'Abierto.' Write-Host "" } '2' { cls 'Segunda Opción' } '3' { cls 'Información.' } 's' { return } } pause } until ($input -eq 's')
¿Cuál es el código para cerrar el disco? Gracias.
|
|
|
|
|
|
| |
|