Página 1 de 1

Ejecutar programa desde menú contextual de explorador de Win

Publicado: 01 Jun 2011, 11:51
por jamaro
Hola a tod@s:

He hecho una pequeña aplicación que, utilizando GhostScript, convierte un archivo PDF en imágenes JPG. De momento, al ejecutar el programa pide que selecciones un archivo PDF, abriendo un cuadro de diálogo.

Con una herramienta como FileTypeMan de Nirsoft he creado una opción en el menú contextual del explorador de Windows que al seleccionar un archivo .pdf ejecuta mi aplicación.

Ahora lo que necesito es que mi programa sepa que debe realizar la conversión de "ese archivo PDF" a JPG. En lugar de seleccionar con el cuadro de diálogo de archivos, debe hacer la conversión sobre el archivo PDF seleccionado.

¿Sabéis cómo puedo indicar a mi programa que ejecute la conversión en ese archivo desde el que se ha llamado con el menú contextual?

Como siempre, gracias ;-)

EDITADO: Me contesto a mí mismo

He visto en la ayuda, apartado Command Line Parameters de Running Scripts, que se puede utilizar $CmdLine[x] precisamente para esto.
En mi caso, he utilizado $CmdLine[1], que es el primer (y único parámetro) que se envía desde el menú contextual.

¡Otra cosa que he aprendido hoy!




Por cierto, el código, por si a alguien le interesa (es sencillo y rápido, y seguramente se puede limpiar/ordenar). Se necesita GhostScript para utilizarlo:

NUEVA EDICIÓN 02/06/2011: Se ha añadido la condición if $CmdLine[0]=0 para cuando se ejecute el programa directamente, sin parámetros.

Código: Seleccionar todo

#include <Array.au3>
#include <file.au3>

$CarpetaGhostScript="C:\Archivos de programa\gs\gs9.02\bin\GSWin32c" ;<-------------------- Ubicación de GhostScript

Global $CarpetaArchivos

if $CMDLINE[0]=0 Then	; Si se ejecuta el prgorama directamente
	$CarpetaArchivos=Selecciona_Archivo()	; Si se desea seleccionar archivo
	$PrimeraPagina=InputBox("Primera Página","Introduzca la primera página")
	$UltimaPagina=InputBox("Última Página","Introduzca la última página")
Else
	if $CMDLINE[1]<>"" Then
		$CarpetaArchivos=$CMDLINE[1]			; Si se ejecuta desde el menú contextual del explorador de windows
		$PrimeraPagina=""						; se convierte a JPG todas las páginas del PDF
		$UltimaPagina=""
	EndIf
EndIf


Dim $szDrive, $szDir, $szFName, $szExt
$cadenacarpetaseparada= _PathSplit($CarpetaArchivos, $szDrive, $szDir, $szFName, $szExt)

;_ArrayDisplay($cadenacarpetaseparada,"Matriz $cadenacarpetaseparada")
$tamanomatriz_cadenacarpetaseparada=UBound($cadenacarpetaseparada)-2 ; Tamaño máximo de la matriz -2 porque es donde está el nombre de la carpeta

$CarpetaOrigen=$szDrive& $szDir
$ArchivoOrigen=$szDrive& $szDir& $szFName& $szExt
$ArchivoSalida=$szDrive& $szDir& $szFName&"_%03d.jpg"
ConsoleWrite($CarpetaOrigen & @CRLF)
ConsoleWrite($ArchivoOrigen & @CRLF)
ConsoleWrite($ArchivoSalida & @CRLF)


$cadena='"'& $CarpetaGhostScript & '"'
if $PrimeraPagina<>"" then $cadena=$cadena & ' -dFirstPage=' & $PrimeraPagina
if $UltimaPagina<>"" then $cadena=$cadena & ' -dLastPage=' & $UltimaPagina

$cadena=$cadena & ' -sDEVICE=jpeg -dJPEGQ=85  -r150 -sOutputFile="' & $ArchivoSalida & '" -dNOPAUSE "' & $ArchivoOrigen & '" -c quit'

ConsoleWrite($cadena)

run($cadena)


Func Selecciona_Archivo() ; ----- Selecciona archivo PDF para modificar  -----
	Global $ArchivoOrigen_T
	$ArchivoOrigen_T=FileOpenDialog("Seleccione archivo","C:\Documents and Settings\Usuario\Mis documentos\","(*.pdf)",1)
	return $ArchivoOrigen_T
EndFunc

Re: Ejecutar programa desde menú contextual de explorador de

Publicado: 02 Jun 2011, 13:26
por BasicOs
EStupendo, el aporte y auto-contestación via Ayuda, allí esta casi todo :smt017 :smt017

Si lo deseas puedes moverlo a Scripts, o crear otro hilo más orientado a describir la funcionalidad, (que ya lo tienes), y quitar lo de la duda (si lo deseas), :smt022
Y añadir el enlace del GhostScript que pueda ser mejor :)

Salu22:)

Re: Ejecutar programa desde menú contextual de explorador de

Publicado: 02 Jun 2011, 18:54
por jamaro
BasicOs escribió:EStupendo, el aporte y auto-contestación via Ayuda, allí esta casi todo :smt017 :smt017

Si lo deseas puedes moverlo a Scripts, o crear otro hilo más orientado a describir la funcionalidad, (que ya lo tienes), y quitar lo de la duda (si lo deseas), :smt022
Y añadir el enlace del GhostScript que pueda ser mejor :)

Salu22:)
Gracias BasicOS. Siempre enorgullece eso de "si lo deseas puedes moverlo a Scripts"... :smt001 Si lo ves útil, crearé un hilo nuevo.