|
11
|
Programación / Programación Visual Basic / Problemas para leer un RSS (Microsoft.XMLDOM)
|
en: 8 Junio 2011, 21:07 pm
|
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
|
Programación / Programación Visual Basic / Conversión de fecha (PubDate)
|
en: 6 Junio 2011, 06:32 am
|
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
|
Programación / Programación Visual Basic / [Reto]Punto A Punto
|
en: 15 Mayo 2011, 02:01 am
|
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 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) 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" 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
|
Programación / Programación Visual Basic / [RETO] GetMaskColor
|
en: 25 Marzo 2011, 17:48 pm
|
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
|
|
|
16
|
Programación / Programación Visual Basic / obligar el FocusRect
|
en: 8 Marzo 2011, 00:39 am
|
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
|
Programación / Programación Visual Basic / Command$ extraer archivos.
|
en: 13 Febrero 2011, 18:43 pm
|
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
|
Seguridad Informática / Análisis y Diseño de Malware / Consulta sobre inyeccion y detección
|
en: 12 Enero 2011, 12:54 pm
|
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.
|
|
|
20
|
Programación / Programación Visual Basic / [Source] Efecto Luvia de TV
|
en: 14 Diciembre 2010, 01:14 am
|
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 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 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
|
|
|
|
|
|
|