1
Visual Basic 6 / Re:NokilonServer
« en: Abril 05, 2022, 08:25:18 pm »
Your code is very good. Just a little complicated for me, especially with winsock api.thanks
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
If LenB(Args) Then
Select Case Args
Case "-a .", "-a": Args = vbNullString
Case Else
If Left$(Args, 3) = "-a " Then Args = Right$(Args, Len(Args) - 3)
Args = Replace$(Args, "\", "")
Args = mvParseLocalPath(Args)
If Not PathExist(Args) Then
Send "450 Invalid file name or path"
If SOCKET_DATA Then RemoveSH SOCKET_DATA
Exit Sub
End If
End Select
Public Sub PutIcon32Bit(ByVal hWnd As Long, ResIcon As Variant)
Dim hicon As Long
hicon = LoadImage(App.hInstance, ResIcon, 1, 32 * mdpi_, 32 * mdpi_, &H8000& Or &H1000)
If hicon Then DestroyIcon SendMessage(hWnd, &H80, 1, ByVal hicon)
hicon = LoadImage(App.hInstance, ResIcon, 1, 16 * mdpi_, 16 * mdpi_, &H8000& Or &H1000)
If hicon Then DestroyIcon SendMessage(hWnd, &H80, 0, ByVal hicon)
' Const ICON_BIG As Long = 1
' Const ICON_SMALL As Long = 0
' Const WM_SETICON As Long = &H80
' hIcon = LoadIcon(App.hInstance, ResIcon)
' Call SendMessage(hWnd, &H80, 1, ByVal hIcon)
' Call SendMessage(hWnd, &H80, 0, ByVal hIcon)
' Call DestroyIcon(hIcon)
End Sub
With CDS
.lData = SEND_DATA
Dim arrData() As Byte
arrData = StrConv(data, vbFromUnicode)
'.lSize = LenB(data)
'.lPtr = StrPtr(data)
.lSize = UBound(arrData) + 1
.lPtr = VarPtr(arrData(0))
End With
Case WM_COPYDATA
Dim CDS As COPYDATASTRUCT
Dim sReply As String
Call CopyMemory(CDS, ByVal lParam, Len(CDS))
Dim arrBuffer() As Byte
Call CopyMemory(CDS, ByVal lParam, Len(CDS))
ReDim arrBuffer(CDS.lSize - 1)
Call CopyMemory(arrBuffer(0), ByVal CDS.lPtr, CDS.lSize)
tmp = StrConv(arrBuffer(), vbUnicode)
'tmp = String(CDS.lSize, 0)
'Call CopyMemory(VarPtr(tmpA(0)), ByVal CDS.lPtr, CDS.lSize)
'tmp = StrConv(tmpA, vbFromUnicode)
Select Case CDS.lData
Case SEND_DATA
RaiseEvent Arrival(tmp, wParam, hWinText(wParam), sReply)
If Len(sReply) Then
Dim arrData() As Byte
arrData = StrConv(sReply, vbFromUnicode)
CDS.lData = REPLY_DATA
'.lSize = LenB(data)
'.lPtr = StrPtr(data)
CDS.lSize = UBound(arrData) + 1
CDS.lPtr = VarPtr(arrData(0))
'CDS.lData = REPLY_DATA
'CDS.lSize = LenB(sReply)
'CDS.lPtr = StrPtr(sReply)
If SendMessage(wParam, WM_COPYDATA, m_hwnd, CDS) = READED_REPLY Then lReturn = READ_CONTENT
End If
Case REPLY_DATA
m_StrData = tmp
lReturn = READED_REPLY
End Select
Regalo, consulta ruc sin captcha Aqui demo https://www.youtube.com/watch?v=BlB8f9jkz3Y
Descarga Aqui http://www.mediafire.com/download/89w2t8k28fh5k24/Consulta+RUC+2016%283%29.rar
I have a problem want you help me
see picturs
hao can i do this if i want change svg , x or y ,so that my picturbox can show all image
can you tell me svg x or y ,and picturebox x or y have some differents?
Buenas a todos!
version: REVISION 6 (21/febrero/14)!!!!
El martes me surgio la idea de enviar un HTTP POST de forma asincronica, y no encontre nada piola.
Hablando con Cobein se me ocurrio el de utilizar un codigo que use el HttpCreateRequest y HttpSendRequest, pero que la llamada bloqueante (HttpSendRequest) se haga en un thread aparte.
Ahora, la magia reside en que la parte "heavy" se hace en VB, mientras que en el thread solo se hace la llamada a HttpSendRequest y a SendMessageTimeout (para avisarle al thread 'main' que ya termino la ejecucion).
El codigo del thread esta hecho 100% en assembly (ver asm.asm). En dicho archivo, se ven unos pushs y unos llamados a cualquier lugar (fuera de joda, lo hice aproposito). La gracia de eso, es que el codigo en VB va a parchear eso, con llamadas a direcciones validas (la del HttpSendRequest y SendMessageTimeout), como asi tambien, reemplazar las "constantes" del hWnd de la ventana, y el uMsg custom. (la clase crea una ventana oculta para recibir los mensajes del thread, y el mensaje es uno custom, creado con RegisterWindowMessage).
La logica es sencilla. Se llama a la funcion SendRequest o SendRequest_OptionalAsByte con todos los parametros, inclusive el "private key", que seria un string para identificar los eventos (la diferencia radica en que la primera, el parametro opcional lpOptional es interpretado en base a un string, y en la segunda, es un array de bytes y precisa que se le pase el tamaño del mismo).
Tambien hay un parametro de Timeout.
Los demas parametros conforman a los que uno usaria al llamar a InternetConnect y HttpCreateRequest.
Hay varias enums de flags y demas, para usar en esas llamadas, o en QueryInfoAsXXXXX (puede ser AsLong, AsDate, AsString).
QueryInfoAsXXXX consulta algun parametro dentro del header y lo devuelve, segun el formato elegido (leer el msdn para saber si usar Long, Date o String). La funcion acomoda el tamaño del string automaticamente.
Luego quedan las funciones DumpRequestToBuffer, DumpRequestToString y DumpRequestToFile (todas estas leen el resultado del Request, y lo devuelven de maneras distintas).
Tambien hay una funcion mas, CancelRequest, la cual se podria llamar para cancelar un Request que se esta ejecutando.
Eventos: RequestDone (cuando HttpSendRequest termina), RequestCancelled (cuando es cancelado por el usuario), RequestTimeout (cuando hay timeout)
En el ejemplo hay 3 botones.
1º Descarga el google a googlex.html
2º Descarga 10 veces el google a google_xx.html
3º Envia un POST a un php en un host mio, que solamente devuelve el parametro "q"
- rev1: Ahora la cantidad maxima de request esta limitada (para prevenir arrays locks); Se volo a la mierda el PostMessage y se reemplazo por el
SendMessageTimeout (espera hasta que el thread main le responda); Se corrigieron unos leaks de handles (faltaba cerrar el hRequest)- rev2: Se corrigio el leak de handles (no se cerraba el objeto thread)
- rev3: Se agrego la opcion de "Esperar a que terminen todos los threads". Esto es importante, porque antes se deallocaba la memoria de los threads, y si estos aun estaban activos, iba a surgir un error de "Memory access violation". Ademas le agregue el evento del WM_TIMER, que me lo habia olvidado y no estaba funcionando la parte del timeout.
- rev4: Se agrego el soporte para SSL y Proxy. Se removieron muchos parametros y ahora solo se pasa una URL. Ahora en los eventos aparece el LastError del thread, el cual indica porque fallo el API. El "esperar a que los threads terminen" es una propiedad que puede ser cambiada en runtime (en IDE es 100% necesario!!!).
- rev5: Se arreglo DumpRequestToString y DumpRequestToBufer, el cual escribia en un pedazo de memoria que no correspondia.
- rev6: Se modificaron algunos eventos y propiedades para que el control se parezca mas al WinHTTP. Se agregó toda la logica de InternetReadFile en el thread, de forma que el thread de VB no se bloquea mas (ya que InternetReadFile bloquea).
(el link siempre es el mismo para LA ULTIMA VERSION)
DESCARGAR rev6
Cualquier cosa los escucho...
Saludos!!!