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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1]
1  Programación / Programación Visual Basic / Encontrar una cadena en una lista de cadenas con 3 opciones en: 21 Marzo 2020, 18:33 pm
Hola a todos:

Ya se que pensareis que es una pregunta muy documentada pero...
Tengo un montón de ejemplos de código para, en teoría, hacer esto, pero ninguno funciona.

Explico lo que se necesita.

Tengo por ejemplo, estos nombres de archivos en un ListBox:
Sonia
SoniA - Co(2)
sOnIa - copia
sonia
Dario_Sonia_1
PepeSoNia_2(a)
OscarMariSoniA
Imagen_1
JorjePepe_2

Y el nombre a buscar en el ListBox es "Sonia"

Y hay 3 posibilidades de coincidencias, dependiendo de el estado de 2 CheckBox

1 - nombre exacto en nº de caracteres y case sensitive en cada una de las letras
solo devolvería"Sonia"

2 - nombre que contiene mismo nº de caracteres y case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "Dario_Sonia_1"

3 - nombre que contiene mismo nº de caracteres y No case sensitive en cada una de las letras
devolvería "Sonia"
devolvería "SoniA - Co(2)"
devolvería "sOnIa - copia"
devolvería "sonia"
devolvería "Dario_Sonia_1"
devolvería "PepeSoNia_2(a)"
devolvería "OscarMariSoniA"

Yo he escrito un código que funciona al 100%, pero lo publico aquí por si alguien me sugiere si hay una forma mas fácil, o más "profesional" de hacerlo.
Y no comprendo como no he sido capaz de encontrar un código que haga esto en ningún sitio, supongo que no seré el único que necesita este tipo de código.

Esto es lo que tengo:


Código
  1.  
  2. Private sub Buscar(s1 as string,busca as string)
  3.        If Form1.CheckExacto.Value = 1 Then  'Exacto
  4.            If s1 = busca Then
  5.                'lo ha conseguido
  6.                Exit Sub
  7.            Else
  8.                Exit Sub
  9.            End If
  10.        End If
  11.        If Form1.CheckCase.Value = 0 Then   'No Case sensitive
  12.                Test = Igual(s1, busca, False)
  13.                If Test Then
  14.                    'lo ha conseguido
  15.                Else:
  16.                    Exit Sub
  17.                End If
  18.                Exit Sub
  19.        Else    'Case sensitive
  20.                Test = Igual(s1, busca, True)
  21.                If Test Then
  22.                    'lo ha conseguido
  23.                Else:
  24.                    Exit Sub
  25.                End If
  26.                Exit Sub
  27.        End If
  28.  
  29. Public Function Igual(st As String, buscar As String, Sen As Boolean) As Boolean
  30.    Dim i As Integer, s As String, L As Integer, s1 As String, c As Byte, letra As Byte
  31.    s = Trim(st)
  32.    L = Len(buscar)
  33.    letra = Asc(Left(buscar, 1))
  34.    Igual = False
  35.    For i = 1 To Len(s)
  36.        c = Asc(Mid(s, i, 1))
  37.        s1 = Mid(s, i, L)
  38.        If Compara(s1, buscar, Sen) Then
  39.            Igual = True
  40.            Exit For
  41.        End If
  42.    Next
  43. End Function
  44.  
  45. Public Function Compara(dato As String, Busca As String, Sen As Boolean) As Boolean
  46.    Dim i As Integer, c As Byte, n As Integer, b As Byte
  47.    n = 0
  48.    For i = 1 To Len(Busca)
  49.        c = Asc(Mid(dato, i, 1))
  50.        b = Asc(Mid(Busca, i, 1))
  51.        If Sen Then
  52.            If c = b Then
  53.                n = n + 1
  54.            End If
  55.        Else
  56.            If (c Or &H20) = b Or c = b Or (c Xor &H20) = b Then
  57.                n = n + 1
  58.            End If
  59.        End If
  60.    Next
  61.    If n = Len(Busca) Then
  62.        Compara = True
  63.    End If
  64. End Function
  65.  
  66.  

