请问 Python 中如何以管理员权限打开 PyQt 的 QLabel 外部连结?

2015-07-14 15:36:09 +08:00
 Tspm1eca
当我用管理员权限打开外部连结时,会出现错误:
shellexecute failed (error 2)

我的程序需要管理员权限。

先谢谢任何帮助我的朋友。

测试代码:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from win32com.shell import shell
import win32con, win32event, win32process
from win32com.shell import shellcon
import sys, ctypes

class Win(QWidget):
def __init__(self):
super().__init__()
self.resize(100, 100)
version = QLabel('''<a style= "color:#55aaff; text-decoration:none; font-size:11pt; font-family:Consolas; font-weight: bold;" \
href="http://www.google.com">Open Url</a>''', self)
version.setOpenExternalLinks(True)

def runAsAdmin(wait=True):

cmd = sys.executable
params = " ".join(['"{}"'.format(x) for x in sys.argv])

procInfo = shell.ShellExecuteEx(nShow = win32con.SW_SHOWNORMAL,
fMask = shellcon.SEE_MASK_NOCLOSEPROCESS,
lpVerb = 'runas',
lpFile = cmd,
lpParameters = params)

if wait:
procHandle = procInfo['hProcess']
obj = win32event.WaitForSingleObject(procHandle, win32event.INFINITE)
rc = win32process.GetExitCodeProcess(procHandle)

if not ctypes.windll.shell32.IsUserAnAdmin():
runAsAdmin()

else:
app = QApplication(sys.argv)
win = Win()
win.show()
sys.exit(app.exec_())
2279 次点击
所在节点    Python
2 条回复
salemilk
2015-07-14 17:42:29 +08:00
line 9
def __init__(self):
^
IndentationError: expected an indented block

初学者,,,但是测试的时候提示缩进错误呢。
Tspm1eca
2015-07-14 22:48:06 +08:00
@salemilk 這是因為在這貼上代碼, 缩进全不見了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/205634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX