1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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
|