У меня есть приложение PySide, которое нужно запустить как admin. Я использовал метод, рекомендованный this post.Окно PySide появляется под другими окнами
import os
import sys
import time
from PySide.QtGui import *
from win32com.shell import shellcon
import win32com.shell.shell as shell
import win32con
def force_elevated():
try:
if sys.argv[-1] != 'asadmin':
script = os.path.abspath(sys.argv[0])
params = ' '.join([script] + sys.argv[1:] + ['asadmin'])
shell.ShellExecuteEx(nShow=win32con.SW_SHOWNORMAL,
fMask=shellcon.SEE_MASK_NOCLOSEPROCESS,
lpVerb='runas',
lpFile=sys.executable,
lpParameters=params)
sys.exit()
except Exception as ex:
print ex
class MyGui(QWidget):
def __init__(self):
super(MyGui, self).__init__()
self.show()
app = QApplication(sys.argv)
force_elevated()
splash = QSplashScreen("logo.png")
splash.show()
time.sleep(2)
gui = MyGui()
app.exec_()
Windows, UAC выскакивает и запрашивает у пользователя, чтобы права администратора. Если пользователь выбирает «да», новый экземпляр приложения запускается в режиме администратора. Если пользователь выбирает no, оператор try терпит неудачу, и программа продолжает работать в режиме без администратора.
Проблема заключается в том, что при запуске в режиме без администратора приложение запускается за другими окнами, поэтому легко думать, что он вообще не работает. После использования cx_freeze для создания исполняемого файла это может произойти даже тогда, когда вы активируете режим администрирования do.
Я не могу иметь окно всегда на высоте. Я пытался временно установить его как всегда сверху (чтобы перенести его на передний план), а затем отключить его, но это не работает. Я также пробовал использовать различные библиотеки и встроенные функции для поиска идентификатора процесса и указания окон, чтобы вывести его на передний план. Они либо вообще не работали, либо не работали надежно.
Есть ли у кого-нибудь надежный способ убедиться, что окно PySide появляется сверху?
В Windows это будет просто выделить окно в панели задач, и на самом деле не привести его на фронт. Это ограничение с Qt. Проблема заключается не столько в том, чтобы заставить ее выйти на фронт, когда это не так, но заставлять ее начинать * сверху, как обычно это делает программное обеспечение. –