Un saludo.
2  Programación / Programación Visual Basic / Alguien sabe como conseguir esto en: 4 Febrero 2020, 13:39 pm

Hola a todos;
Estoy haciendo un programa que carga imágenes, las salva en una carpeta, y luego  las procesa.
Después visualiza, utilizando el Visualizador de fotos de Windows, las originales y las procesadas para poder compararlas, conmutando las 2 imágenes pulsando los botones 3 o 5, en la imagen del Visualizador de fotos de Windows, o pulsando las teclas Dcha o Izq del teclado.
Pero hay que cerrar las ventanas que enumero mas abajo, para que el usuario no pueda utilizar los menúes, ni los botones 1, 2, 4, 6, 7 y 8 de la imagen.

Se como obtener los Hwnd de las ventanas del Visualizador de fotos de Windows de estas clases, que se ven en la imagen:
   photos_navigationpane
        photos_navigationbar
   photos_commandbar
        photos_buttonex

Pero dentro de la ventana photos_buttonex (color naranja en la imagen)
Hay 8 button numerados del 1 al 8 en la imagen, que en realidad tambien son ventanas, por que tienen Hwnd cada uno.
Y necesito obtener el Hwnd de cada uno, y no veo la forma de hacerlo.
Por que con el código que utilizo para obtener los Hwnd de las clases(ventanas)
photos_navigationpane, photos_navigationbar, photos_commandbar, y photos_buttonex, no me sirve por que no detecta los 8 botones.

El código es este:
Código:
Public Sub EnumChildProc(ByVal hWnd As Long)
    Dim hChild As Long, ret As Long, Caption As String, i As Integer
    Form5.ListMemoRuta.Clear
    hChild = FindWindowEx(hWnd, 0, vbNullString, vbNullString)
1:
    Do While hChild <> 0
        DoEvents
        'Llenamos un Buffer
        ClassName = Space$(128)
        'Recupera el Classname y lo devuelve en el Buffer
        ret = GetClassName(hChild, ClassName, 128)
        'Extraemos el nombre de la clase
        ClassName = LCase(Left$(ClassName, ret))
        Caption = String(GetWindowTextLength(hChild), Chr$(0))
        If InStr(ClassName, "photos_navigationpane") Then
            If Todo Then Form5.ListMemoRuta.AddItem hChild
            navigationpane = hChild
        ElseIf InStr(ClassName, "photos_commandbar") Then
            Form5.ListMemoRuta.AddItem hChild
        ElseIf InStr(ClassName, "atl:") Then
            Form5.ListMemoRuta.AddItem hChild
        ElseIf InStr(ClassName, "photos_navigationbar") Then
            If Todo Then Form5.ListMemoRuta.AddItem hChild
            navigationbar = hChild
        ElseIf InStr(ClassName, "photo_lightweight_viewer") Then
            'Form5.ListMemoRuta.AddItem hChild
            viewer = hChild
        ElseIf ClassName = "photos_buttonex" Then
            buttonex = hChild
        End If
        hChild = GetNextWindow(hChild, 2)
    Loop
    'lista de clases que hay que cerrar
2:
    For i = 0 To Form5.ListMemoRuta.ListCount - 1
        hChild = Form5.ListMemoRuta.List(i)
        Call SendMessage(hChild, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)
        Form5.ListMemoRuta.RemoveItem (i)
        GoTo 2
    Next


Pero con un timer y este código:

Código:
'Obtiene la coordenada del Mouse
ret = GetCursorPos(Cor)
'Recuperamos el HWND de la ventana asociada a esa coordenada
Handle = WindowFromPoint(Cor.x, Cor.y)
'Para calcular el ancho actual de la ventana
Call GetClientRect(Handle, rct)
If ClassName = "photos_buttonex" Then
        If rct.Right = 51 And rct.Bottom = 25 Then
                 'son los botones de 3  y  5 de la imagen
                 'no hace nada, por que son los que utiliza el programa
        Else
                 'cierra estas ventanas(botones), para que no el usuario no pueda pulsarlos
                  Call SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)
        End If
