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

#6861
Buenas.

1.
No está permitido el doble post ni mucho menos el triple post, puedes utilizar el botón "Modificar" en el post principal para añadir toda la nueva información que creas conveniente.

2.
Citarmove /Y "%Path_origen1%\*.trn" %unidad_red:~0,3%%Path_destino1% move /Y "%Path_origen1%\*.bak" %unidad_red:~0,3%%Path_destino1%move /Y "%Path_origen1%\*.log" %unidad_red:~0,3%%Path_destino1%

Intenta proporcioanr el código con un formato legible para todos, además, esa concatenación de comandos que has echo no está nada bien y puede resultar conflictiva, separa las instrucciones en lineas y cierra los argumentos para no dejar variables abiertas como haces:
Código (dos) [Seleccionar]
Comando 1, Linea 1: Move /Y "%origen%" "%destino%"
Comando 2, Linea 2: Move /Y "%origen%" "%destino%"


De todas formas, prueba con la lógica del comando RoboCopy (o en su defecto XCopy).

Saludos
#6862
No se si te podré ayudar mucho, pero respecto a darle foco a una aplicación externa, puedes utilizar la función SetForegroundWindow, pasándole como parámetro el handle de la ventana del proceso (que no el PID).

Documentación de la API:
· SetForegroundWindow function

Declaraciones al estilo VB6:
Código (vb) [Seleccionar]
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Long

O bien puedes utilizar el método AppActivate de VB, pasándole como parámetro el título de la ventana del proceso.

¿Como obtener el título de la ventana sabiendo unicamente el nombre del proceso?
Pues en Vb.NET es sencillo, la verdad es que el Framework lo pone bien a disposición en tan solo un par de instrucciones, y yo no manejo VBA, pero parece que tienes mucha labor por delante con varias funciones de la WinAPI, imagino que podrías recurrir a alguna otra función o que quizás las classes de WMI dispondrán de alguna propiedad para obtener ese dato sí que podrías realizar una query por WMI, informate sobre ello.

De todas formas mírate la función GetWindowText, te servirá para obtener el título d ela ventana una vez ya haya conseguido obtener el Handle de la ventana dado el nombre del proceso.

Código (vb) [Seleccionar]
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

EDITO:
Aquí tienes una solución para obtener el PID según el nombre de un proceso, le podrías enviar el resultado a la API GetWindowText obteniendo el handle de la ventana según el PID, o bien adaptar el código apra que devuelva directamente el texto y no el PID.

http://www.vbforums.com/showthread.php?537531-RESOLVED-How-to-find-Process-Handle-by-Process-Name

Saludos.
#6863
Hola

Aquí tienes la respuesta extendida a tu pregunta.

De todas formas te advierto que si tienes pensado controlar y manipular el estado de un hilo entonces deberias olvidar el uso de la Class Thread, ya que los métodos para pausar/continuar son obsoletos e intrusivos (como nos explican en MSDN), y en su defecto deberías utilizar la Class BackgroundWorker para manejar hilos, te llevaría bastante más escritura de código (de echo yo escribo una Class distinta para meter todo lo relacionado con cada BackgroundWorker) pero sin duda es más eficiente.

Saludos
#6864
Una alternativa bastante sucia, dada la prohibición de adjuntar más de 1 consola por proceso, podría ser esta:

Por cada thread que inicies, ejecutas una CMD (instanciando la Class Process, nada de adjuntar mediante la WinAPI), y ya tendrías una consola "adjuntada" y distinta por cada thread, con todo el control necesario para escribir en el Buffer de cada una de ellas.

Saludos.
#6865
Puedes obtener el nombre del método que lanzó la excepcion, utilizando la propiedad Exception.TargetSite.

CitarGets the method that throws the current exception.

Nota: Pero antes de pensar en usarlo para todas las circunstancias, deberías leer las "Remarks" del MSDN.

Ejemplo de uso:

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

   Private Sub Test() Handles MyBase.Shown

       Try
           Me.Method1()
           Me.Method2()

       Catch ex As Exception
           MessageBox.Show(String.Format("Nombre del método: {0}", ex.TargetSite.Name))

       End Try

   End Sub

   Private Sub Method1()
       Exit Sub
       Throw New InvalidOperationException
   End Sub

   Private Sub Method2()
       Throw New InvalidOperationException
   End Sub

End Class


PD: También está disponible el nombre del método en el StackTrace, pero deberías parsear el String resultante, solo te lo comento como dato adicional porque sería una tontería hacer eso, ya que TargetSite obtiene el nombre desde el StackTrace, así que además si el StackTrace está vacío tampoco habrá un TargetSite accesible.

Saludos.
#6867
¿Puedes proporcionar una url con un "juego" o un servico de combinaciones real donde se utilice ese algoritmo?.

Sinceramente, no se o no me viene a la cabeza que es eso de la "rueda de códigos infantil" ni "rueda cargada" xD.
#6868
Como ya te expliqué sería mejor que te guiases por el código de antes y hacerle las modificaciones que resulten necesarias (lo digo por el nuevo post que has publicado con un código muy distinto), creo que tú entiendes mejor que yo el resultado que esperas obtener...

Mira a ver si es esto lo que quieres:

Establezco los números "guía" con sus números "asociados" (solo 20 guías), luego hago 80 combinaciones con los números "asociados" con una longitud de 6 números, y luego ordeno cada combinación de menor a mayor.
Si algo de lo que acabo de comentar no es correcto, intenta ser específico.

PD: Pueden darse combinaciones repetidas, pero una vez aclarado, en caso de que sea esto lo que buscas, entonces te diré como eliminar repetidas.

Código (vbnet) [Seleccionar]
Public Class ComboTest : Inherits Form

#Region " Objects, Vars "

   ' La Class "Random", es necesaria para desordenar una colección
   ' y esta declaración tiene que ir siempre fuera de cualquier Sub.
   Private ComboRandomizer As New Random

   ' El control que creo en tiempo de ejecución, donde mostraré las combinaciones.
   Private rtb As New RichTextBox With
           {
             .Dock = DockStyle.Fill,
             .Font = New Font("Lucida Console", 10.0F)
           }

   ' Una "palanca" para habilitar/deshabilitar el bloque de depuración.
   Private EnableDebug As Boolean = False

   ' Instancio una lista donde iremos guardando cada combinación obtenida.
   Private Combos As New List(Of Integer())

   ' Otra lista donde le daré el formato deseado a los números.
   Dim ComboStrings As List(Of String) = Nothing

   ' El máximo de combinaciones.
   Private Property MaxCombos As Integer = 80I

   ' El máximo de longitud para cada combinación.
   Private Property MaxComboLength As Integer = 6I

   ' Los números "guías" que usaremos para rellenar cada combinación.
   'Private ReadOnly Numbers As Integer() =
   '    (From n As Integer In
   '     ("01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20-" &
   '      "21-22-23-24-25-26-27-28-29-30-31-32-33-34-35-36-37-38-39-40-" &
   '      "41-42-43-44-45-46-47-48-49-50"
   '     ).Split({"-"}, StringSplitOptions.RemoveEmptyEntries)).ToArray

   ' Izquierda: Número "guía"
   ' Derecha: Número asociado
   Private ReadOnly NumberWheel As New Dictionary(Of Integer, Integer) From
     {
         {1, 21}, {2, 22}, {3, 23}, {4, 24}, {5, 25},
         {6, 26}, {7, 27}, {8, 28}, {9, 29}, {10, 30},
         {11, 31}, {12, 32}, {13, 33}, {14, 34}, {15, 35},
         {16, 36}, {17, 37}, {18, 38}, {19, 39}, {20, 40}
     }

#End Region

#Region " Constructors "

   ' De este Sub no hagas caso, es el constructor del Form.
   Public Sub New()

       ' This call is required by the designer.
       ' Add any initialization after the InitializeComponent() call.
       InitializeComponent()

       With Me
           ' Seteo algunas propiedades sin imortancia.
           .Size = New Point(320, 480)
           .StartPosition = FormStartPosition.CenterScreen
           ' Añado el control al Form.
           .Controls.Add(rtb)
       End With

   End Sub

#End Region

#Region " Event-Handlers "

   Private Sub ComboTest() Handles MyBase.Shown

       Me.DoCombos()
       Me.PrintCombos()

   End Sub

#End Region

#Region " Methods "

   ' La función que se encarga de desordenar y devolverte una combinación.
   ' By Elektro.
   'Friend Function GetRandomCombination(Of T)(ByVal [Collection] As IEnumerable(Of T),
   '                                          ByVal [Length] As Integer) As IEnumerable(Of T)

   '    Return (From Item As T In [Collection]
   '            Order By ComboRandomizer.Next
   '            Take [Length]).ToArray

   'End Function

   Friend Function GetRandomCombination(Of T)([Collection] As Dictionary(Of T, T),
                                              [Length] As Integer) As IEnumerable(Of T)

       Return (From Item As KeyValuePair(Of T, T) In [Collection]
               Select Item.Value
               Order By ComboRandomizer.Next
               Take [Length]).ToArray

   End Function

   Private Sub DoCombos()

       ' Añadir combinaciones a la lista, hasta que la lista tenga 'MaxComboLength' (80) elementos.
       Do Until Combos.Count = (MaxCombos - 1)

           ' Obtengo una combinación.
           Dim tmpCombo As Integer() = Me.GetRandomCombination(Of Integer)(NumberWheel, MaxComboLength)

           ' Ordeno los elementos de la combinación, de menos a mayor.
           Array.Sort(tmpCombo)

           ' Añado la combinación a la lista.
           Combos.Add(tmpCombo)

       Loop

       ' Ordeno los elementos de la lista, basandome en el orden de los elementos de cada Array.
       ' NOTA: Puede tener fallos al ordenar, no aseguro que el orden sea perfecto.
       Combos = (From Combo As Integer() In Combos Order By Convert.ToDecimal(String.Join("", Combo)) Ascending).ToList
       Combos = (From Combo As Integer() In Combos Order By Combo.First Ascending).ToList

       ' Además, creo utra lista Strings, para darle formato a cada combo numérico,
       ' y añadirle así un "0" a los números del "1" al "9" y que quede más bonito en la previsualización xD.
       Me.ComboStrings =
           (From Combo In Combos
            Select (String.Join(" | ", From Value As String In Combo
                                      Select If(Value.Length = 1, "0" & Value, Value)))).ToList

#If DEBUG Then

       ' El bloque de depuración.
       ' Este bloque entero es para testear el formato que le quieras dar.
       If Me.EnableDebug Then

           Dim sb As New System.Text.StringBuilder

           With sb

               For Index As Integer = 0 To (MaxCombos - 1)

                   sb.AppendLine(String.Format("Combo sin formato:"))
                   sb.AppendLine(String.Join(", ", Combos(Index)))
                   sb.AppendLine()
                   sb.AppendLine(String.Format("Combo con formato:"))
                   sb.AppendLine(String.Join(", ", ComboStrings(Index)))

                   MessageBox.Show(sb.ToString, "", MessageBoxButtons.OK, MessageBoxIcon.Information)

                   sb.Clear()

               Next Index

           End With

       End If

#End If

   End Sub

   Private Sub PrintCombos()

       ' Muestro los Combos en el control.
       With Me.rtb

           .SuspendLayout()
           For Each Combo As String In Me.ComboStrings
               .AppendText(Combo)
               .AppendText(Environment.NewLine & New String("-", Combo.Length) & Environment.NewLine)
           Next Combo
           .ResumeLayout()

           .Select(0, 0)

       End With

   End Sub

#End Region

End Class
#6869
Si una aplicación no no puede interactuar de forma legítima con otro proceso (Sockets, Remote Object, etc...) cuando ese debería ser su proposito en este caso, entonces está mal desarrollada.

Tu pregunta trata sobre un software que no ha sido desarrollado para la interacción entre procesos, y eso complica las cosas,
la función sendmessage (enviando el message WM_GETTEXT) es algo que se inventó en el siglo pasado cuando las aplicaciones todavía no eran capaces de estar aisladas unas de las otras (cuando el término "isolation" no existía aún en lo referente a la programación de Software), pero en este siglo se debería evitar el uso de la WinAPI para hacer estas cosas, la verdad, al menos NO en caso de que los dos proyectos sean de tu propiedad y eso signifique que puedas editar los proyectos, entonces deberías escuchar la primera sugerencia de @KuBox para buscar otras soluciones.

De todas formas si te empeñas en hacerlo usando la WinAPI (que tampoco es que sea algo malo, pero según se mire es una mala práctica), puedes empezar por buscar y escribir en tu código las declaraciones de todas estas funciones e informarte sobre el uso de ellas, así como el uso de los métodos de Marshal que te pondré al final que también te pueden servir como alternativa, y cuando lo tengas todo listo, ya podremos seguir hablando sobre el tema:

· FindWindowEx function
· WindowFromPoint function
· GetClassName function
· EnumChildWindows function

· SendMessage function
· WM_GETTEXT message
· WM_GETTEXTLENGTH message

· Marshal.AllocHGlobal Method
· Marshal.PtrToStringUni Method

Nota: Ten en cuenta que a cada Control de una aplicación se le asigna un Handle, pero además la zona vacía para escribir en ese Control segúramente tendrá otro Handle distinto.

Nota 2:
Cita de: Adrylek en 12 Julio 2014, 02:27 AMLo he intentado, pero no he conseguido nada..
Al menos yo, al hablar sobre la WinAPI, mientras no muestres un código con tu progreso me limitaré solamente a ofrecerte información.
#6870
Scripting / Re: indetectable
11 Julio 2014, 14:06 PM
Los empaquetadores (conversores de "X" a "EXE"), sobre todo si son famosos pero sin buena reputación, suelen estar fichados por todos los antivirus como una "HackTool" o variantes de ese estilo, a pesar de que se usen con buenos fines ...por supuesto se conoce que otras muchas personas utilizan ese tipo de herramientas con fines ilegales.

Puedes probar el Software ExeScript de ScriptCode.com, nunca me dió ese tipo de problemas con Bats ni Vbs's.

De lo contrario, puedes intentar usar Themida o algún otro protector para indetectabilizar (en la medida de lo que sea posible) tu executable.

Saludos.