import time import pythoncom from win32com.shell import shell, shellcon website = "https://github.com/mhammond/pywin32/" iad = pythoncom.CoCreateInstance( shell.CLSID_ActiveDesktop, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IActiveDesktop, ) opts = iad.GetDesktopItemOptions() if not (opts["ActiveDesktop"] and opts["EnableComponents"]): print("Warning: Enabling Active Desktop") opts["ActiveDesktop"] = True opts["EnableComponents"] = True iad.SetDesktopItemOptions(opts) iad.ApplyChanges(0xFFFF) iad = None ## apparently takes a short while for it to become active time.sleep(2) iad = pythoncom.CoCreateInstance( shell.CLSID_ActiveDesktop, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IActiveDesktop, ) cnt = iad.GetDesktopItemCount() print("Count:", cnt) for i in range(cnt): print(iad.GetDesktopItem(i)) component = { "ID": cnt + 1, "ComponentType": shellcon.COMP_TYPE_WEBSITE, "CurItemState": shellcon.IS_NORMAL, "SubscribedURL": website, "Source": website, "FriendlyName": "Pywin32 on SF", "Checked": True, ## this controls whether item is currently displayed "NoScroll": False, "Dirty": False, "Pos": { "Top": 69, "Left": 69, "Height": 400, "Width": 400, "zIndex": 1002, "CanResize": True, "CanResizeX": True, "CanResizeY": True, "PreferredLeftPercent": 0, "PreferredTopPercent": 0, }, "Original": { "Top": 33, "Left": 304, "Height": 362, "Width": 372, "ItemState": shellcon.IS_NORMAL, }, "Restored": { "Top": 33, "Left": 304, "Height": 362, "Width": 372, "ItemState": shellcon.IS_NORMAL, }, } try: existing_item = iad.GetDesktopItemBySource(website) except pythoncom.com_error: pass else: iad.RemoveDesktopItem(existing_item) iad.ApplyChanges(0xFFFF) iad.AddDesktopItem(component) iad.ApplyChanges(0xFFFF) ## need to check which AD_APPLY constants are actually needed