Jump to content

Image Conversion Shell Extension


Recommended Posts

Here's a little shell-extension I made for IrfanView. What it does is allow you to convert between BMP, PNG, GIF, JPG and ICO simply by right clicking said files in windows. You may run the file from the desktop (or anywhere else) to install, and features include being asked if you want to overwrite an existing file, and the ability to uninstall the extension from "Add or Remove Programs" in Control Panel.

Save as I_CONV.VBS

' (c) 2006-2014 aractus.com, this file must not be sold, you may distribute it' freely so long as it remains unmodified with all internal documentation.'' 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.'' It should work on any windows system x86/64bit that supports IrfanView. It' Will work with Windows 2000 - Windows 7, I'm unsure about other versions' but it only requires Windows Script Host (WScript) on the system. In theory' it will work on Win9x so long as the Script Host Version supports the script.'' 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 and uninstallation:' 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" /' "Programs and Features" 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 (JPEG quality, etc). You can modify it at any time. It is put in a' new folder named "i_conv" in the main IrfanView installation folder.' --------------------------------------------------------------------------' Define variables.Option ExplicitOn Error Resume NextDim WshShell,fso,a,f,i,j,o,p,p2,t,u,v,w:w=0Set 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  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(""""&p&"i_view32.exe"" """&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") 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 IfElse' 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 it's' uninstall entry will point the way.  p=WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView\UninstallStri​ng")  p=Left(p,Len(p)-16)  p2=WshShell.RegRead("HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\IrfanView\U​ninstallString")  p2=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_view32.exe") Then    fso.CopyFile WScript.ScriptFullName,p&"i_conv.vbs"  ElseIf fso.fileexists(p2&"i_view32.exe") Then    p=p2    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_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 IfEnd 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  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(p&"\i_conv\i_view32.ini")  Set f=fso.CreateTextFile(p&"\i_conv\i_view32.ini", True):f.Write o:f.CloseElse' Or delete it if we're uninstalling.  fso.DeleteFile(p&"\i_conv\i_view32.ini")  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 IfNext'iSet WshShell=NothingWscript.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
Edited by Plamdi
Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Create New...