# link.py # From a demo by Mark Hammond, corrupted by Mike Fletcher # (and re-corrupted by Mark Hammond :-) import os import pythoncom from win32com.shell import shell class PyShortcut: def __init__(self): self._base = pythoncom.CoCreateInstance( shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink, ) def load(self, filename): # Get an IPersist interface # which allows save/restore of object to/from files self._base.QueryInterface(pythoncom.IID_IPersistFile).Load(filename) def save(self, filename): self._base.QueryInterface(pythoncom.IID_IPersistFile).Save(filename, 0) def __getattr__(self, name): if name != "_base": return getattr(self._base, name) if __name__ == "__main__": import sys if len(sys.argv) < 2: print( "Usage: %s LinkFile [path [, args[, description[, working_dir]]]]\n\nIf LinkFile does not exist, it will be created using the other args" ) sys.exit(1) file = sys.argv[1] shortcut = PyShortcut() if os.path.exists(file): # load and dump info from file... shortcut.load(file) # now print data... print( "Shortcut in file %s to file:\n\t%s\nArguments:\n\t%s\nDescription:\n\t%s\nWorking Directory:\n\t%s\nItemIDs:\n\t" % ( file, shortcut.GetPath(shell.SLGP_SHORTPATH)[0], shortcut.GetArguments(), shortcut.GetDescription(), shortcut.GetWorkingDirectory(), # shortcut.GetIDList(), ) ) else: if len(sys.argv) < 3: print( "Link file does not exist\nYou must supply the path, args, description and working_dir as args" ) sys.exit(1) # create the shortcut using rest of args... data = map( None, sys.argv[2:], ("SetPath", "SetArguments", "SetDescription", "SetWorkingDirectory"), ) for value, function in data: if value and function: # call function on each non-null value getattr(shortcut, function)(value) shortcut.save(file)