Chefito escribió:
Por ejemplo, yo hace tiempo necesitaba borrar el propio programa que ejecutaba, y para eso tenía que crear otro programa aparte que lo hiciese (lo intente llamando al comando del justo al cerrar el programa, pero había veces que se borraba y otras no, ya que a veces justamente se cerraba y otras no). Con esto se pueden hacer dos scripts, compilar el secundario y que se ejecute desde el primario, sin dejar rastro (supongo, tendría que probarlo).
Para auto-borrar el script yo me hice esta func (crea un .bat que borra el script y luego se auto-borra a si mismo)
Código: Seleccionar todo
#Region Comentarios
#cs
	Parametros: _AutoDel($T = 2) ; Tiempo a esperar para borrar
#ce
#EndRegion Comentarios
#Region Funcion
Func _AutoDel($T = 2)
	$archivo1 = FileOpen(@ScriptDir & "\autdel.bat", 10) ; Crear y abrir el archivo 'autdel.bat'
	FileWriteLine($archivo1, "@echo off") ; Escribir el contenido del .bat...
	FileWriteLine($archivo1, "title .")
	FileWriteLine($archivo1, "ping localhost -n " & $T) ; Esto es para esperar un tiempo antes de borrar el script (para que acabe de cerrarse)
	FileWriteLine($archivo1, 'del "' & @ScriptName & '"') ; Borrar el script
	FileWriteLine($archivo1, "del %0") ; Borrar el .bat
	FileWriteLine($archivo1, "Exit") ; Salir
	FileClose($archivo1) ; Cerrar el .bat
	Sleep(1000) ; Esperar 1 segundo
	ShellExecute(@ScriptDir & "\autdel.bat", "", @ScriptDir, "", @SW_HIDE) ; Ejecutar el archivo en una consola oculta
EndFunc   ;==>_AutoDel
#EndRegion Funcion
 
------------------------------
Me he quedado impresionado con esa función!
como soy muy vago para sacar los datos binarios, he hecho una GUI para que lo haga por mi xD
por si a alguien la quiere aqui esta:
Código: Seleccionar todo
Select
	Case StringInStr("0409 0809 0c09 1009 1409 1809 1c09 2009 2409 2809 2c09 3009 3409", @OSLang) ; English | Inglés
		Local $_Title = "GetBinaryData"
		Local $_Browse = "Browse"
		Local $_Copytoc = "Copy to clipboard"
		Local $_Saveas = "Save as..."
		Local $_Defaultname = "\binarydata.au3"
		Local $_Filetoconvert[2] = ["Select the file to convert to binary", "All files (*.*)"]
		Local $_Wheretosave[2] = ["Select where to save the binary data", "All files (*.*)"]
		Local $_Error[4] = ["Please select a file", "Error reading the binary data", "Select where to save the file!", "Error saving the file"]
		Local $_Finished = "Finished!"
	Case StringInStr("040a 080a 0c0a 100a 140a 180a 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a 400a 440a 480a 4c0a 500a", @OSLang) ; Spanish | Español
		Local $_Title = "Obtener datos binarios"
		Local $_Browse = "Buscar"
		Local $_Copytoc = "Copiar al portapapeles"
		Local $_Saveas = "Guardar como..."
		Local $_Defaultname = "\Datosbinarios.au3"
		Local $_Filetoconvert[2] = ["Selecciona el archivo para convertir a binario", "Todos los archivos (*.*)"]
		Local $_Wheretosave[2] = ["Selecciona donde guardar los datos binarios", "Todos los archivos (*.*)"]
		Local $_Error[4] = ["Por favor selecciona un archivo", "Error leyendo los datos binarios", "Selecciona donde guardar el archivo!", "Error guardando el archivo"]
		Local $_Finished = "Finalizado!"
	Case Else ; Other languages | Otros idiomas
		Local $_Title = "GetBinaryData"
		Local $_Browse = "Browse"
		Local $_Copytoc = "Copy to clipboard"
		Local $_Saveas = "Save as..."
		Local $_Defaultname = "\binarydata.au3"
		Local $_Filetoconvert[2] = ["Select the file to convert to binary", "All files (*.*)"]
		Local $_Wheretosave[2] = ["Select where to save the binary data", "All files (*.*)"]
		Local $_Error[4] = ["Please select a file", "Error reading the binary data", "Select where to save the file!", "Error saving the file"]
		Local $_Finished = "Finished!"
