import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
from flask import Flask,render_template
from flask import request
import json
from threading import Thread
import os
import subprocess
import time
def async2(func):
def wrapper(*args, **kwargs):
thr = Thread(target = func, args = args, kwargs = kwargs)
thr.start()
return wrapper
'''
加載網頁
'''
class MainWindow(QMainWindow):
windowMinimumed = pyqtSignal()
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle('079沉浸冒險島登器') #窗口標題
self.setGeometry(200,130,900,500) #窗口的大小和位置設置
self.browser=QWebEngineView()
#加載外部的web界面
self.browser.load(QUrl('http://118.24.13.206:5000/mxd_deq2'))
self.setCentralWidget(self.browser)
run_web_server()
'''
重寫關閉窗口按鈕事件重新
'''
def closeEvent(self,event):
z_popen("taskkill /pid 5000 -t -f")
z_popen("TASKKILL /F /IM 079沉浸冒險島登器.exe /T")
z_popen("TASKKILL /F /IM MapleStory.exe /T")
z_popen("TASKKILL /F /IM python.exe /T")
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.m_flag = True
self.m_Position = event.globalPos() - self.pos() # 獲取鼠標相對窗口的位置
event.accept()
self.setCursor(QCursor(Qt.OpenHandCursor)) # 更改鼠標圖標
def mouseMoveEvent(self, QMouseEvent):
if Qt.LeftButton and self.m_flag:
self.move(QMouseEvent.globalPos() - self.m_Position) # 更改窗口位置
QMouseEvent.accept()
def mouseReleaseEvent(self, QMouseEvent):
self.m_flag = False
self.setCursor(QCursor(Qt.ArrowCursor))
#-------------本地web接口----------------
@async2
def run_web_server():
'''
tasklist
taskkill /pid 9396 -t
'''
def z_popen(cmd):
try:
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
lines = p.stdout.readlines()
status = p.wait()
return [line.decode('gbk') for line in lines]
# taks_list = os.popen(cmd)
# return [item for item in taks_list.read().split("\n")]
except Exception as ex:
pass
#----------------------------
app = Flask(__name__)
# 啓動遊戲
def start_game():
ocmd = "MapleStory.exe 128.24.13.206 3339"
subprocess.Popen(ocmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# status = p.wait()
time.sleep(1)
open_game()
'''
打開遊戲
'''
def open_game():
try:
time.sleep(1)
# 關閉第一個彈窗頁面
cmd_text = z_popen("tasklist")
for item in cmd_text:
if "MapleStory.exe" in item:
data_list = [x for x in item.split(" ") if x]
n_cmd = "taskkill /pid %s -t" % (data_list[1])
z_popen(n_cmd)
break
time.sleep(2)
except Exception as ex:
sys.exit(0)
#運行遊戲
@app.route('/run_game', methods=['GET', 'POST'])
def run_game():
if request.method == 'GET':
print("運行遊戲")
data={}
start_game()
data["msg"]=True
return json.dumps(data,ensure_ascii=False)
else:
return "請求方法錯誤!"
#關閉窗口
@app.route('/close_ck', methods=['GET', 'POST'])
def close_ck():
if request.method == 'GET':
z_popen("TASKKILL /F /IM 079沉浸冒險島登器.exe /T")
z_popen("TASKKILL /F /IM python.exe /T")
# win.on_pushButton_clicked()
data = {}
data["msg"] = True
return json.dumps(data, ensure_ascii=False)
else:
return "請求方法錯誤!"
#防爆內存
@app.route('/fangbaoneircun', methods=['GET', 'POST'])
def fangbaoneircun():
if request.method == 'GET':
z_popen("內存釋放器 .exe")
data = {}
data["msg"] = True
return json.dumps(data, ensure_ascii=False)
else:
return "請求方法錯誤!"
#預留的萬能執行命令端口
@app.route('/universal', methods=['GET', 'POST'])
def universal():
if request.method == 'GET':
cmd_str = request.args.get("cmd_str")
z_popen(cmd_str)
data = {}
data["msg"] = True
return json.dumps(data, ensure_ascii=False)
else:
return "請求方法錯誤!"
#-----------------------------------------
app.run(port=5000)
if __name__ == '__main__':
def z_popen(cmd):
try:
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
lines = p.stdout.readlines()
status = p.wait()
return [line.decode('gbk') for line in lines]
except Exception as ex:
pass
#--------------------------
app=QApplication(sys.argv)
win=MainWindow()
win.show()
app.exit(app.exec_())