Per*_*nce 6 python windows shortcut win32com
我正在使用 win32com.client 在 Windows 上创建快捷方式:
from win32com.client import Dispatch
shell = Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(shortcut_path) # shortcut_path defined elsewhere
shortcut.Targetpath = target_path
shortcut.WorkingDirectory = working_directory # working_directory defined elsewhere
shortcut.save()
Run Code Online (Sandbox Code Playgroud)
我希望使用“以管理员身份运行”复选框创建快捷方式:
是否可以使用 python 和 win32com 来做到这一点?
我在 Windows 7 64 位上使用 python 3.5。
调用SetFlags接口方法IShellLinkDataList开启SLDF_RUNAS_USER:
import pythoncom
from win32com.shell import shell, shellcon
def create_link(link_path, target_path, description=None, directory=None,
runas=False):
link = pythoncom.CoCreateInstance(
shell.CLSID_ShellLink,
None,
pythoncom.CLSCTX_INPROC_SERVER,
shell.IID_IShellLink)
link.SetPath(target_path)
if description is not None:
link.SetDescription(description)
if directory is not None:
link.SetWorkingDirectory(directory)
if runas:
link_data = link.QueryInterface(shell.IID_IShellLinkDataList)
link_data.SetFlags(link_data.GetFlags() | shellcon.SLDF_RUNAS_USER)
file = link.QueryInterface(pythoncom.IID_IPersistFile)
file.Save(link_path, 0)
def set_link_runas(link_path):
link_data = pythoncom.CoCreateInstance(
shell.CLSID_ShellLink,
None,
pythoncom.CLSCTX_INPROC_SERVER,
shell.IID_IShellLinkDataList)
file = link_data.QueryInterface(pythoncom.IID_IPersistFile)
file.Load(link_path)
flags = link_data.GetFlags()
if not flags & shellcon.SLDF_RUNAS_USER:
link_data.SetFlags(flags | shellcon.SLDF_RUNAS_USER)
file.Save(link_path, 0)
Run Code Online (Sandbox Code Playgroud)
例子:
if __name__ == '__main__':
import os
import sys
desktop_path = shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, 0, 0)
profile_path = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, 0, 0)
version = '.'.join(str(x) for x in sys.version_info[:3])
description = "Python %s" % version
target_path = sys.executable
# test 1
link_path = os.path.join(desktop_path, description + '(1).lnk')
create_link(link_path, target_path, description, profile_path, True)
# test 2
link_path = os.path.join(desktop_path, description + '(2).lnk')
create_link(link_path, target_path, description, profile_path)
set_link_runas(link_path)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
798 次 |
| 最近记录: |