Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2008
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Descomprimir archivo rar

Buenas.
Primeramente me gustaría hacer hincapié en mi inutilidad para buscar en este foro.
Lo que realmente quiero lograr es descomprimir un archivo rar dado sin que se habra la ventanita típica de winrar para explorar archivos.
Es decir shellexecute(archivo.rar) no me vale.
Si me voy a Windows Inicio y escribo winrar E archivo.rar sucese algo similar a lo que quiero lograr. Se descomprme el archivo y sólo veo la barra de progreso.
Trato de hacer lo mismo pero no tengo ni idea.
En la página de Winrar hay tutoriales de los parámetros que se pueden pasar pero le pongo los parametros en shellexecute

ShellExecute(Self.Handle,'',pansichar(flname.FileName),'','E',SW_HIDE)

(se supone que la E es lo que hace que descomprima sin rechistar) y me muestra la dichosa pantallita que no quiero ver...

Imagino que habrá algún hilo/tema/post que me pueda servir.
Si fuesen tan amables de redirigerme...

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 15-04-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Código Delphi [-]
WinExec(PChar('winrar x y ' + flname.FileName), SW_HIDE);

Revisar tambien APIs; RAROpenArchive y RARProcessFile de la libreria unrar.dll.

Saludos
Responder Con Cita
  #3  
Antiguo 15-04-2008
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
Para descomprimir archivos en general, ya sea con WinRAR, WinZip y otros sin componentes, lo primero que tienes que entender es que el programa principal (el IDE) no es el compresor en si, sino que es una interfaz gráfica de usuario para la consola de comandos/librerías que vienen incluidas para trabajar con la GUI. Además debes detectar la instalación del compresor y la ruta del mismo para que el programa no se cuelgue. Para saber en qué ruta está instalado WinRAR puedes hacer una rutina simple examinando las claves/valores desde el registro de Windows (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver)

Bueno... directamente con lo que requieres, debes pasarles parámetros a la consola de comandos (a rar.exe) de WinRAR para comprimir/descomprimir archivos de este tipo. La consola de comandos tiene como nombre de archivo rar.exe y se encuentra en el directorio de instalación del programa (EJ: C:\Archivos de programa\WinRAR).

Al examinar la ayuda de la consola, se despliega esto:

Código:
C:\Archivos de programa\WinRAR>rar.exe /?

Uso:     rar <orden> -<parámetro 1> -<parámetro N> <archivo> <ficheros...>
               <@lista de ficheros...> <ruta_de_extracción\>

<Ordenes>
  a             Añadir ficheros al archivo
  c             Añadir comentario de archivo
  cf            Añadir comentario de ficheros
  ch            Cambiar parámetros del archivo
  cw            Escribir el comentario de archivo en el fichero
  d             Eliminar ficheros del archivo
  e             Extraer ficheros en el directorio actual
  f             Actualizar los ficheros del archivo
  i[par]=<str>  Buscar cadena en los archivos
  k             Bloquear el archivo
  l[t,b]        Listar contenido [técnico,simple]
  m[f]          Mover al archivo [sólo ficheros]
  p             Sacar el fichero por la salida estándar
  r             Reparar el archivo
  rc            Reconstruir volúmenes perdidos
  rn            Renombrar ficheros comprimidos
  rr[N]         Añadir registro de recuperación de datos
  rv[N]         Crear volúmenes de recuperación
  s[nombre|-]   Convertir el archivo en o desde SFX
  t             Comprobar los ficheros de archivo
  u             Actualizar los ficheros en el archivo
  v[t,b]        Listado detallado del archivo [técnico,simple]
  x             Extraer ficheros con la ruta completa

<Parámetros>
  -             Detener el escaneo de parámetros
  ac            Borrar el atributo Archivo tras la compresión o extracción
  ad            Añadir nombre de archivo a la carpeta de destino
  ag[formato]   Generar el nombre de archivo usando la fecha actual
  ao            Añadir los ficheros con el atributo Archivo activado
  ap<ruta>      Establecer la ruta dentro del archivo
  as            Sincronizar el contendido del archivo
  av            Incluir Verificación de Autenticidad (sólo versiones registradas
)
  av-           Desactivar la comprobación de autenticidad
  c-            No mostrar comentarios
  cfg-          No leer configuración
  cl            Convertir los nombres a minúsculas
  cu            Convertir los nombres a mayúsculas
  df            Eliminar los ficheros tras la compresión
  dh            Abrir los ficheros compartidos
  ds            Desactivar la clasificación por nombre en los archivos sólidos
  e[+]<attr>    Set file exclude and include attributes
  ed            No añadir directorios vacios
  en            No añadir bloque de 'final de archivo'
  ep            Excluir las rutas de los nombres
  ep1           Excluir el directorio raíz de los nombres
  ep2           Expandir las rutas al máximo
  ep3           Expandir las rutas al máximo incluyendo la letra de la unidad
  f             Actualizar los ficheros
  hp[ctrña]     Codificar cabeceras y datos
  id[c,d,p,q]   Disable messages
  ieml[email]   Enviar archivo por email
  ierr          Mostrar mensajes en la consola de depuración
  ilog[fichero] Registrar los errores en un fichero (sólo versión registrada)
  inul          Desactivar todos los mensajes
  ioff          Apagar el PC después de finalizar la operación
  isnd          Activar el sonido
  k             Bloquear el archivo
  kb            Conservar los ficheros extraídos dañados
  m<0..5>       Establecer nivel de compresión (0-guardar ... 3-normal 5-máxima)

  mc<par>       Establecer parámetros avanzados de compresión
  md<tamaño>    Establecer el tamaño del diccionario en KB (64,128,256,512,1024,
2048,4096 ó A-G)
  ms[lista]     Especificar tipos de ficheros a almacenar
  mt<threads>   Especificar número de procesos
  n<fichero>    Incluir solo el fichero especificado
  n@            Leer ficheros a incluir de la entrada estandard
  n@<lista>     Incluir los ficheros especificados en la lista de fichero
  o+            Sobrescribir los ficheros existentes
  o-            No sobrescribir los ficheros existentes
  oc            Guardar atributo NTFS de compresión
  or            Renombrar ficheros automáticamente
  os            Guardar flujos NTFS
  ow            Guardar o restablecer el propietario y grupo del
  p[contraseña] Escpcificar la contraseña
  p-            No preguntar la contraseña
  r             Recorrer recursivamente la estructura de directorios
  r0            Recorrer recursivamente sólo los subdirectorios de los nombres c