End If

Al pasar el cursor del ratón encima del área de los botones 1, 2, 4, 6, 7 y 8, se cierran, por que solo de esta forma consigo obtener los Hwnd de cada uno, en la variable Handle del código.
Alguien sabe como conseguir los Hwnd de los botones 1, 2, 4, 6, 7 y 8 con código, sin tener que pasar el cursor del ratón encima de cada uno.
Y en el caso de que no se pueda o nadie lo sepa:

Alguien puede sugerirme el código para que el programa ponga el cursor del ratón encima del centro de cada uno de estos botones del  Visualizador de fotos de Windows(tengo las coordenadas X,Y de cada uno), para poder obtener el Handle, y así poder cerrarlos con Call SendMessage(Handle,WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)

Por que no he conseguido nada que funcione.

Espero que me podáis ayudar a conseguirlo.

Gracias y un saludo.
3  Programación / Programación Visual Basic / No puedo utilizar Load Label en PictureBox en: 19 Junio 2018, 19:31 pm
Hola a todos:

Esta pregunta parece obvia y simple, pero me está volviendo loco..
Tengo un proyecto con 14 Forms, en el principal (Main) tengo un PictureBox donde se grafican lineas, círculos,etc.
Hasta aquí todo correcto, pero este PictureBox, contiene imágenes, TextBox, y ListBox.
Todo funciona OK, pero he tenido que poner 30 Labels que necesito en tiempo de diseño, por que si pongo solo una, por ejemplo Label1 con índice 0 Label1(0), y luego cargo mas en tiempo de ejecución con un For-Next, Load Label1(i), etc, me sale un error "Uso no válido de la propiedad" y no me explico por que.
En el resto de los Foms si me deja hacerlo, y no me lo explico.

Alguna ayuda?

Gracias.
4  Programación / Programación Visual Basic / Mover items seleccionados de ListBox e insertarlos en otro ListBox en: 8 Septiembre 2015, 20:33 pm
Hola a todos:

A ver si alguien me puede echar una mano, que me estoy volviendo loco.
Tengo 2 ListBox List A y List B, que se ven en la imagen.
Los dos tienen los mismos items, List B es una copia de List A.

Y lo que quiero es, según se ve en la imagen, mover los items de List B, e insertarlos en List A debajo del item de List A que tiene seleccionado, y claro esta que esos mismos items de List B, se borren en List A.
Utilizo 2 ListBox por que List A es MultiSelect = 0, y List B Multiselect = 2.

La operación realmente sería mover de sitio los seleccionados en List B, en List A.

Un saludo.  
5  Programación / Programación Visual Basic / Por que Un ListBox con mas de 32767 items no funciona en: 30 Agosto 2015, 17:29 pm
Hola a todos:

Tengo un problema que me desconcierta, tengo este simple código, para quitar todos los Items seleccionados, el ListBox tiene MultiSelect = 2 - Extended:

Código:
Private Sub NoSeleccion()
    Dim i As Long
    Ocupado = True
    For i = 0 To List2.ListCount - 1
       List2.Selected(i) = False
    Next
    Ocupado = False
End Sub

Pues mi sorpresa es que List2 después de llenarlo tiene 57647 items y este bucle For, simplemente no funciona por que List2.ListCount tiene un valor de -45.
Y además List2.Listindex a partir de 32768 su valor, en lugar de 32769 tiene un valor de -32767.
Por lo que deduzco que el puntero trabaja como Integer + - 32767, he buscado información sobre este tema pero no encuentro nada.

Y entonces que se puede hacer con ListBox que almacenen mas de 32767 items.

Hay alguna forma de solucionar esto, se puede manejar este ListBox mediante SendMessage?

Agradecería cualquier ayuda por que no salgo de mi asombro.

