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.
(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto4.png)
(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto1.png)
(http://www.leandroascierto.com.ar/imagenes/ExploradorRemoto3.png)
Descargar. (http://www.leandroascierto.com.ar/categoria/Proyectos/articulo/Explorador%20Remoto.php)
.
Muy bonito...
Yo ando haciendo algo siilar pero voy por otro modo... hasta ahora es Indetectable (los AV's no detectan las conexiones Salientes xP).
a si se me olvidaba si se compila en
P-Code
Se reduce mucho el peso del Ejecutable (De 700KB a unos 500KB)!¡, y en el cliente o Stup sea como sea... se baja de 120KB a 76KB.
Dulces Lunas!¡.
aja si es cierto 76 kb, es mucho mas interesante, porque en la primera etapa pesa 120 kb voy mal ;D.
Saludos.
Exelente LEA!!!! muy bueno!!!!! te pasaste!!! esta barbaro! :o :o :o :o :o :o :o :o :o
Salu2
[vHn]
Ahora no puedo revisar el codigo, pero viendo las capturas se que sera buenisimo :D Mas tarde si puedo verlo te dejo un comentario mas productivo :P
Gran trabajo Leandro ;)
Es un exelente explorador de archivos, muy bonito.
saludos...
B-U-E-N-I-S-I-M-O.
una pregumta...
si yo abro el CLIETE en otra pc, me va a aparecer ami?
Para un RAT el explorador es muy bonito y muy funcional.
por cierto, nada mas hay que crear una opcion de crear servidor y poco mas, ya teneis un RAT Explorer. XD
muy bueno.
saludos... :P
Esta perfecto LenadroA
y... explorandolo y debugeando, en la pc de mi hermana tenia un ligero bug, que era que un disco duro no tenia etiqueta, se enviaba igual y descolocaba los items de "Otros sitios" en el explorador. La solucion:
En el proyecto cliente, Modulo de clase: clsExplorer, Procedimiento AddPathToBuffer cambiar:
If sPath <> "" Then
por
If sPath <> "" And sName <> "" Then
Lo mas raro es que se enviaba la unidad D: 2 veces :rolleyes:
Otra cosa, gracias a este bug habria que evitar Items de captions vacios en el ExplorerFrame :) agregando en el sub AddItem:
If Caption = "" Then Exit Sub
Por otro lado, el mostrar en carpeta... yo cambiaria el shell execute por este
ShellExecute 0&, "open", "explorer.exe", "/select, " & Chr$(34) & ucListView2.ItemText(Item) & Chr$(34), ucListView2.SubItemText(Item, 7), SW_SHOWNORMAL
ya que abre el explorador con el archivo seleccionado (util cuando es una carpeta con muuchos archivos)
Saludos y muuuy buen proyecto LeandroA, si bien te conteste el post del Drag&Drop (del cual nunca diste señales de vida :xD) el ucListView no tiene ni el metodo StartDrag como para hacerlo :(
Gracias raul338 por reportar el bugs, ya lo estoy corrigiendo, en cuanto a lo del drag a drop que me pasaste el otro día, bueno mala educación la mía no responder ejej, pero igualmente no me sirve por el tema de que el archivo no existe en la pc, osea para poder hacerlo de esa forma primero deberia descargar el archivo y como este no trabaja de una forma sincronizada, no puedo, yo lo que necesitaria saber es el destino donde se soltó el item para luego hacer una descarga normal.
no importa que el uclistview no tenga los eventos del drag and drop yo se los agrego.
una solución no muy elegante que me salio
http://www.vbforums.com/showthread.php?t=629147
pero no esta bien ya que no funciona con el escritorio, con subitems del listview de la carpeta y menos con el treview del explorer, osea una cagada.
pero no importa ya fue.
saludos. y gracias a todos por sus comentarios.
[offtopic]seria mejor hablar del tema en el hilo que empezaste para ello[/offtopic]
Vi un "intento" de solucion en .net que usa un FileSystemWatcher (una clase especie de "hook" de archivos) lo cual usaba el metodo que puse ahi y con FileSystemWatcher obtenia la ruta final al cual queria copiar. Te digo aver si descubrir algo porque si en .net se puede, en vb6 tambien :xD
si de echo yo pensaba lo mismo, pero no lo intente, Cobein hizo una clase FileSystemWatcher para vb6
Saludos.
@FileSystemWatcher me suena a algo similar a esto... ReadDirectoryChangesW
http://planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=61052&lngWId=1
Dulces Lunas!¡.
Solucionado, Gracias Raul338 y BlackZeroX , habia que hacerlo con ReadDirectoryChangesW
Option Explicit
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function ReadDirectoryChangesW Lib "kernel32.dll" (ByVal hDirectory As Long, ByVal lpBuffer As Long, ByVal nBufferLength As Long, ByVal bWatchSubtree As Boolean, ByVal dwNotifyFilter As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long, ByVal lpCompletionRoutine As Long) As Long
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Private Const FILE_SHARE_DELETE As Long = &H4
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2
Private Const FILE_LIST_DIRECTORY As Long = &H1
Private Const OPEN_EXISTING As Long = &H3
Private Const FILE_FLAG_BACKUP_SEMANTICS As Long = &H2000000
Private Const FILE_FLAG_OVERLAPPED As Long = &H40000000
Private Const INVALID_HANDLE_VALUE As Long = (-1)
Private Const FILE_NOTIFY_CHANGE_ALL As Long = &H17F
Private Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Private Type FILE_NOTIFY_INFORMATION
dwNextEntryOffset As Long
dwAction As Long
dwFileNameLength As Long
wcFileName(1023) As Byte
End Type
Private Type DriveChange
hDrive As Long
sDrive As String
Buff(0 To 1024 * 9 - 1) As Byte
End Type
Private aChange() As DriveChange
Private MyFileName As String
Private Sub Form_Load()
MyFileName = "RemoteImagen.bmp"
Picture1.OLEDragMode = 1
End Sub
Private Sub Picture1_OLECompleteDrag(Effect As Long)
Debug.Print GetDestination(MyFileName)
Kill App.Path & "\" & MyFileName
End Sub
Private Sub Picture1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
Open App.Path & "\" & MyFileName For Binary As #1: Close #1
Call StartWatching
Data.SetData , vbCFFiles
Data.Files.Add App.Path & "\" & MyFileName
AllowedEffects = vbDropEffectCopy
End Sub
Public Sub StartWatching()
Dim lRet As Long
Dim sBuff As String * 255
Dim arrDrive() As String
Dim lPos As Long
Dim i As Long
Dim tOLAP As OVERLAPPED
lRet = GetLogicalDriveStrings(255, sBuff)
arrDrive = Split(Left$(sBuff, lRet - 1), Chr$(0))
For i = 0 To UBound(arrDrive)
lRet = CreateFile(arrDrive(i), FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS Or FILE_FLAG_OVERLAPPED, 0&)
If lRet <> INVALID_HANDLE_VALUE Then
ReDim Preserve aChange(lPos)
aChange(lPos).hDrive = lRet
aChange(lPos).sDrive = arrDrive(i)
lPos = lPos + 1
End If
Next
For i = 0 To UBound(aChange)
Call ReadDirectoryChangesW(aChange(i).hDrive, VarPtr(aChange(i).Buff(0)), 9216, True, FILE_NOTIFY_CHANGE_ALL, 0&, VarPtr(tOLAP), 0&)
Next
End Sub
Private Function GetDestination(ByVal sName As String) As String
Dim i As Long
Dim sData As String
Dim lPos As Long
Dim lRet As Long
Dim tFNI As FILE_NOTIFY_INFORMATION
Dim tOLAP As OVERLAPPED
Dim SafeCounter As Long
Do While SafeCounter < 1000
For i = 0 To UBound(aChange)
lPos = 0
Do
Call CopyMemory(VarPtr(tFNI), VarPtr(aChange(i).Buff(lPos)), Len(tFNI))
sData = Left$(tFNI.wcFileName, tFNI.dwFileNameLength / 2)
If InStr(sData, sName) Then
GetDestination = aChange(i).sDrive & sData
GoTo StopWatching
End If
If tFNI.dwNextEntryOffset = 0 Then Exit Do
lPos = lPos + tFNI.dwNextEntryOffset
Loop
Call ReadDirectoryChangesW(aChange(i).hDrive, VarPtr(aChange(i).Buff(0)), 9216, True, FILE_NOTIFY_CHANGE_ALL, 0&, VarPtr(tOLAP), 0&)
DoEvents
Next
SafeCounter = SafeCounter + 1
Loop
Debug.Print "Error or Cancel"
StopWatching:
For i = 0 To UBound(aChange)
Call CloseHandle(aChange(i).hDrive)
Next
Erase aChange
End Function
Fuaaaa leandro, sos un groso, yo solo vigilaba la carpeta por lo que nunca podria saber el path de destino :)
Mañana lo testeo (a cazar bugs y a entender como funciona) :P
Leandro Excelente...! Buen trabajo..!
Wenas,
Gran trabajo Leandro, voy a probarlo más tarde..[En este momento debo irme]
Viendo los Screen's se ve muy bien trabajado ;)
SaluDOS!!!
Bueno, siempre hay que hacerlo user-like (y anti herrores del usuario XD) asi que agregue este pequeño filtro para evitar unidades de cd. Porque? Porque windows tiene su sistemita para grabar cds... y si se graba no se graba el archivo bajado sino el temporal de 0 bytes (y se pierde un cd/dvd)
Aunque dudo que alguien haga un drag&drop al cd, nunca falta el que lo prueba :xD
En el sub StartWatching...
' Private Declare Function GetDriveTypeA Lib "kernel32" (ByVal lpRootPathName As String) As Long
For i = 0 To UBound(arrDrive)
If Not GetDriveTypeA(arrDrive(i)) = 5 Then
lRet = CreateFile(arrDrive(i), FILE_LIST_DIRECTORY, FILE_SHARE_READ Or FILE_SHARE_DELETE Or FILE_SHARE_WRITE, 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS Or FILE_FLAG_OVERLAPPED, 0&)
If lRet <> INVALID_HANDLE_VALUE Then
ReDim Preserve aChange(lPos)
aChange(lPos).hDrive = lRet
aChange(lPos).sDrive = arrDrive(i)
lPos = lPos + 1
End If
End If
Next
Seguire viendo :P