46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
|
import pythoncom
|
||
|
from win32com.shell import shell, shellcon
|
||
|
import win32api, os
|
||
|
|
||
|
class InternetShortcut:
|
||
|
def __init__( self ):
|
||
|
self._base = pythoncom.CoCreateInstance(
|
||
|
shell.CLSID_InternetShortcut, None,
|
||
|
pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IUniformResourceLocator
|
||
|
)
|
||
|
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, 1 )
|
||
|
def __getattr__( self, name ):
|
||
|
if name != "_base":
|
||
|
return getattr( self._base, name )
|
||
|
|
||
|
temp_dir=win32api.GetTempPath()
|
||
|
linkname=win32api.GetTempFileName(temp_dir, 'ish')[0]
|
||
|
print('Link:',linkname)
|
||
|
os.remove(linkname)
|
||
|
linkname+='.url'
|
||
|
|
||
|
ish=InternetShortcut()
|
||
|
ish.SetURL('https://github.com/mhammond/pywin32')
|
||
|
ish.save(linkname)
|
||
|
|
||
|
## IUniformResourceLocator also give access to IPropertySetStorage
|
||
|
pss=ish.QueryInterface(pythoncom.IID_IPropertySetStorage)
|
||
|
ps=pss.Open(shell.FMTID_InternetSite)
|
||
|
property_ids=[(k,v) for k,v in shellcon.__dict__.items() if k.startswith('PID_INTSITE_')]
|
||
|
for pname, pval in property_ids:
|
||
|
print(pname, ps.ReadMultiple((pval,))[0])
|
||
|
|
||
|
ps=pss.Open(shell.FMTID_Intshcut)
|
||
|
property_ids=[(k,v) for k,v in shellcon.__dict__.items() if k.startswith('PID_IS_')]
|
||
|
for pname, pval in property_ids:
|
||
|
print(pname, ps.ReadMultiple((pval,))[0])
|
||
|
|
||
|
new_sh=InternetShortcut()
|
||
|
new_sh.load(linkname)
|
||
|
new_sh.InvokeCommand('Open')
|