Un saludo.
6  Programación / Programación Visual Basic / Salvar JPG con mucho menos peso sin perder calidad en: 8 Mayo 2015, 19:37 pm
Hola a todos:

Os explico mi necesidad, y de paso esto os puede servir a muchos para diminuir mucho el peso de imágenes JPG hechas con cámaras digitales o móviles.

Por casualidad descubrí que abriendo una imagen JPG en msPaint de Windows XP, y sin hacer nada con ella, salvarla con Ctr+g o en el Menú...Archivo...Guardar, lógicamente con el mismo nombre, ahora esa imagen pesará entre el 30 al 85 % menos, un ejemplo real con una de mis imágenes hecha con una cámara Cannon EOS 600D:
Imagen original  pesa 8.89 Mb, la misma cargada en msPaint y salvada pesa 1.44 Mb, o sea 83,80 % menos.
Comparadas en el visor de imágenes de Windows, son exactamente iguales no hay perdida de resolución, no eres capaz de distinguirlas, y con Zoom en Photosop son exactamente iguales y la ficha EXIF también.

Si alguien lo duda que haga la prueba, y si alguien sabe por que ocurre esto que me lo explique.

Entonces he hecho una aplicación, donde hago un Drag & Drop de una carpeta donde haya imagenes JPG, o de varios archivos seleccionados de una carpeta, y solo los que sean JPG se cargan sus rutas completas en un ListBox, luego al pulsar un botón, se genera una carpeta donde se copian todos los JPG's originales de la lista.
Y a continuación se cargaran uno a uno en Paint, y se salvan mandando con SendKeys las pulsaciones Ctr+g, por que no he podido conseguir como mandarle el comando 'Guardar' a Paint desde vb6, si alguien sabe como hacerlo por favor explicármelo.

Pero necesito hacer esa misma aplicación para Windows 7, y el msPaint de Win7, utilizando el mismo 'truco' que el de XP, no reduce nada el peso, pero ejecutando una copia del msPaint de Win XP desde Win7, si funciona y lo hace igual que lo que he mencionado.

Entonces la idea es, tengo una copia de msPaint de Win XP, que se llama 'SDpaint.exe'   

Y la aplicación al ejecutarse, abre 'SDpaint.exe' con Shell:
 
Y lo que necesito, es que una vez 'SDpaint.exe' esta abierto, sin ninguna imagen, desde mi aplicación cargar una serie de imágenes.jpg una a una desde la lista de un ListBox (que tiene la ruta completa de la imagen), pero en el 'SDpaint.exe' abierto al principio, no me sirve cerrar 'SDpaint.exe' y cargar una imagen en un nuevo 'SDpaint.exe', cerrarlo y cargar la siguiente abriendo otro.

He probado capturando primero el hWnd del 'SDpaint.exe' abierto, en la variable LhWnd , para utilizarlo con ShellExecute así:
L = ShellExecute(LhWnd, "Open", ListFiles.List(i), "", "", 0)
Pero ejecuta el visor de imágenes de Windows, no carga la imagen en el Paint abierto, y creo que esto se debe poder hacer, no encuentro nada en Internet.

Agradecería cualquier ayuda, perdonad el tocho.

Un saludo.
7  Programación / Programación Visual Basic / Como leer info del área de notificación en: 15 Enero 2014, 13:18 pm
Hola a todos:

He hecho una aplicación que necesita poder leer el tiempo de conexión de mi modem ADSL, he buscado por la red y no encuentro nada, ni siquiera se si esto es posible hacerlo con VB6.

Agradecería mucho algo de información al respecto.

Adjunto 2 imágenes para que se entienda bien lo que quiero.








Saludos.



No se ve bien la primera imagen, este es el link para poder verla a tamaño real.

http://www.casimages.es/i/140115011940468355.jpg.html][IMG]http://nsae01.casimages.net/img/2014/01/15/mini_140115011940468355.jpg

Lo que quiero poder leer es la duración que está señalada con una flecha roja en la imagen.

Gracias, y perdón por mi torpeza con esto
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines