加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

使用“以管理员身份运行”创建Windows资源管理器快捷方式

发布时间:2020-12-14 05:38:39 所属栏目:Windows 来源:网络整理
导读:我正在使用win32com.client在 Windows上创建快捷方式: from win32com.client import Dispatchshell = Dispatch("WScript.Shell")shortcut = shell.CreateShortCut(shortcut_path) # shortcut_path defined elsewhereshortcut.Targetpath = target_pathshort
我正在使用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()

我希望使用“以管理员身份运行”复选框创建快捷方式:

Shortcut with Run as administrator" checkbox on

是否可以使用python和win32com来做到这一点?

我在Windows 7 64位上使用python 3.5.

解决方法

调用 IShellLinkDataList接口的SetFlags方法以启用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,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)

例:

if __name__ == '__main__':
    import os
    import sys

    desktop_path = shell.SHGetFolderPath(0,shellcon.CSIDL_DESKTOP,0)
    profile_path = shell.SHGetFolderPath(0,shellcon.CSIDL_PROFILE,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,description,profile_path,True)
    # test 2
    link_path = os.path.join(desktop_path,description + '(2).lnk')
    create_link(link_path,profile_path)
    set_link_runas(link_path)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读