SO: Windows
Agradecimientos para "kicasta" y "RyogiShiki".
Descripción:
Mueve archivos desde un punto de origen hasta un punto de destino.
Está pensado para usarlo como complemento del "SendTo" de Windows, El cual no mueve archivos de un disco duro a otro.
Instrucciones:
1º Crear un acceso directo a una carpeta.


2º Abrir las propiedades del aceso directo.

3º Añadir la ruta de este script a la propiedad "Destino".

Ejemplo destino: Ruby C:\Windows\MoveIt.rb "C:\Nueva carpeta"
Ejemplo destino (Script compilado a .exe): C:\Windows\System32\MoveIt.exe "C:\Nueva carpeta"
4º (Opcional) Guardar el acceso directo modificado en la carpeta "SendTo" (C:\Users\USUARIO\AppData\Roaming\Microsoft\Windows\SendTo)


NOTAS:
Este script requiere el uso de argumentos. (Uno para la ruta de destino y el otro para el/los archivo(s) a mover.)
Si la carpeta de destino no existe, se pregunta para crearla o no. (Si no se crea, no se pueden copiar los archivos y se cancelará el programa xD)

Si el archivo de destino ya existe, Se pregunta por su reemplazamiento.

Si el archivo está siendo usado por el sistema, Se da lugar a reintentar o cancelar la operación.

En equipos de 64 Bit,Hay que copiar el compilado (.exe) tanto a la carpeta "System32" como "SysWOW64" Si se quiere usar la propiedad "Destino" de la siguiente forma en el acceso directo:

El script compilado (No muestra la consola):
EDITADO: 07/03/2012
http://www.mediafire.com/?clyzd39xxlxzn0d
El script:
EDITADO: 07/03/2012
Código
# -*- coding: UTF-8 -*-
# MoveIt v1.0 By Elektro H@cker
#
# SO: Windows
# Agradecimientos para "kicasta" y "RyogiShiki".
# Descripción:
# Mueve archivos desde un punto de origen hasta un punto de destino.
# Está pensado para usarlo como complemento del "SendTo" de Windows, El cual no mueve archivos de un disco duro a otro.
# Modo de empleo:
#
# 1º Crear un acceso directo a una carpeta.
# 2º Abrir las propiedades del aceso directo.
# 3º Añadir la ruta de este script a la propiedad "Destino".
#
# Ejemplo destino: Ruby C:\\MoveIt.rb "E:\Nueva carpeta"
# Ejemplo destino (Script compilado a .exe): C:\MoveIt.exe "E:\Nueva carpeta"
#
# 4º (Opcional) Guardar el acceso directo modificado en la carpeta "SendTo" (C:\Users\USUARIO\AppData\Roaming\Microsoft\Windows\SendTo)
#
# Notas:
#
# Este script requiere el uso de argumentos. (Uno para la ruta de destino y el otro para el/los archivo(s) a mover.)
#
# Si la carpeta de destino no existe, se pregunta para crearla o no. (Si no se crea, no se pueden copiar los archivos xD)
# Si el archivo de destino ya existe, Se pregunta por su reemplazamiento.
# Si el archivo está siendo usado por algún proceso abierto, Se da lugar a reintentar o cancelar la operación.
#
# En equipos de 64 Bit,Hay que copiar el compilado (.exe) tanto a la carpeta "System32" como "SysWOW64" Si se quiere usar la propiedad "Destino" de la siguiente forma en el acceso directo:
# MoveIt "C:\Nueva carpeta"
# RECORDATORIO
#
# Caracteres ilegales
#
# á : .gsub("ß", "á")
# é : .gsub("Ú", "é")
# í : .gsub("Ý", "í")
# ó : .gsub("¾", "ó")
# ú : .gsub("·", "ú")
# ¿ : .gsub("┐", "\u00BF")
# – : .gsub("\û", "\u2013")
# ´ : .gsub("\┤", "\u00B4")
# · : .gsub("\À", "\u00B7")
# ¬ : .gsub("\¼", "\u00AC")
# º : .gsub("\║", "\u00BA")
# ª : .gsub("\¬", "\u00AA")
#
# ¡ : FAIL :(
# ' : FAIL :(
#
# Convertir Handle a Hex
# puts 1272.to_s 16
# 0x + HandleHEX
# Modulos
require 'dl'
require "FileUtils"
require 'win32ole'
require 'win32/api'
include Win32
exit if Object.const_defined?(:Ocra)
# Variables globales y constantes
if ARGV.empty? == false
$DIR = (ARGV[0].encode('utf-8').gsub("ß", "á").gsub("Ú", "é").gsub("Ý", "í").gsub("¾", "ó").gsub("·", "ú").gsub("┐", "\u00BF").gsub("\û", "\u2013").gsub("┤", "\u00B4").gsub("\À", "\u00B7").gsub("\¬", "\u00AA").gsub("\¼", "\u00AC").gsub("\║", "\u00BA"))
$DIRMSG = (ARGV[0].encode('utf-8').gsub("\û", "-").gsub("ß", "a").gsub("Ú", "e").gsub("Ý", "i").gsub("¾", "o").gsub("·", "u").gsub("┐", "?"))
end
EnumWindows = API.new('EnumWindows', 'KP', 'L', 'user32')
GetWindowText = API.new('GetWindowText', 'LPI', 'I', 'user32')
KILOBYTE = 1024.0
MEGABYTE = 1024.0 * 1024.0
BUTTONS_OKCANCEL = 1
BUTTONS_YESNO = 4
CLICKED_CANCEL = 2
CLICKED_YES = 6
CLICKED_NO = 7
# Metodos
def help()
print "\nSe requiere al menos 1 archivo de origen.\n\n\n"
print "Modo de empleo: \n\n"
print ' MoveIt.rb [Destino] [Archivo de origen 1] [Archivo de origen 2] [etc...]' + "\n\n\n"
print ' Ejemplo: (Mover tres archivos al directorio de destino "C:"' + "\n\n"
print ' MoveIt.rb "C:\" "D:\Archivo1.txt" "E:\Archivo2.jpg" "F:\Archivo3.mp3"' + "\n\n"
Process.exit
end
def bytesToUnit size1, size2
$Kilos1 = (size1 / KILOBYTE).to_s
$Megas1 = (size1 / MEGABYTE).to_s
$Kilos2 = (size2 / KILOBYTE).to_s
$Megas2 = (size2 / MEGABYTE).to_s
if ($Megas1[0]).eql? '0' or $Megas1["-"]
if ($Kilos1[0]).eql? '0'
$finalsize1 = size1.to_s + ' Bytes'
elsif
$finalsize1 = $Kilos1.split('.').first + "." + $Kilos1.split('.').last[0,1] + " Kb"
end
else
$finalsize1 = $Megas1.split('.').first + "." + $Megas1.split('.').last[0,1] + " Mb"
end # size1
if ($Megas2[0]).eql? '0' or $Megas2["-"]
if ($Kilos2[0]).eql? '0'
$finalsize2 = size2.to_s + ' Bytes'
elsif
$finalsize2 = $Kilos2.split('.').first + "." + $Kilos2.split('.').last[0,1] + " Kb"
end
else
$finalsize2 = $Megas2.split('.').first + "." + $Megas2.split('.').last[0,1] + " Mb"
end # size2
end
def date (file1, file2)
$CDate1 = (File.ctime(file1)).to_s
$CDate2 = (File.ctime(file2)).to_s
$MDate1 = (File.mtime(file1)).to_s
$MDate2 = (File.mtime(file2)).to_s
end
def message_box(txt, title='', buttons='')
user32 = DL.dlopen('user32')
msgbox = DL::CFunc.new(user32['MessageBoxA'], DL::TYPE_LONG, 'MessageBox')
r, rs = msgbox.call([0, txt, title, 3].pack('L!ppL!').unpack('L!*'))
return r
end
def reintentar(source_file, dest_file)
$seguro = 'si'
if $proceso == nil
$proceso = 'DESCONOCIDO'
end # if
response = message_box("\n" +
"El proceso '" + $proceso + "' Tiene abierto el archivo: \n\n" + $archivo + "\n\n\n" +
"Reintentar?",
"Reintentar?",
BUTTONS_OKCANCEL)
if response == CLICKED_YES
Access($archivoUTF8, $DIR)
elsif response == CLICKED_NO
$no = "si"
nil
elsif response == CLICKED_CANCEL
exit
end # response
end
def moverlo()
@EnumWindowsProc = API::Callback.new('LP', 'I'){ |handle, param|
buf = "\0" * 200
GetWindowText.call(handle, buf, 200);
if (!buf.index(param).nil?)
$seguro = 'no'
0
else
$seguro = 'si'
1
end # if
}
EnumWindows.call(@EnumWindowsProc, $archivo.split('\\').last[0..-6])
if $seguro == 'si'
FileUtils.mv $archivoUTF8, $DIR
elsif
reintentar($archivoUTF8, $DIR)
end # seguro
end
def Access(source_file, dest_file)
begin
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")
for process in processes do
caption = (process.Commandline).to_s
if not caption['ruby'] and not caption['MoveIt.exe']
if caption.include? $archivo.split('\\').last[0..-6]
$proceso = process.Name
reintentar($archivoUTF8, $DIR)
end # caption.include?
end # if not ruby
$proceso = nil
end # for
if not $no == "si"
moverlo()
end # no
rescue
if File.exist?($archivoUTF8) == true
reintentar($archivoUTF8, $DIR)
end # rescue
end # begin
end
# Control de errores
if ARGV.empty? == true
help()
elsif ARGV.length < 2
help()
elsif File.directory?($DIR) == false
print "\n El directorio de destino no existe: " + $DIR + "\n"
response = message_box("\n" +
"El directorio de destino no existe: " + "\n\n" + $DIRMSG + "\n\n\n" +
"Crear el directorio?",
"Crear el directorio?",
BUTTONS_YESNO)
if response == CLICKED_YES
Dir.mkdir $DIR
elsif response == CLICKED_NO
abort
elsif response == CLICKED_CANCEL
exit
end # response
end
# Proceso
for $archivo in ARGV[1..ARGV.length].each
$archivoUTF8 = ($archivo.encode('utf-8').gsub("ß", "á").gsub("Ú", "é").gsub("Ý", "í").gsub("¾", "ó").gsub("·", "ú").gsub("┐", "\u00BF").gsub("\û", "\u2013").gsub("┤", "\u00B4").gsub("\À", "\u00B7").gsub("\¬", "\u00AA").gsub("\¼", "\u00AC").gsub("\║", "\u00BA"))
if File.exist?($archivoUTF8) == false
print "\n El archivo a mover no existe: " + $archivoUTF8 + "\n"
end # File not exist
if File.exist?($DIR + "\\" + $archivoUTF8.split('\\').last)
bytesToUnit(File.size($archivoUTF8), File.size($DIR + "\\" + $archivoUTF8.split('\\').last))
date($archivoUTF8, $DIR + "\\" + $archivoUTF8.split('\\').last)
response = message_box(
" Origen : " + $archivo.split($archivo.split('\\').last).first + "\n" +
" Archivo : " + $archivo.split('\\').last + "\n" +
" Tamano : " + $finalsize1 + "\n" +
" Creacion : " + $CDate1.split('+').first + "\n" +
" Modificacion : " + $MDate1.split('+').first + " \n\n\n" +
" Destino : " + $DIRMSG.split($archivo.split('\\').last).first + "\n" +
" Archivo : " + $archivo.split('\\').last + "\n" +
" Tamano : " + $finalsize2 + "\n" +
" Creacion : " + $CDate2.split('+').first + "\n" +
" Modificacion : " + $MDate2.split('+').first + " \n\n\n" +
" El archivo de destino ya existe. Reemplazar archivo?",
" Reemplazar archivo?",
BUTTONS_YESNO)
if response == CLICKED_YES
Access($archivoUTF8, $DIR)
elsif response == CLICKED_NO
nil
elsif response == CLICKED_CANCEL
exit
end # response
else
Access($archivoUTF8, $DIR)
end # File exist
end # for
# Fin
exit


 
  




 Autor
 Autor
		




 En línea
									En línea
								