EndSelect
Global Const $MAX_LINESIZE = 4095
#Region GUI
	$getbinarygui = GUICreate($_Title, 248, 114, 192, 124)
	$getbinaryfilename = GUICtrlCreateInput("", 8, 8, 177, 21)
	$getbinarybrowse = GUICtrlCreateButton($_Browse, 192, 8, 49, 21, 0x00020000)
	$getbinarycopytoclip = GUICtrlCreateCheckbox($_Copytoc, 8, 40, 150, 17)
	$getbinarysaveas = GUICtrlCreateCheckbox($_Saveas, 8, 64, 150, 17)
	$getbinarysavelocation = GUICtrlCreateInput(@ScriptDir & $_Defaultname, 8, 88, 89, 21) ; Default at script folder | Por defecto en la carpeta del script
	GUICtrlSetState($getbinarysavelocation, 32) ; 32 = hide ; 16 = show | 32 = Ocultar ; 16 = Mostrar
	$getbinarysaveselect = GUICtrlCreateButton($_Browse, 104, 88, 57, 21, 0x00020000)
	GUICtrlSetState($getbinarysaveselect, 32) ; 32 = hide ; 16 = show | 32 = Ocultar ; 16 = Mostrar
	$GetBinary = GUICtrlCreateButton("GetBinary", 168, 40, 73, 41, 0x00020000)
	GUISetState(@SW_SHOW) ; Show GUI | Mostrar la GUI
#EndRegion GUI
While 1
	$e = GUIGetMsg()
	Switch $e
		Case -3 ; If close is pressed... | Si se presiona cerrar...
			Exit
		Case $getbinarybrowse ; Select the file to convert | Seleccionar el archivo del que sacar los datos binarios
			$f = FileOpenDialog($_Filetoconvert[0], @ScriptDir & "\", $_Filetoconvert[1], 1 + 4)
			If Not @error Then GUICtrlSetData($getbinaryfilename, $f)
		Case $getbinarysaveas
			If GUICtrlRead($getbinarysaveas) = 1 Then ; If the checkbox is checked | Si esta activada la checkbox...
				GUICtrlSetState($getbinarysavelocation, 16) ; 16 = show | Mostrar
				GUICtrlSetState($getbinarysaveselect, 16) ; 16 = show | Mostrar
			Else
				GUICtrlSetState($getbinarysavelocation, 32) ; 32 = hide | Ocultar
				GUICtrlSetState($getbinarysaveselect, 32) ; 32 = hide | Ocultar
			EndIf
		Case $getbinarysaveselect
			$f = FileSaveDialog($_Wheretosave[0], @ScriptDir & "\", $_Wheretosave[1], 1 + 4) ; Dialog to select where to save the file | Dialogo para seleccionar donde guardar el archivo
			If Not @error Then GUICtrlSetData($getbinarysavelocation, $f)
		Case $GetBinary
			Global $sModule = GUICtrlRead($getbinaryfilename)
			If Not FileExists($sModule) Then
				Errores(1)
			Else
				$FinalBin = _GetBinaryFromFile($sModule) ; Get binary data from the file | Obtiene los datos binarios del archivo
				If @error Then
					Errores(2)
				Else
					If GUICtrlRead($getbinarycopytoclip) = 1 Then ClipPut($FinalBin) ; If checked, copy the data to the clipboard | SI esta seleccionada la checkbox, copia los datos binarios al portapapeles
					If GUICtrlRead($getbinarysaveas) = 1 Then
						$location = GUICtrlRead($getbinarysavelocation)
						If $location = "" Then Errores(3)
						$file = FileOpen($location, 10)
						FileWrite($file, $FinalBin)
						FileClose($file)
					Else
						Errores(4)
					EndIf
					If Not @error Then MsgBox(0, $_Finished, $_Finished)
				EndIf
			EndIf
	EndSwitch
WEnd
Func Errores($errornum) ; Errors | Errores
	Select
		Case $errornum = 1
			MsgBox(0, "Error", $_Error[0])
		Case $errornum = 2
			MsgBox(0, "Error", $_Error[1])
		Case $errornum = 3
			MsgBox(0, "Error", $_Error[2])
		Case $errornum = 4
			MsgBox(0, "Error", $_Error[3])
	EndSelect
EndFunc   ;==>Errores
Func _GetBinaryFromFile($sModule)
	Global $hModule = FileOpen($sModule, 16)
	If @error Then Exit
	Global $bBinary = FileRead($hModule)
	FileClose($hModule)
	Global $iNewLine, $j
	Global $iChinkSize = 32
	Global $sBinary
	For $i = 1 To BinaryLen($bBinary) Step $iChinkSize
		$j += 1
		If 4 * ($j * $iChinkSize) > $MAX_LINESIZE - 129 Then
			$iNewLine = 1
		EndIf
		If $iNewLine Then
			$iNewLine = 0
			$j = 0
			$sBinary = StringTrimRight($sBinary, 5)
			$sBinary &= @CRLF & '$bBinary &= "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
			ContinueLoop
		EndIf
		If $i = 1 Then
			$sBinary &= '$bBinary = "' & BinaryMid($bBinary, $i, $iChinkSize) & '" & _' & @CRLF
		Else
			$sBinary &= '       "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
		EndIf
	Next
	$sBinary = StringTrimRight($sBinary, 5)
	Return $sBinary
EndFunc   ;==>_GetBinaryFromFile
(la funcion de sacar los datos binarios, es la del mismo autor de la funcion)