' 2006-2018 coded by Aractus: https://blog.aractus.com/i_conv.vbs ' GPL License: https://www.gnu.org/licenses/gpl.html ' ' This program is designed for use with IrfanView. It will add or remove ' shell extensions for converting between several popular image formats. ' If required you could add more to the list. ' In no way am I affiliated with IrfanView. ' ' Installation: ' 1. Double click on i_conv.vbs to install/uninstall ' 2. Run "WScript.exe i_conv.vbs" from a command prompt or the run dialogue. ' 3. Run "WScript.exe i_conv.vbs /s" to achieve a silent installation. ' ' Usage: ' Right click a picture with a supported format (by default BMP, PNG, GIF, ' JPG and ICO) and click "Convert to XXX" Where XXX is desired type. ' ' Notes on installation: ' i_conv.vbs can be run from anywhere to install so long as IrfanView is ' installed. If IrfanView isn't found the script will not install the ' extensions, but will uninstall if asked. If IrfanView was not installed ' correctly, or if it isn't found automatically with installation simply ' copy this file to the IrfanView folder and run from there. ' ' When this file is run it will automatically place a copy into your ' IrfanView folder (where possible), and you can delete any other installation ' point as it will not be needed. ' ' You can uninstall the shell extensions through "Add or Remove Programs" in ' Control Panel. Uninstallation will not delete i_conv.vbs, delete the file ' manually if required. ' ' If you prefer you can use /silent instead of /s. Silent installations ' suppress error messages if it cannot be installed. ' ' Other Notes: ' This will also write a configuration file for use exclusively with the shell ' extensions. You can modify it at any time. It is put in a new folder named ' "i_conv". ' -------------------------------------------------------------------------- ' Define variables. Option Explicit On Error Resume Next Dim WshShell,fso,a,f,fn,i,j,o,p,p2,p3,p4,t,u,v,w:w=0 Set WshShell=WScript.CreateObject("WScript.Shell") Set fso=CreateObject("Scripting.FileSystemObject") p=Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName)) If Wscript.Arguments.Count=1 Then If Wscript.Arguments(0)="REM" Then ' This is invoked from "Add or Remove Programs". v=MsgBox("Are you sure you want to remove the image-conversion shell extensions?",292,"Remove shell extensions confirmation") If v=7 Then WshShell=Nothing:Wscript.Quit(1) w=7 ElseIf UCase(Wscript.Arguments(0))="/S" Or UCase(Wscript.Arguments(0))="/SILENT" Then ' If We are running a silent install preset variables. w=6 Else ' We have invalid command parameters. ErrHndlr() End If ' This is the part used for conversion, it's extremely simple - it takes two ' variables, one is a file name, the other a file extensions - such as BMP and ' JPG, and tells IrfanView to convert file name to file format, after checking ' if destination file exists, and if necessary asking the user whether to ' overwrite or not. ElseIf Wscript.Arguments.Count=2 Then If fso.fileexists(p&"i_view32.exe") Then fn=p&"i_view32.exe" Else fn=p&"i_view64.exe" End If t=Wscript.Arguments(0):u=Wscript.Arguments(1) For i=Len(t) To 2 Step -1 If Mid(t,i,1)="." Then Exit For Next'i If i=1 Then ErrHndlr()' We have invalid command parameters. v=Right(t,Len(t)-i) If v=UCase(v)Then u=UCase(u) u=Left(t,i)&u If fso.fileexists(u) Then v=MsgBox("Destination file exists, ok to overwrite?",292,"Overwrite confirmation") If v=7 Then WshShell=Nothing:Wscript.Quit(1) End If WshShell.Run(""""&fn&""" """&t&""" /convert="""&u& """ /ini="""&p&"i_conv"""),1 Set WshShell=Nothing Wscript.Quit(1) ElseIf Wscript.Arguments.Count<>0 Then ' We have invalid command parameters. ErrHndlr() End If ' Everything after this is only run if you open the file directly. This means ' you either want to set up the shell extensions, or remove them. We check ' first for IrfanView, and if we can't find it then installing the shell ' extensions will be disabled. If fso.fileexists(p&"i_view32.exe") Or fso.fileexists(p&"i_view64.exe") Then If UCase(WScript.ScriptFullName)<>UCase(p&"I_CONV.VBS") Then ' If IrfanView is found in the folder this file is run from, and i_conv.vbs ' is incorrectly named, create a usable copy called i_conv.vbs. ' Otherwise we are sweet to go! fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" End If Else ' IrfanView wasn't found in the folder that i_conv.vbs was run from, so let's ' search for it.. best place to look first is in the registry, IrfanView ' doesn't have it's own key under HKLM\SOFTWARE, so we'll see if its ' uninstall entry will point the way. p=WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView64\UninstallString") p=Left(p,Len(p)-16) p2=WshShell.RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView64\UninstallString") p2=Left(p2,Len(p2)-16) p3=WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView\UninstallString") p3=Left(p,Len(p)-16) p4=WshShell.RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView\UninstallString") p4=Left(p2,Len(p2)-16) ' If IrfanView is found then all we need do is put i_conv.vbs into its folder. ' We check two locations for 64bit Windows. If fso.fileexists(p&"i_view64.exe") Then fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ElseIf fso.fileexists(p2&"i_view64.exe") Then p=p2 fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ElseIf fso.fileexists(p3&"i_view32.exe") Then p=p3 fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ElseIf fso.fileexists(p4&"i_view32.exe") Then p=p4 fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ' We still haven't found IrfanView... so the other place to look is in the ' computer's Program Files folder. We won't find it if the user has installed ' to a personalized location. ' As above we will need to put i_conv.vbs in the IrfanView folder. ElseIf fso.fileexists(WshShell.Environment("PROCESS")("ProgramFiles")&"\irfanview\i_view64.exe") Then p=WshShell.Environment("PROCESS")("ProgramFiles")&"\IrfanView\" fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ElseIf fso.fileexists(WshShell.Environment("PROCESS")("ProgramFiles")&"\irfanview\i_view32.exe") Then p=WshShell.Environment("PROCESS")("ProgramFiles")&"\IrfanView\" fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" ElseIf fso.fileexists(WshShell.Environment("PROCESS")("ProgramFiles(x86)")&"\irfanview\i_view32.exe") Then p=WshShell.Environment("PROCESS")("ProgramFiles(x86)")&"\IrfanView\" fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs" Else ' IrfanView was not found. Ask if user wants to uninstall extensions and exit. ' Unless we're meant to be doing a silent install, in which case we'll just ' end without alerting the user. If w=6 Then WshShell=Nothing:Wscript.Quit(0) ElseIf w<>7 Then v=MsgBox("IrfanView not found. Would you like to remove the shell extensions?",292,"Remove shell extensions") If v=7 Then WshShell=Nothing:Wscript.Quit(1) End If End If End If ' OK we're now ready to add or remove the shell extensions! ' Define the image formats we are going to use - I've included 5 as default, ' feel free to add more just remember to change the declaration of the "q" ' array to the correct size. It is important that if you want to do this to ' first remove the shell extensions before modifying the file. Dim q(4):q(0)="bmp":q(1)="gif":q(2)="ico":q(3)="jpg":q(4)="png" ' Ask user for input, unless we already know to install/uninstall that is. If w=0 Then w=MsgBox("Do you want the image-conversion shell extensions?",292,"Enable/Disable shell extensions") ' Write a custom .ini file for use with conversions, you may customize this ' but it's probably easier to edit the .ini once it's installed. If w=6 Then If fso.fileexists(p&"i_view32.exe") Then fn=p&"i_conv\i_view32.ini" Else fn=p&"i_conv\i_view64.ini" End If o="[PNG]"&vbCrLf&"CompressionLevel=6"&vbCrLf&"[JPEG]"&vbCrLf&"Save Quality=85"&vbCrLf&"Save Progressive=0"&vbCrLf&_ "Save Grayscale=0"&vbCrLf&"KeepExif=0"&vbCrLf&"KeepCom=0"&vbCrLf&"KeepIptc=0"&vbCrLf&"[MultiGIF]"&vbCrLf&_ "SaveInterlaced=0"&vbCrLf&"SaveTransparent=0"&vbCrLf&"UsePalette=0"&vbCrLf&"Transparency=0" fso.CreateFolder(p&"i_conv"):fso.DeleteFile(fn) Set f=fso.CreateTextFile(fn, True):f.Write o:f.Close Else ' Or delete it if we're uninstalling. fso.DeleteFile(fn) fso.DeleteFolder(p&"i_conv") End If ' Go through the registry and make the necessary changes... For i=0 To UBound(q) a=WshShell.RegRead("HKCR\."&q(i)&"\") If a<>"" Then a="HKCR\"&a&"\shell\" For j=0 To UBound(q) If i<>j Then t=a&"Convert_to_"&UCase(q(j))&"\" If w=6 Then WshShell.RegWrite t,"Convert to "&UCase(q(j)) WshShell.RegWrite t&"command\","WScript.exe """&p&"i_conv.vbs"" ""%d"" "&q(j) Else WshShell.RegDelete t&"command\":WshShell.RegDelete t End If End If Next'j t=a&"Remove_Image_Conversion_Shell_Extensions\" t="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\i_conv\" If w=6 Then WshShell.RegWrite t,"" WshShell.RegWrite t&"DisplayName","Image Conversion Shell Extensions (Removal)" WshShell.RegWrite t&"UninstallString","WScript.exe """&p&"i_conv.vbs"" REM" WshShell.RegWrite t&"NoModify",1,"REG_DWORD" WshShell.RegWrite t&"NoRepair",1,"REG_DWORD" Else WshShell.RegDelete t&"NoModify":WshShell.RegDelete t&"NoRepair" WshShell.RegDelete t&"UninstallString":WshShell.RegDelete t&"DisplayName":WshShell.RegDelete t End If End If Next'i Set WshShell=Nothing Wscript.Quit(1) sub ErrHndlr() MsgBox "Invalid parameters were given. The only correct user command line is /s or /silent.",16,"i_conv.vbs error" Set WshShell=Nothing Wscript.Quit(0) End Sub