Skip to content

Commit

Permalink
对于 psutil 不可用的用户将尝试使用 wmic
Browse files Browse the repository at this point in the history
  • Loading branch information
Zzaphkiel committed Jun 28, 2024
1 parent 912df4e commit 1edc0f7
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 54 deletions.
1 change: 1 addition & 0 deletions app/common/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class SignalBus(QObject):
currentSummonerProfileChanged = pyqtSignal(dict)
gameStatusChanged = pyqtSignal(str)
champSelectChanged = pyqtSignal(dict)
getCmdlineError = pyqtSignal()

# career_interface
careerGameBarClicked = pyqtSignal(str)
Expand Down
30 changes: 26 additions & 4 deletions app/common/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,7 @@ def isLolGameProcessExist(path):
return b'League of Legends.exe' in processes


def getPortTokenServerByPid(pid):
'''
通过进程 id 获得启动命令行参数中的 port、token 以及登录服务器
'''
def getPortTokenServerByPidViaPsutil(pid):
port, token, server = None, None, None

process = psutil.Process(pid)
Expand All @@ -216,6 +213,31 @@ def getPortTokenServerByPid(pid):
return port, token, server


def getPortTokenServerByPidViaWmic():
'''
### 需要管理员权限
'''
command = "wmic process WHERE name='LeagueClientUx.exe' GET commandline"
output = subprocess.check_output(command, shell=True).decode("gbk")

port = re.findall(r'--app-port=(.+?)"', output)[0]
token = re.findall(r'--remoting-auth-token=(.+?)"', output)[0]
server = re.findall(r'--rso_platform_id=(.+?)"', output)[0]

return port, token, server


def getPortTokenServerByPid(pid):
'''
通过进程 id 获得启动命令行参数中的 port、token 以及登录服务器
'''

try:
return getPortTokenServerByPidViaPsutil(pid)
except:
return getPortTokenServerByPidViaWmic()


def getFileProperties(fname):
"""
读取给定文件的所有属性, 返回一个字典.
Expand Down
10 changes: 8 additions & 2 deletions app/lol/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,13 @@ def __init__(self):

async def start(self, pid):
self.pid = pid
self.port, self.token, self.server = getPortTokenServerByPid(pid)

try:
self.port, self.token, self.server = getPortTokenServerByPid(pid)
except:
signalBus.getCmdlineError.emit()
return

self.semaphore = asyncio.Semaphore(self.maxRefCnt)

await self.__initSessions()
Expand Down Expand Up @@ -286,7 +292,7 @@ async def __initSessions(self):
return

if self.server.lower() in ('hn1', 'hn10'):
url = f'https://{self.server.lower()}-cloud-sgp.lol.qq.com:21019'
url = f'https://{self.server.lower()}-k8s-sgp.lol.qq.com:21019'
else:
url = f'https://{self.server.lower()}-sgp.lol.qq.com:21019'

Expand Down
Binary file modified app/resource/i18n/Seraphine.zh_CN.qm
Binary file not shown.
Loading

0 comments on commit 1edc0f7

Please sign in to comment.