lyx_mirror/development/Win32/pdfview/pdfview.nsi
Uwe Stöhr d5f15f4a6d Win installer: update MiKTeX
- also remove Qt5XML in the installer as it appears not to be used by LyX
- add a note that pdfview is not yet ready for full Unicode support
2017-11-11 18:37:16 +01:00

162 lines
4.0 KiB
Plaintext

/*
Windows PDF view helper
Author: Uwe Stöhr and Joost Verburg
This will be installed as pdfview.exe.
The application will launch the default PDF viewer to display the PDF file,
but works around the file locking problems of Adobe Reader and Acrobat.
*/
# FIXME
#Unicode true
#doesn't work with the Uniode system.dll of NSIS 3.0.2
!include LogicLib.nsh
!include FileFunc.nsh
#--------------------------------
# Settings
Caption "PDF Viewer"
OutFile pdfview.exe
Icon "..\packaging\icons\lyx.ico"
SilentInstall silent
#--------------------------------
# Windows Vista (and later) settings
RequestExecutionLevel user
#--------------------------------
# Variables
Var Character
Var RunAppReturn
Var OriginalFile
Var OriginalFileName
Var OriginalDir
Var PDFFile
Var ViewerFileName
Var Viewer
Var ViewerHandle
Var ViewerVersion
#--------------------------------
# Macros
!macro SystemCall STACK
# Call a Windows API function
Push `${STACK}`
CallInstDLL "$EXEDIR\System.dll" Call
!macroend
!macro HideConsole COMMAND_LINE
# Run an application and hide console output
Push `${COMMAND_LINE}`
CallInstDLL "$EXEDIR\Console.dll" Exec
Pop $RunAppReturn
${If} $RunAppReturn == "error"
MessageBox MB_OK|MB_ICONSTOP "Error opening PDF file $PDFFile."
${EndIf}
!macroend
#--------------------------------
# PDF viewing
Section "View PDF file"
InitPluginsDir # Temporary directory for PDF file
# Command line parameters
${GetParameters} $OriginalFile
# Trim quotes
StrCpy $Character $OriginalFile 1
${If} $Character == '"'
StrCpy $OriginalFile $OriginalFile "" 1
${EndIf}
StrCpy $Character $OriginalFile 1 -1
${If} $Character == '"'
StrCpy $OriginalFile $OriginalFile -1
${EndIf}
GetFullPathName $OriginalFile $OriginalFile
${GetFileName} $OriginalFile $OriginalFileName
${GetParent} $OriginalFile $OriginalDir # tmpbuf
${GetParent} $OriginalDir $OriginalDir # tmpdir
SetOutPath $TEMP # The LyX tmpbuf should not be locked
StrCpy $PDFFile $PLUGINSDIR\$OriginalFileName
# Check whether the file will be opened with Adobe Reader or Adobe Acrobat
!insertmacro SystemCall "shell32::FindExecutable(t '$OriginalFile', t '', t .s)"
Pop $ViewerFileName
${GetFileName} $ViewerFileName $Viewer
${If} $Viewer == ""
MessageBox MB_OK|MB_ICONEXCLAMATION "No PDF viewer is installed. \
Please install a PDF viewer such as Adobe Reader."
Quit
${EndIf}
${if} $Viewer == "AcroRd32.exe"
${orif} $Viewer == "AcroRd64.exe"
${orif} $Viewer == "Acrobat.exe"
# get the version of Acrobat - currenly not necessary
GetDLLVersion $ViewerFileName $R0 $R1
IntOp $R2 $R0 >> 16
IntOp $R2 $R2 & 0x0000FFFF ; $R2 now contains major version
#IntOp $R3 $R0 & 0x0000FFFF ; $R3 now contains minor version
#IntOp $R4 $R1 >> 16
#IntOp $R4 $R4 & 0x0000FFFF ; $R4 now contains release
#IntOp $R5 $R1 & 0x0000FFFF ; $R5 now contains build
StrCpy $ViewerVersion $R2
# check if there is a windows open containing the PDF
${if} $Viewer == "AcroRd32.exe"
${orif} $Viewer == "AcroRd64.exe"
${if} $ViewerVersion > 14
FindWindow $ViewerHandle "" "$OriginalFileName - Adobe Acrobat Reader DC"
${else}
FindWindow $ViewerHandle "" "$OriginalFileName - Adobe Reader"
${endif}
${elseif} $Viewer == "Acrobat.exe"
FindWindow $ViewerHandle "" "$OriginalFileName - Adobe Acrobat"
${if} $ViewerHandle == "0"
FindWindow $ViewerHandle "" "$OriginalFileName - Adobe Acrobat Pro"
${endif}
${endif}
${if} $ViewerHandle <> "0" # close the window
SendMessage $ViewerHandle 16 0 0
${endif}
# Copy PDF to temporary file to allow LyX to overwrite the original
CopyFiles /SILENT $OriginalFile $PDFFile
# Open a new view
!insertmacro HideConsole '"$ViewerFileName" "$PDFFile"'
${Else}
# Another PDF viewer like GSView is used
# No need for special actions, just forward to ShellExecute
ExecShell open $OriginalFile
${EndIf}
SectionEnd