Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#7561
Scripting / Re: ejecuciones acciones consecutivas
18 Diciembre 2013, 23:11 PM
Hola

1. Debes usar las etiquetas de código.

2. Start /Wait

Cita de: CMDWAIT        Iniciar aplicación y esperar a que finalice

Saludos
#7562
Cita de: Ikillnukes en 18 Diciembre 2013, 14:45 PMBueno... No está mal, pero... :P Yo que se...

Ya, no se puede comparar con lo que sería una sección entera, pero es lo que hay xD
#7563
Si fuese un error sobre los 'requires' lo especificaría cláramente.

El error te está indicando que no se puede crear el archivo "ruby.exe" en la carpeta temporal donde se ""descompila"" el script junto al intérprete, y como el intérprete (Ruby.exe) no se puede crear pues no hay modo de leer el script.

Es un error extraño sin información adicional, no se porque puede ser, la verdad, podría ser un problema de permisos de usuario, comprueba que puedes crear/eliminar archivos de forma manual en la carpeta "%TEMP%". y prueba a ejecutar el script con permisos de Administrador.

Cita de: Slikp en 18 Diciembre 2013, 00:34 AMel 85% de las Pc donde pienso usar este script tiene el SO Xp y migrar de SO no es una opcion.
Hombre, antes que plantear migrar de SO, podrías proponer instalar Ruby en todas las máquinas y listo.

EDITO: Por desgracia en otros lares formularon la misma pregunta y parece que nadie pudo resolverla: http://stackoverflow.com/questions/17413073/ruby-ocra-executable-fatal-error-on-different-windows-version

Saludos
#7564
Cita de: Loco.AR en 17 Diciembre 2013, 21:34 PMPesaba que este control podría existir algo como:

Personálmente por cosas como esta nunca me gustó el BackGroundWorker.

La forma correcta de pausar/reusmir un BackgroundWorker es usando un ManualResetEvent:

EDITO: Fíjate que debes especificar manuálmente los lugares en donde el procedimiento se puede pausar (_busy.WaitOne), y esto debes especificarlo sólamente en el eventhandler DoWork.

Imports System.ComponentModel

Public Class BackgroundWork

   Private _busy As New Threading.ManualResetEvent(True)

   Private WithEvents MyWorker As New BackgroundWorker

   Public Sub StartBackgroundTask()
       MsgBox("Starting the Thread...")
       MyWorker.WorkerSupportsCancellation = True
       MyWorker.WorkerReportsProgress = True
       MyWorker.RunWorkerAsync()
   End Sub

   Private Sub MyWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) _
   Handles MyWorker.DoWork

       For i = 1 To 5
           _busy.WaitOne(Threading.Timeout.Infinite)
           MyWorker.ReportProgress(MsgBox("Thread is working... " & CStr(i)))
       Next i

   End Sub

   Private Sub MyWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
   Handles MyWorker.RunWorkerCompleted

       MsgBox("Thread Done!")

   End Sub

   Public Sub PauseWorker()

       If MyWorker.IsBusy Then
           _busy.Reset()
           MsgBox("Thread Paused!")
       End If

   End Sub

   Public Sub ContinueWorker()
       _busy.[Set]()
       MsgBox("Thread Resumed!")
   End Sub

End Class


EDITO 2: Un ejemplo mejor elaborado:

Código (vbnet) [Seleccionar]
' BackgroundWorker Example
'
' // By Elektro H@cker

#Region " Usage Examples "

'Public Class Form1

'    Private MyWorker As New BackgroundWork

'    Private Shadows Sub Load() Handles MyBase.Load
'        MyWorker.StartBackgroundTask()
'    End Sub

'    Private Sub Button_Pause_Click() Handles Button_Pause.Click
'        MyWorker.Pause()
'    End Sub

'    Private Sub Button_Resume_Click() Handles Button_Resume.Click
'        MyWorker.Resume()
'    End Sub

'    Private Sub Button_Cancel_Click() Handles Button_Cancel.Click
'        MyWorker.Cancel()
'    End Sub

'End Class

#End Region

#Region " BackgroundWorker "

Public Class BackgroundWork

    ''' <summary>
    ''' The BackgroundWorker object.
    ''' </summary>
    Private WithEvents MyWorker As New System.ComponentModel.BackgroundWorker

    ''' <summary>
    ''' ManualResetEvent object to pause/resume the BackgroundWorker.
    ''' </summary>
    Private _busy As New Threading.ManualResetEvent(True)


    ''' <summary>
    ''' This will start the BackgroundWorker.
    ''' </summary>
    Public Sub StartBackgroundTask()

        MsgBox("Starting the Thread...")
        MyWorker.WorkerSupportsCancellation = True
        MyWorker.WorkerReportsProgress = True
        MyWorker.RunWorkerAsync()

    End Sub

    ''' <summary>
    ''' This is the work to do on background.
    ''' </summary>
    Private Sub MyWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) _
    Handles MyWorker.DoWork

        For i = 1 To 5

            If MyWorker.CancellationPending = True Then
                e.Cancel = True
                Exit For
            Else
                _busy.WaitOne(Threading.Timeout.Infinite) ' Indicate that here can be paused the Worker.
                MyWorker.ReportProgress(
                    MsgBox("Thread is working... " & i)
                    )
            End If

        Next i

    End Sub

    ''' <summary>
    ''' This happens when the BackgroundWorker is completed.
    ''' </summary>
    Private Sub MyWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _
    Handles MyWorker.RunWorkerCompleted

        If e.Cancelled = True Then
            MsgBox("Thread cancelled")

        ElseIf e.Error IsNot Nothing Then
            MsgBox("Thread error")

        Else
            MsgBox("Thread Done!")

        End If

    End Sub

    ''' <summary>
    ''' This will pause the BackgroundWorker.
    ''' </summary>
    Public Sub Pause()

        If MyWorker.IsBusy Then
            _busy.Reset()
            MsgBox("Thread Paused!")
        End If

    End Sub

    ''' <summary>
    ''' This will resume the BackgroundWorker.
    ''' </summary>
    Public Sub [Resume]()
        _busy.[Set]()
        MsgBox("Thread Resumed!")
    End Sub

    ''' <summary>
    ''' This will cancel the BackgroundWorker.
    ''' </summary>
    Public Sub Cancel()
        _busy.[Set]() ' Resume worker if it is paused.
        MyWorker.CancelAsync() ' Cancel it.
    End Sub

End Class

#End Region


Entonces, desde el thread principal puedes hacer esto:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private MyWorker As New BackgroundWork

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       MyWorker.StartBackgroundTask()
   End Sub

   Private Sub Button_Pause_Click() Handles Button_Pause.Click
       MyWorker.PauseWorker()
   End Sub

   Private Sub Button_Resume_Click() Handles Button_Resume.Click
       MyWorker.ContinueWorker()
   End Sub

End Class


Saludos
#7565
Multimedia / Re: Programa audio
17 Diciembre 2013, 20:55 PM
Depende de cual sea el formato del archivo que quieres partir...

Para archivos mp3, el más sencillo es MP3DirectCut -> http://mpesch3.de1.cc/mp3dc.html

Saludos
#7566
Windows / Re: carpetas
17 Diciembre 2013, 18:19 PM
Cita de: Vaagish en 17 Diciembre 2013, 17:13 PMSi, pero el asunto dice carpetas

El asunto dice una cosa pero el tema dice otro (con algo más de lógica), ha saber lo que necesita.

Saludos
#7567
Windows / Re: carpetas
17 Diciembre 2013, 11:51 AM
Cita de: evgeni70 en 16 Diciembre 2013, 23:02 PMQueria saber si algun modo para las aplicaciones se abran directamente a pantalla completa

Poder, se puede hacer, programando un launcher especial.

Por poner un ejemplo básico, usando la aplicación NIRCMD junto a este código de VBScript que iría almacenado en "C:\Windows\system32"

nircmd -> http://www.nirsoft.net/utils/nircmd.html

RunMaximized.vbs
Código (vb) [Seleccionar]
' By Elektro H@cker

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")

Process  = ""    ' Process filepath.
Args     = ""    ' Process arguments.
ExitCode = 9009  ' Application not found ExitCode.

' Set the Process filepath.
Process = """" & WScript.Arguments(0) & """"

' Set the process arguments.
For Each Arg in WScript.Arguments

If not """" & Arg & """" = Process then
Args = Args & " " & """" & Arg & """"
End if

Next

' Launch the process.
WSH.Run Process & " " & Args, 1, False

' Wait two seconds.
WScript.Sleep(2 * 1000)

' Launch NirCMD to maximize the window process,
' Try it until NirCMD can found the process.
Do While ExitCode = 9009
ExitCode = WSH.Exec("NirCMD.exe" & " win max process " & """" & FSO.GetFileName(Process) & """").ExitCode
Loop

Wscript.Quit()



...y junto a este script de Regedit:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\exefile\shell\open\command]
@="Wscript.exe \"RunMaximized.vbs\" \"%1\" %*"


Ten en cuenta que esto podría afectar al inicio de sesión y a los programas que se inician junto a Windows, windows ejecuta una serie de procesos para poder inicializer, como svchost.exe, winlogon.exe, wininit.exe, y muchos más ...no lo he testeado hasta ese punto.

por ese motivo y por simple ética NO ME RESPONSABILIZO DE QUE SE JODA WINDOWS POR USAR EL SCRIPT DE ARRIBA.
#7568
@Ikillnukes

Mira lo que he encontrado buscando una cosa en el foro: [Hilo oficial] Desarrollo de Videojuegos

Saludos
#7569
Estás usando una herramienta equivocada, si quieres una sugerencia, teniendo sólamente Batch yo usaría el método "Sleep" de VBS para los milisegundos, usaría el lenguaje tanto para la espera como para randomizar.

Código (dos) [Seleccionar]
@Echo OFF

Set /A "MINWait=2000"
Set /A "MAXWait=4000"

(
Echo Randomize
Echo Wait = Int^(^(%MAXWait%-%MINWait%+1^)*Rnd+%MINWait%^)
Echo WScript.Sleep^(Wait^)
Echo Wscript.Quit^(Wait^)
) > "%TEMP%\Sleep.vbs"
wscript.exe "%TEMP%\Sleep.vbs"

Echo Tiempo esperado: %ErrorLevel%

Pause&Exit


Cita de: alehopio en 13 Diciembre 2013, 18:17 PMAhora investigaré como hacer un login automático en el email. ¿ Puedes indicarme alguna referencia al respecto?

Con puro Batch no es posible.

Desde la consola puedes intentar utilizar cUrl o Wget para loguearte y descargarte el código fuente de "X" página, y luego, parsear la salida obtenida para 'capturar' los datos que requieras, con un FOR /F.

-> http://curl.haxx.se/download.html (la versión genérica para Win32)

La verdad, yo nunca he intentado hacer esto con herramientas por consola en Batch, aquí tienes algo de info:

http://stackoverflow.com/questions/12399087/curl-to-access-a-page-that-requires-a-login-from-a-different-page
http://www.dyncommunity.com/questions/32854/how-to-use-wget-or-curl-to-login.html

saludos
#7570
Cita de: Slikp en 14 Diciembre 2013, 00:03 AM
si lo quiero usar en otra Pc lo mas logico es que tenga que instalar ruby y watir en esa pc, No hay alguna forma de saltarse ese paso? Por ejemplo Digo esto en mi ignorancia,  compilar todo en un .exe y que se ejecute en cualquier pc como una aplicacion comun y corriente para realizar la tarea?

Técnicamente no sería compilar, pero si que es posible, instálate una gema que se llama Ocra y podrás convertir tus scripts a executables.

-> http://rubygems.org/gems/ocra

PD: Ten en cuenta que las dependencias que uses (librerías como watir) también debes añadirlas junto al script principal en el momento de convertirlo todo a exe, esto lo hace automáticamente Ocra leyendo las importaciones que hayas escrito en el principio del script, pero no confies demasiado, este tipo de convertidores no son perfectos, algunas veces hay que añadir las dependencias de forma manual.

Me alegro de haber sido de ayuda,
Saludos