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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Crear funciones en est script
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear funciones en est script  (Leído 2,368 veces)
Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
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.

Código:
$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.
Código:
$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.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Crear funciones en est script
« Respuesta #1 en: 28 Noviembre 2017, 16:25 pm »

Creo recordar que Elektro ya te respondió a esta cuestió en otro HILO...
Y se resume en: No HAY subscripción a EVENTOS DEL SISTEMA.

Lo que haces, es lo mismo que si tienes estas 3 órdenas:
Código:
Digo: "abriendo la puerta del coche" 
Ordeno a Juan: "Abre la puerta del coche"
Digo: "Puerta abierta"
Falla (la secuencia correctamente ordenada de sucesos), porque nada más das la orden de abrir, ya indicas 'abierto' sin esperar el tiempo prudencial a que lo abra.

La secuencia correcta sería...
Código:
Digo: "abriendo la puerta del coche"
Continuar = FALSE
Ordeno a Juan: "abre la puerta del coche y AVÍSAME cuando termines (con lo que sea que haya pasado)."
                                                             //<--- ojo: AQUÍ la subscripción al evento.
Espero: hasta que continuar = TRUE  // esto sólo si la orden es asíncrona como resulta ser...
...

// ante el evento cuando le llegue el mensaje...
AvisoDeJuan(aviso)
    Digo: aviso
    // sea cual sea el aviso: "Puerta abierta", "Puerta atascada", "Ya estaba abierta", "puerta cerrada",
    // "No tiene puerta", "Yo no soy Juan", "No lo veo, te han robado el coche"
    //        (vamos el equivalente a la unidad ya no está conectada, ¿fue extraída?), bla, bla, bla...
    Continuar = TRUE
fin avisoDeJuan

Una alternativa mediocre (pero que la mayor parte de las veces podría servir), sería no subscribirse a evento alguno, pero al menos dar un margen de tiempo para que abra, tal vez 2 segundos...
Código:
Digo: "abriendo la puerta del coche" 
Ordeno a Juan: "Abre la puerta del coche"
Espero: 2 segundos
Digo: "Puerta abierta"


p.d.: contínuamente estás preguntando una  y otra vez lo mismo, y la respuesta es siempre la misma... entiende la sincronicidad en la programación. Cuando se da y cuando no se dá y porqué.... si no seguirás dando palos de ciego, aquí y allá.


« Última modificación: 28 Noviembre 2017, 16:38 pm por NEBIRE » En línea

Meta


Desconectado Desconectado

Mensajes: 3.499



Ver Perfil WWW
Re: Crear funciones en est script
« Respuesta #2 en: 28 Noviembre 2017, 17:13 pm »

Lo tendré en cuenta, voy a investigar lo que dices. Gracias. ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema al crear funciones
Programación Visual Basic
taliban1707 4 1,810 Último mensaje 28 Marzo 2008, 20:36 pm
por taliban1707
(Cerrado) funciones java script no me funcionan
Desarrollo Web
Zeroql 5 4,916 Último mensaje 29 Julio 2011, 14:05 pm
por Zeroql
desactivar funciones php y ejecutar script
Seguridad
cybero 0 2,295 Último mensaje 17 Marzo 2012, 03:34 am
por cybero
¿Como crear un programa con estas funciones?
Programación Visual Basic
SD.- 1 2,071 Último mensaje 22 Septiembre 2012, 19:42 pm
por ~.L.~
¿miren video script de identi alguien sabe clonar sus funciones?
Dudas Generales
Weeken 1 2,777 Último mensaje 16 Marzo 2013, 17:47 pm
por Servia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines