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

#451
Carece de sentido que en el diseño de la clase "Archivos" implementes un contador de ningún tipo, ya que si no te he entendido mal, la clase archivos se supone que sirve para representar una serie de rutas de archivos que están relacionados entre si, pues bien, eso es correcto, pero en ese caso eso sería todo lo que debes hacer con esa clase...

Así que deberías dar el diseño de esa clase por finalizado, y a partir de ahí eres tú el que debe declarar un contador (fuera de la clase "Archivos") y añadir/mostrar ese contador al añadir cada uno de esos items al ListBox, no al revés, es decir, no debe ser la clase "Archivos" la que deba representar por si misma y mostrar un índice al ser representado como texto ( Archivos.ToString() ) en un control, eso es mezclar cosas que no tienen nada que ver, y por ende no tiene sentido productivo. No se si me he explicado suficientemente bien.

De todas formas no tengo muy claro por que sientes la necesidad de usar una variable-contador que actue como índice de los items representados en el listbox, es decir, el índice del elemento lo puedes obtener directamente en la lista de elementos de dicho ListBox y mostrarlo si quieres junto al nombre del elemento, algo como por ejemplo:

Código (vbnet) [Seleccionar]
Me.ListBox1.BeginUpdate()
For i As Integer = 0 To (Me.ListBox1.Items.Count - 1)
   Me.ListBox1.Items(i) = String.Format("[{0:00}] {1}", i, Me.ListBox1.Items(i))
Next
Me.ListBox1.EndUpdate()


...o en su defecto siempre puedes añadir las instancias de la clase "Archivos" a un diccionario u otra colección apropiada para tus necesidades, en la que usar la "llave" como índice, y luego mostrarlo al añadir el valor/elemento en el listbox.

Pero en fin. Dices que ya lo intentaste con un "integer global" (imagino que te refieres a que usaste el modificador de visibilidad Public Shared) pero "no suma el contador y en todas da 0". Todo esto no se entiende mucho. Para empezar, no se sabe donde lo declaraste, ni cuando y como incrementas su valor, pero algo parece evidente, y es que si su valor siempre es 0, será que la unidad de código donde incrementas el valor nunca se llega a ejecutar, o si se ejecuta pero en realidad no llegas a incrementar el valor. No se pueden sacar otras conclusiones mientras no aportes más información.

Saludos.
#452
Cita de: ThunderCls en 24 Marzo 2019, 01:11 AM
HEX("48 6F 6F 6B 43 61 6C 6C 62 61 63 6B") = ASCII("HookCallback")
HEX("47 65 74 41 73 79 6E 63 4B 65 79 53 74 61 74 65") = ASCII("GetAsyncKeyState")

No si... es obvio que eso es formato Hexadecimal, mi sensación de extrañez viene dada a que el término "hex type" no significa absolutamente nada, y hay dos nombres codificados (HookCallback, GetAsyncKeyState) en lugar de uno (GetAsyncKeyState) por lo que no tiene equivalencia con lo que el usuario intentaba dar a mostrar como equivalente, así que no llegaba a estar muy claro lo que el usuario busca.

Además de que detectar esos bytes/strings en un archivo executable no lo convierte en virus como tal, ya que para empezar el nombre "HookCallback" en realidad puede ser cualquier otro nombre que el desarrollador haya querido darle a la función de callback del hook ( https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nc-winuser-hookproc ), aparte de que esto no tiene por que implicar que sea un código malicioso, ni mucho menos el uso de la función GetAsyncKeyState.
Por ende, considerar que un exe se trata de un virus simplemente por encontrar uno de esos dos strings, o ambos, me parece completamente inapropiado/inefectivo, más que nada por que cualquier código que use la función GetAsyncKeyState para otros menesteres y/o que haya declarado un hook de cualquier tipo (y aunque este fuese un hook del teclado o el ratón no-malicioso) y casualmente haya declarado una función con el nombre "HookCallback", no se salvará de un falso positivo en la frente por un "escaner" de este estilo.




Cita de: **Aincrad** en 22 Marzo 2019, 16:21 PM
Pero lo q no se como es que Obtuvieron esa Signatura HEXADECIMAL.

Puedes convertir un string a ese formato hexadecimal delimitado por espacios en blanco, así por ejemplo:

Código (vbnet) [Seleccionar]
Dim names As String() = {"HookCallback", "GetAsyncKeyState"}
Dim hexNames As String() = Array.ConvertAll(names, Function(str) BitConverter.ToString(Encoding.Default.GetBytes(str)).Replace("-"c, " "c))

For Each str As String In hexNames
   Console.WriteLine(str)
Next str


Saludos.
#453
Cita de: Sirvaude en 22 Marzo 2019, 05:24 AM
Es entonces aquí donde inicia mi búsqueda por un libro de ser posible creado por Microsoft

Microsoft ha hecho algo miles de veces mejor que publicar un libro físico...

y...

De todas formas, si quieres buscar libros de los autores entonces puedes empezar por los libros publicados por Anders Hejlsberg:

#454
Cita de: **Aincrad** en 21 Marzo 2019, 23:38 PM
HexType :

Código (vbnet) [Seleccionar]
Dim KeyboardHook As String() = {"48 6F 6F 6B 43 61 6C 6C 62 61 63 6B", "47 65 74 41 73 79 6E 63 4B 65 79 53 74 61 74 65"}

¿...?. ¿De donde has sacado eso?.
#455
Cita de: bettu en 19 Marzo 2019, 02:06 AM
También he notado que cuando contesto un tema y luego clicas en "Mostrar nuevas respuestas a tus mensajes" aparece el hilo que has contestado. No tiene mucho sentido, si la última respuesta ha sido la mia... si fuera de otros usuarios ya está bien (y lo hace bien).

IDEM. Eso me pasa siempre, y cuando respondo a un tema, despues de haberlo hecho tengo que volver a entrar a ese tema para que desaparezca la notificación de nuevos mensajes... lo cual es bastante molesto.
#456
Cita de: bettu en 19 Marzo 2019, 02:12 AM
¿Has visto 'Diario de una ninfómana'? No le fue muy bien precisamente...

Ficción vs. Realidad.

No la he visto, y no se si la película estará basada en la vida real de alguna mujer, pero igualmente sería un caso muy marginal el que una ninfómana se haga prostituta para satisfacer su apetito sexual...

creo que eso sería como si un obeso muy adicto a la carne y con un hambre insaciable se pone a trabajar en un McDonalds solo para poder comer hamburguesas gratuitas (imagino que el menú será gratuito para los trabajadores, vaya, pero de lo contrario da igual, es solo un ejemplo) al mismo tiempo que te pagan por preparar hamburguesas para los clientes.

Saludos!
#457
Cita de: doctorman en 19 Marzo 2019, 01:41 AM
según me informan el forista Engel Lex Venezolano pudiera tener al menos 4 meses de muerto por falta de medicinas de alto costo y escasas que necesitaba para estar con vida. rogemosle a Dios que esto no sea así y que siga con vida.

Cierta fuente de confianza con la que Engel mantenía o mantiene contacto, me dijo hace unos meses que sigue activo y cometando en su Facebook, por lo que muerto lo que se dice muerto... yo creo que no. Tu hipótesis se podría refutar simplemente confirmando si todavía sigue activo en Facebook...

Simplemente hay gente que comprensiblemente se cansa de estar día tras día en un foro y no vuelve a dar señales de vida, ya sea este un usuario, moderador o co-admin. Aceptemoslo y sin reproches, la rutina le puede cansar a todo el mundo. Aunque por otro lado pienso que debería haberse despedido como Dios manda, más que nada por la responsabilidad de ser co-admin.

Saludos.
#458
Pues ya que estamos, y aunque doy mal ejemplo al continuar comentando en un thread del 2016, comparto nostalgicamente este proyecto que hice en Batch-script y que les podría servir:


Saludos.
#459
Cita de: rigorvzla en 18 Marzo 2019, 14:54 PM
Es posible enviar un click a la posicion X. Y especifica de una ventana minimizada sin maximizar?

Sí, eso es lo que te acabo de explicar como hacer. Siempre puedes diseñar un Form de prueba con el que practicar enviandole mensajes con PostMessage y ver el comportamiento del Form al recibir estos mensajes de entrada del ratón cuando está minimizada, controlando los eventos Form.MouseDown, Form.MouseUp y Form.MouseClick o directamente el procedimiento de ventana WndProc. Pero vamos, que eso ya lo comprobé yo con una ventana minimizada y te aseguro que se puede clickar en X,Y coordenadas sin necesidad de maximizarla, de la forma que ya expliqué.

De todas formas siempre existe la rara posibilidad de que dependiendo de como haya sido programada una aplicación, la app pueda ignorar el input del teclado y/o ratón intencionadamente cuando está minimizada. Como alternativa a esto, siempre puedes colocar la ventana fuera de los límites visibles de la pantalla (off-screen), en vez de minimizarla.

Saludos.
#460
Para enviar pulsaciones ya sea del teclado o el ratón a una ventana minimizada, puedes usar la función PostMessage de la API de Windows:


Pasos a seguir para enviar la pulsación del botón izquierdo del ratón a una ventana minimizada:


  • Localizar la ventana que pretendes clickar, ya sea la ventana principal de un proceso, o una ventana hija ( ej. la ventana de un botón ). Para esto último deberás documentarte sobre las funciones FindWindowEx, EnumWindows, EnumChildWindows y relacionadas, o bien puedes recurrir a la API administrada de Microsoft UI Automation:
  • Activar dicha ventana enviandole el mensaje de ventana WM_ACTIVATE.
  • Enviarle a esa ventana el mensaje WM_LBUTTONDOWN seguido de WM_LBUTTONUP; o solamente el mensaje BM_CLICK en el caso de tratarse de la ventana de un botón.

No caigas en el típico error de enviarle el mensaje WM_LBUTTONDOWN y WM_LBUTTONUP a la ventana principal de un proceso posicionando las coordenadas sobre un control/ventana hija para clickarlo, por que en principio eso no te va a funcionar así; tienes que enviarle los mensajes a la ventana exacta que pretendas clickar, insisto.




Aquí tienes todo lo necesario:

( código extraido de mi librería comercial DevCase for .NET Faamework y modificado para adaptarse a las circunstancias. )

NativeMethods.vb
Código (vbnet) [Seleccionar]
' ***********************************************************************
' Author   : ElektroStudios
' Modified : 14-March-2019
' ***********************************************************************

#Region " Option Statements "

Option Strict On
Option Explicit On
Option Infer Off

#End Region

#Region " Imports "

Imports System.Diagnostics.CodeAnalysis

#End Region

#Region " NativeMethods "

' Namespace DevCase.Interop.Unmanaged.Win32

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Platform Invocation methods (P/Invoke), access unmanaged code.
''' <para></para>
''' This class does not suppress stack walks for unmanaged code permission.
''' <see cref="Global.System.Security.SuppressUnmanagedCodeSecurityAttribute"/> must not be applied to this class.
''' <para></para>
''' This class is for methods that can be used anywhere because a stack walk will be performed.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <remarks>
''' <see href="https://msdn.microsoft.com/en-us/library/ms182161.aspx"/>
''' </remarks>
''' ----------------------------------------------------------------------------------------------------
Public NotInheritable Class NativeMethods

#Region " Constructors "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Prevents a default instance of the <see cref="NativeMethods"/> class from being created.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   <DebuggerNonUserCode>
   Private Sub New()
   End Sub

#End Region

#Region " User32.dll "

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Places (posts) a message in the message queue associated with the thread that created
   ''' the specified window and returns without waiting for the thread to process the message.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <remarks>
   ''' <see href="https://msdn.microsoft.com/es-es/library/windows/desktop/ms644944%28v=vs.85%29.aspx"/>
   ''' </remarks>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="hWnd">
   ''' Handle to the window whose window procedure will receive the message.
   ''' <para></para>
   ''' If this parameter is <see cref="WindowMessages.HWND_Broadcast"/>,
   ''' the message is sent to all top-level windows in the system,
   ''' including disabled or invisible unowned windows, overlapped windows, and pop-up windows;
   ''' but the message is not sent to child windows.
   ''' </param>
   '''
   ''' <param name="message">
   ''' Specifies the message to be sent.
   ''' </param>
   '''
   ''' <param name="wparam">
   ''' Specifies additional message-specific information.
   ''' </param>
   '''
   ''' <param name="lparam">
   ''' Specifies additional message-specific information.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' If the function succeeds, the return value is <see langword="True"/>.
   ''' <para></para>
   ''' If the function fails, the return value is <see langword="False"/>.
   ''' <para></para>
   ''' To get extended error information, call <see cref="Marshal.GetLastWin32Error()"/>.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   <SuppressMessage("Microsoft.Interoperability", "CA1401:PInvokesShouldNotBeVisible", Justification:="Visible for API users")>
   <DllImport("User32.dll", SetLastError:=True)>
   Public Shared Function PostMessage(ByVal hWnd As IntPtr,
                                      ByVal message As Integer,
                                      ByVal wparam As IntPtr,
                                      ByVal lparam As IntPtr
   ) As <MarshalAs(UnmanagedType.Bool)> Boolean
   End Function

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Sends the specified message to a window or windows.
   ''' <para></para>
   ''' The SendMessage function calls the window procedure for the specified window
   ''' and does not return until the window procedure has processed the message.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <remarks>
   ''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx"/>
   ''' </remarks>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="hWnd">
   ''' A handle to the window whose window procedure will receive the message.
   ''' </param>
   '''
   ''' <param name="msg">
   ''' The message to be sent.
   ''' </param>
   '''
   ''' <param name="wParam">
   ''' Additional message-specific information.
   ''' </param>
   '''
   ''' <param name="lParam">
   ''' Additional message-specific information.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <returns>
   ''' The return value specifies the result of the message processing; it depends on the message sent.
   ''' </returns>
   ''' ----------------------------------------------------------------------------------------------------
   <SuppressMessage("Microsoft.Interoperability", "CA1401:PInvokesShouldNotBeVisible", Justification:="Visible for API users")>
   <DllImport("User32.dll", SetLastError:=True)>
   Public Shared Function SendMessage(ByVal hWnd As IntPtr,
                                      ByVal msg As Integer,
                                      ByVal wParam As IntPtr,
                                      ByVal lParam As IntPtr
   ) As IntPtr
   End Function

#End Region

End Class

' End Namespace

#End Region


NativeUtil.vb
Código (vbnet) [Seleccionar]
' ***********************************************************************
' Author   : ElektroStudios
' Modified : 09-September-2017
' ***********************************************************************

#Region " Option Statements "

Option Strict On
Option Explicit On
Option Infer Off

#End Region

#Region " Imports "

#End Region

#Region " Native Util "

' Namespace DevCase.Interop.Unmanaged.Win32

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Contains win32 related utilites.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <remarks>
''' <see href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx"/>
''' </remarks>
''' ----------------------------------------------------------------------------------------------------
Public NotInheritable Class NativeUtil

#Region " Constructors "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Prevents a default instance of the <see cref="NativeUtil"/> class from being created.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerNonUserCode>
       Private Sub New()
       End Sub

#End Region

#Region " Public Methods "

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Creates a (32-Bit Unsigned Integer) DWORD value from a LOWORD and a HIWORD.
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim value as UInteger = MakeDWord(UShort.MaxValue, UShort.MaxValue)
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="loWord">
       ''' The low-order WORD.
       ''' </param>
       '''
       ''' <param name="hiWord">
       ''' The high-order WORD.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' The resulting DWORD value.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Function MakeDWord(ByVal loWord As UShort, ByVal hiWord As UShort) As UInteger
           Dim loBytes As Byte() = BitConverter.GetBytes(loWord)
           Dim hiBytes As Byte() = BitConverter.GetBytes(hiWord)
           Dim combined As Byte() = loBytes.Concat(hiBytes).ToArray()

           Return BitConverter.ToUInt32(combined, 0)
       End Function

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Creates a lParam value from two <see cref="System.Int32"/> values.
       ''' <para></para>
       ''' You must call this method overload if you need to use negative values.
       ''' <para></para>
       ''' <seealso cref="Windows.Forms.Message.LParam"/>
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <remarks>
       ''' <see href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-makelparam"/>
       ''' </remarks>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim lParam as IntPtr = MakeLParam(Integer.MaxValue, Integer.MaxValue)
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="lo">
       ''' The low-order <see cref="System.Int32"/> value.
       ''' </param>
       '''
       ''' <param name="hi">
       ''' The high-order <see cref="System.Int32"/> value.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' The resulting lParam value.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Function MakeLParam(ByVal lo As Integer, ByVal hi As Integer) As IntPtr
           Dim loBytes As Byte() = {BitConverter.GetBytes(lo)(0), BitConverter.GetBytes(lo)(1)}
           Dim hiBytes As Byte() = {BitConverter.GetBytes(hi)(0), BitConverter.GetBytes(hi)(1)}
           Dim combined As Byte() = loBytes.Concat(hiBytes).ToArray()

           Return New IntPtr(BitConverter.ToInt32(combined, 0))
       End Function

       ''' ----------------------------------------------------------------------------------------------------
       ''' <summary>
       ''' Creates a lParam value from two <see cref="System.UInt16"/> values.
       ''' <para></para>
       ''' <seealso cref="Windows.Forms.Message.LParam"/>
       ''' </summary>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <remarks>
       ''' <see href="https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-makelparam"/>
       ''' </remarks>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <example> This is a code example.
       ''' <code>
       ''' Dim lParam as IntPtr = MakeLParam(UShort.MaxValue, UShort.MaxValue)
       ''' </code>
       ''' </example>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <param name="loWord">
       ''' The low-order WORD.
       ''' </param>
       '''
       ''' <param name="hiWord">
       ''' The high-order WORD.
       ''' </param>
       ''' ----------------------------------------------------------------------------------------------------
       ''' <returns>
       ''' The resulting lParam value.
       ''' </returns>
       ''' ----------------------------------------------------------------------------------------------------
       <DebuggerStepThrough>
       Public Shared Function MakeLParam(ByVal loWord As UShort, ByVal hiWord As UShort) As IntPtr
           Return New IntPtr(MakeDWord(loWord, hiWord))
       End Function

#End Region

   End Class

' End Namespace

#End Region


+

( código hecho al vuelo. )

Código (vbnet) [Seleccionar]
Const WM_ACTIVATE As Integer = &H6      ' https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-activate
Const WM_LBUTTONDOWN As Integer = &H201 ' https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-lbuttondown
Const WM_LBUTTONUP As Integer = &H202   ' https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-lbuttonup
Const MK_LBUTTON As Integer = &H1       ' https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-lbuttondown
Const BM_CLICK As Integer = &HF5        ' https://docs.microsoft.com/en-us/windows/desktop/controls/bm-click

Public Shared Sub SendLeftClickToWindow(ByVal hWnd As IntPtr, ByVal pt As Point)
   Dim wParam As IntPtr = New IntPtr(MK_LBUTTON)
   Dim lParam As IntPtr = NativeUtil.MakeLParam(pt.X, pt.Y)

   NativeMethods.SendMessage(hWnd, WM_ACTIVATE, IntPtr.Zero, IntPtr.Zero)

   NativeMethods.PostMessage(hWnd, WM_LBUTTONDOWN, wParam, lParam)
   Thread.Sleep(100)
   NativeMethods.PostMessage(hWnd, WM_LBUTTONUP, IntPtr.Zero, lParam)
End Sub

Public Shared Sub SendLeftClickToButton(ByVal hWnd As IntPtr)
   NativeMethods.SendMessage(hWnd, WM_ACTIVATE, IntPtr.Zero, IntPtr.Zero)
   NativeMethods.PostMessage(hWnd, BM_CLICK, IntPtr.Zero, IntPtr.Zero)
End Sub





Ejemplo para enviar la pulsación del botón izquierdo del ratón a la ventana principal de un proceso:
Código (vbnet) [Seleccionar]
Dim hWnd As IntPtr = Process.GetProcessById(...).MainWindowHandle
Dim pt As New Point(0, 0)
SendLeftClickToWindow(hWnd, pt)


Ejemplo para enviar la pulsación del botón izquierdo del ratón a una ventana de tipo BUTTON:
Código (vbnet) [Seleccionar]
Dim hWnd As IntPtr = New IntPtr(...)
SendLeftClickToButton(hWnd)


Si necesitas usar coordenadas negativas (Int32), en principio la sobrecarga de la función NativeUtil.MakeLParam que he compartido debería funcionar correctamente (para ser sinceros no he testeado mucho esa sobrecarga), de lo contrario debes adaptar el código teniendo en cuenta lo siguiente:

Y aquí tienes algo más de info y ejemplos que publiqué en otra pregunta relacionada:

EDITO: acabo de darme cuenta de que eres el mismo usuario que publicó esa otra pregunta... joder entonces todo esto que expliqué ya deberías saberlo, jeje.

Eso es todo. Saludos.