on comodín
  ri<P>[:<S>]   Escpcificar la prioridad (0-predeterminda,1-min..15-máx) y el ti
empo de inactividad en ms
  rr[N]         Añadir registro de recuperación de datos
  rv[N]         Crear volúmenes de recuperación
  s[<N>,d,e]    Crear un archivo sólido
  s-            Desactivar la compresión sólida
  sc<chr>[obj]  Specify the character set
  sfx[nombre]   Crear un archivo SFX
  si[name]      Read data from standard input (stdin)
  sl<size>      Process files with size less than specified
  sm<size>      Process files with size more than specified
  t             Comnprobar ficheros después de comprimir
  ta<fecha>     Procesar ficheros modificados después de <fecha> en formato AAAA
MMDDHHMMSS
  tb<fecha>     Procesar ficheros modificados antes de <fecha> en formato AAAAMM
DDHHMMSS
  tk            Conservar la hora original del archivo
  tl            Establecer como hora de archivo la del último fichero
  tn<fecha>     Procesar ficheros posteriores a <fecha>
  to<fecha>     Procesar ficheros anteriores a <fecha>
  ts<m,c,a>[N]  Guardar o restaurar fecha y hora (modificación, creación, acceso
)
  u             Actualizar los ficheros
  v             Crear volúmenes con detección automática de tamaño o listar todo
s los volúmenes
  v<tamaño>[k,b]Crear volúmenes con tamaño =<size>*1000 [*1024, *1]
  vd            Borrar el contenido del disco antes de crear un volumen
  ver[n]        Control de versión de ficheros
  vn            Usar nomenclatura antigua de volúmenes
  vp            Detenerse antes de cada volumen
  w<ruta>       Asignar el directorio de trabajo
  x<fichero>    Excluir el fichero especificado
  x@            Leer ficheros a excluir de la entrada estándar
  x@<lista>     Excluir los ficheros especificados en la lista de fichero
  y             Suponer Sí a todo
  z[file]       Read archive comment from file
Como puedes ver en la ayuda desplegada, para lo que requieres, sería algo como esto:

Código Delphi [-]
uses
  ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(Handle, 'Open', 'C:\Archivos de programa\WinRAR\rar.exe', 'x C:\archivo.rar C:\carpeta_destino\', nil,  SW_HIDE);
end;

Si deseas controlar toda la ejecución y sus hilos de la consola y saber qué valores devuelve al finalizar la compresión/descompresión (ExitCode), utiliza la función CreateProcess en vez de ShellExecute (consultar la ayuda de Delphi para ampliar esta información).

Saludos y buena suerte

Última edición por Black_Ocean fecha: 15-04-2008 a las 21:47:16.
Responder Con Cita
  #4  
Antiguo 15-04-2008
Avatar de Black_Ocean
Black_Ocean Black_Ocean is offline
Miembro
 
Registrado: nov 2006
Posts: 128
Poder: 18
Black_Ocean Va por buen camino
[cHackAll], me ganaste el primero posteo de nuevo , me demoré mucho en terminar de escribir jejejeje, que son rápidos aquí. Bueno, ahí tienes dos ayudas, la de Él y la mía =)

Saludos.
Responder Con Cita
  #5  
Antiguo 15-04-2008
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Oye pues muchas gracias.
Y ahora ya el colofón final para dejarlo todo aquí en el mismo hilo.
Si rar.exe no está en archivos de programa o en c:\...sino en D:\....
¿Como busca delphi en el registro la ruta exacta del ejecutable rar.exe?
Si obtenemos la ruta del programa asociado a *.rar lo tenemo redondo?

Lo he dicho así sin mirar.

Me suena que hay una clase que es la que se usa para el registro.
Mañana miraré a ver si encuentro el ejemplo que tenía de eso a ver si saco algo.

Muchas gracias de nuevo a todos.
Responder Con Cita
  #6  
Antiguo 15-04-2008
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Vaya perdón que si que lo habias comentado...
Responder Con Cita
  #7  
Antiguo 16-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Pero estamos suponiendo que:
- Winrar está instalado
- y que está en la ruta tal o cual.

¿Y si no dependes de winrar e implementas tú la compresión/decompresión?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
no puedo abrir un archivo con ShellExecute si el archivo es variable belpab API de Windows 2 28-11-2007 16:24:22
Comprimir y descomprimir con ZipMaster Espartaco OOP 2 22-02-2007 12:45:27
descomprimir archivos diniremix Varios 2 15-05-2006 18:35:46
codigo para descomprimir un archivo .zip JAI_ME Varios 4 30-01-2006 17:37:08
descomprimir un programa nachete Varios 0 11-03-2005 18:05:06


La franja horaria es GMT +2. Ahora son las 01:04:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi