diff --git a/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py b/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py index faf74836..fb1a639c 100644 --- a/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py +++ b/LunaTranslator/LunaTranslator/gui/settingpage_xianshishezhi.py @@ -798,15 +798,7 @@ def setTabThree_lazy(self): ("缩放方式", 4), ( getsimplecombobox( - _TRL( - [ - "Magpie", - "ALT+ENTER", - "SW_SHOWMAXIMIZED", - "LosslessScaling", - "Magpie_External", - ] - ), + static_data["scalemethods_vis"], globalconfig, "fullscreenmethod_3", ), diff --git a/LunaTranslator/LunaTranslator/gui/translatorUI.py b/LunaTranslator/LunaTranslator/gui/translatorUI.py index cc38fbcf..347a402e 100644 --- a/LunaTranslator/LunaTranslator/gui/translatorUI.py +++ b/LunaTranslator/LunaTranslator/gui/translatorUI.py @@ -3,7 +3,7 @@ import functools import threading import os, sys from PyQt5.QtCore import QT_VERSION_STR -import windows +import windows, importlib from traceback import print_exc from PyQt5.QtCore import Qt, pyqtSignal import qtawesome @@ -20,7 +20,6 @@ from myutils.hwnd import mouseselectwindow, grabwindow, getExeIcon from gui.dialog_savedgame import dialog_savedgame_new from gui.dialog_memory import dialog_memory from gui.textbrowser import Textbrowser -from myutils.fullscreen import fullscreen from gui.rangeselect import moveresizegame, rangeselct_function from gui.usefulwidget import resizableframeless, isinrect from gui.dialog_savedgame import browserdialog @@ -659,7 +658,8 @@ class QUnFrameWindow(resizableframeless): static_data["allhira"], static_data["allkata"] ) self.isletgamefullscreened = False - self.fullscreenmanager = fullscreen(self._externalfsend) + self.fullscreenmanager = None + self.fullscreenmethod = None self._isTracking = False self.isontop = True self._TitleLabel = QLabel(self) @@ -721,21 +721,41 @@ class QUnFrameWindow(resizableframeless): for pid in gobject.baseobject.textsource.pids: winsharedutils.SetProcessMute(pid, self.processismuteed) - def _externalfsend(self): - self.isletgamefullscreened = False + def _externalfsend(self, current): + self.isletgamefullscreened = current self.refreshtooliconsignal.emit() def _fullsgame(self): - if gobject.baseobject.textsource and gobject.baseobject.textsource.hwnd: - _hwnd = gobject.baseobject.textsource.hwnd - else: - _hwnd = windows.GetForegroundWindow() - _pid = windows.GetWindowThreadProcessId(_hwnd) - if _pid == os.getpid(): + try: + if gobject.baseobject.textsource and gobject.baseobject.textsource.hwnd: + _hwnd = gobject.baseobject.textsource.hwnd + else: + _hwnd = windows.GetForegroundWindow() + _pid = windows.GetWindowThreadProcessId(_hwnd) + if _pid == os.getpid(): + return + # self.isletgamefullscreened = not self.isletgamefullscreened + # self.refreshtoolicon() + skip = False + if (self.fullscreenmanager is None) or ( + self.fullscreenmethod != globalconfig["fullscreenmethod_3"] + ): + + self.fullscreenmethod = globalconfig["fullscreenmethod_3"] + + if self.fullscreenmanager: + skip = self.fullscreenmanager.endX() + self.fullscreenmanager = importlib.import_module( + "scalemethod." + + static_data["scalemethods"][globalconfig["fullscreenmethod_3"]] + ).Method(self._externalfsend) + if skip: return - self.isletgamefullscreened = not self.isletgamefullscreened - self.refreshtoolicon() - self.fullscreenmanager(_hwnd, self.isletgamefullscreened) + self.fullscreenmanager.callstatuschange( + _hwnd + ) # , self.isletgamefullscreened) + except: + print_exc() def changemousetransparentstate(self, idx): if idx == 0: @@ -988,7 +1008,8 @@ class QUnFrameWindow(resizableframeless): self.buttons.append(button) def closeEvent(self, a0) -> None: - self.fullscreenmanager.end() + if self.fullscreenmanager: + self.fullscreenmanager.endX() gobject.baseobject.isrunning = False self.tray.hide() self.tray = None diff --git a/LunaTranslator/LunaTranslator/myutils/fullscreen.py b/LunaTranslator/LunaTranslator/myutils/fullscreen.py deleted file mode 100644 index b77305dc..00000000 --- a/LunaTranslator/LunaTranslator/myutils/fullscreen.py +++ /dev/null @@ -1,291 +0,0 @@ -import os, json -import windows, winsharedutils -from winsharedutils import letfullscreen, recoverwindow -from myutils.config import globalconfig, magpie_config -from myutils.hwnd import ListProcess, injectdll -from traceback import print_exc -from myutils.subproc import subproc_w -import time -from myutils.wrapper import threader -import re - - -class fullscreen: - def __init__(self, _externalfsend) -> None: - self.savewindowstatus = None - self._externalfsend = _externalfsend - self.status = False - self.lasthwnd = None - self.injectedpids = set() - - def end(self): - if self.status and self.lasthwnd: - self.__call__(self.lasthwnd, not self.status) - - @property - def fsmethod(self): - return globalconfig["fullscreenmethod_3"] - - def internal_stopped(self): - self._externalfsend() - self.status = False - - @threader - def _wait_lossless_stop_external(self): - while windows.FindWindow("LosslessScaling", None) == 0: - time.sleep(0.5) - while windows.FindWindow("LosslessScaling", None): - time.sleep(0.5) - self.internal_stopped() - - def runlossless(self): - exes = [_[1] for _ in ListProcess()] - path = globalconfig["lossless"]["path"] - pexe = os.path.join(path, "LosslessScaling.exe") - if pexe.replace("/", "\\") not in exes: - subproc_w(pexe, cwd=path, name="LosslessScaling") - time.sleep(1) - - if globalconfig["hooklossless"]: - for pid, exe in ListProcess(): - if exe == pexe.replace("/", "\\"): - if pid in self.injectedpids: - continue - dll = os.path.abspath("./files/plugins/hookmagpie.dll") - injecter = os.path.abspath( - "./files/plugins/shareddllproxy{}.exe".format("64") - ) - injectdll(pid, injecter, dll) - self.injectedpids.add(pid) - break - - def _external_lossless(self, hwnd, full): - - if full: - self.runlossless() - # self._wait_lossless_stop_external() - - windows.SetForegroundWindow(hwnd) - time.sleep(0.1) - configpath = os.path.join( - os.environ["LOCALAPPDATA"], "Lossless Scaling/Settings.xml" - ) - if os.path.exists(configpath) == False: - return - with open(configpath, "r", encoding="utf8") as ff: - config = ff.read() - - Hotkey = re.findall("(.*?)", config)[0] - hotkHotkeyModifierKeysey = re.findall( - "(.*?)", config - )[0] - - mods = hotkHotkeyModifierKeysey.split(" ") - - vkcode = windows.MapVirtualKey(Hotkey) - mp1 = {"Shift": 16, "Windows": 91, "Control": 17, "Alt": 18} - for k in mods: - windows.keybd_event(mp1[k], 0, 0, 0) - windows.keybd_event(vkcode, 0, 0, 0) - windows.keybd_event(vkcode, 0, windows.KEYEVENTF_KEYUP, 0) - for k in mods: - windows.keybd_event(mp1[k], 0, windows.KEYEVENTF_KEYUP, 0) - - def runmagpie(self): - if windows.FindWindow("Magpie_Hotkey", None) == 0: - subproc_w( - os.path.join(globalconfig["magpiepath"], "Magpie.exe"), - cwd=globalconfig["magpiepath"], - name="magpie", - ) - while windows.FindWindow("Magpie_Hotkey", None) == 0: - time.sleep(0.5) - if globalconfig["hookmagpie"]: - pid = windows.GetWindowThreadProcessId( - windows.FindWindow("Magpie_Hotkey", None) - ) - if pid in self.injectedpids: - return - dll = os.path.abspath("./files/plugins/hookmagpie.dll") - injecter = os.path.abspath( - "./files/plugins/shareddllproxy{}.exe".format("64") - ) - injectdll([pid], injecter, dll) - self.injectedpids.add(pid) - - @threader - def _wait_magpie_stop_external(self): - while ( - windows.FindWindow( - "Window_Magpie_967EB565-6F73-4E94-AE53-00CC42592A22", None - ) - == 0 - ): - time.sleep(0.5) - while windows.FindWindow( - "Window_Magpie_967EB565-6F73-4E94-AE53-00CC42592A22", None - ): - time.sleep(0.5) - self.internal_stopped() - - def _external_magpie(self, hwnd, full): - - configpath = os.path.join(globalconfig["magpiepath"], "config/config.json") - - if os.path.exists(configpath) == False: - version = winsharedutils.queryversion( - os.path.join(globalconfig["magpiepath"], "Magpie.exe") - ) - checks = [ - os.path.join( - os.environ["LOCALAPPDATA"], "Magpie/config/v2/config.json" - ), - os.path.join(os.environ["LOCALAPPDATA"], "Magpie/config/config.json"), - ] - if version: - if version[:3] >= (0, 10, 100): # v0.11.0-preview1 - checks = [checks[0]] - else: - checks = [checks[1]] - for ck in checks: - if os.path.exists(ck): - configpath = ck - break - - if os.path.exists(configpath) == False: - return - - with open(configpath, "r", encoding="utf8") as ff: - config = json.load(ff) - autoRestore = config["autoRestore"] - shortcuts = config["shortcuts"]["scale"] - mp1 = {"SHIFT": 16, "WIN": 91, "CTRL": 17, "ALT": 18} - mp = {0x100: "WIN", 0x200: "CTRL", 0x400: "ALT", 0x800: "SHIFT"} - - if full: - self.runmagpie() - if autoRestore == False: - self._wait_magpie_stop_external() - - windows.SetForegroundWindow(hwnd) - time.sleep(0.1) - - for k in mp: - if shortcuts & k != 0: - windows.keybd_event(mp1[mp[k]], 0, 0, 0) - - k2 = shortcuts & 0xFF - windows.keybd_event(k2, 0, 0, 0) - windows.keybd_event(k2, 0, windows.KEYEVENTF_KEYUP, 0) - for k in mp: - if shortcuts & k != 0: - windows.keybd_event(mp1[mp[k]], 0, windows.KEYEVENTF_KEYUP, 0) - - # def _4(self,hwnd,full): - # if full: - # self.engine= subproc_w(r'./files/plugins/shareddllproxy64.exe lossless "{}" "{}" {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}'.format(globalconfig['lossless']['path'],hwnd, - - # globalconfig['lossless']['scalingMode'], - # globalconfig['lossless']['scalingFitMode'], - # globalconfig['lossless']['scalingType'], - # globalconfig['lossless']['scalingSubtype'], - # globalconfig['lossless']['scaleFactor'], - # globalconfig['lossless']['resizeBeforeScale'], - # globalconfig['lossless']['windowedMode'], - # globalconfig['lossless']['sharpness'], - # globalconfig['lossless']['VRS'], - # globalconfig['lossless']['clipCursor'], - # globalconfig['lossless']['cursorSensitivity'], - # globalconfig['lossless']['hideCursor'], - # globalconfig['lossless']['scaleCursor'], - # globalconfig['lossless']['doubleBuffering'], - # globalconfig['lossless']['vrrSupport'], - # globalconfig['lossless']['hdrSupport'], - # globalconfig['lossless']['allowTearing'], - # globalconfig['lossless']['legacyCaptureApi'], - # globalconfig['lossless']['drawFps'], - # globalconfig['lossless']['gpuId'], - # globalconfig['lossless']['displayId'], - # globalconfig['lossless']['captureOffsetLeft'], - # globalconfig['lossless']['captureOffsetTop'], - # globalconfig['lossless']['captureOffsetRight'], - # globalconfig['lossless']['captureOffsetBottom'], - # globalconfig['lossless']['multiDisplayMode'], - # os.getpid(), - # globalconfig['lossless']['frameGeneration'], - # globalconfig['lossless']['syncInterval']),cwd=globalconfig['lossless']['path']) - # self._waitenginestop() - # else: - # endevent =windows.AutoHandle(windows.CreateEvent(False, False,'LOSSLESS_WAITFOR_STOP_SIGNAL'+str(self.engine.pid))) - # windows.SetEvent(endevent) - - @threader - def _waitenginestop_magpie(self): - self.engine.wait() - self.internal_stopped() - - def _magpie_builtin(self, hwnd, full): - if full: - profiles_index = globalconfig["profiles_index"] - if profiles_index > len(magpie_config["profiles"]): - profiles_index = 0 - - jspath = os.path.abspath("./userconfig/magpie_config.json") - with open(jspath, "w", encoding="utf-8") as ff: - ff.write( - json.dumps( - magpie_config, ensure_ascii=False, sort_keys=False, indent=4 - ) - ) - self.engine = subproc_w( - './files/plugins/Magpie/Magpie.Core.exe {} {} "{}"'.format( - profiles_index, hwnd, jspath - ), - cwd="./files/plugins/Magpie/", - ) - self._waitenginestop_magpie() - else: - windows.SendMessage( - windows.FindWindow("Magpie_Core_CLI_Message", None), - windows.RegisterWindowMessage("Magpie_Core_CLI_Message_Stop"), - ) - - # magpie9 - # def _0(self,hwnd,full): - # if full: - # SetForegroundWindow(hwnd ) - # callmagpie(('./files/plugins/Magpie_v0.9.1'),hwnd,globalconfig['magpiescalemethod'],globalconfig['magpieflags'],globalconfig['magpiecapturemethod']) - # else: - # hwnd=FindWindow('Window_Magpie_967EB565-6F73-4E94-AE53-00CC42592A22',None) - # if hwnd==0: - # return - # WM_DESTORYHOST=RegisterWindowMessage( "MAGPIE_WM_DESTORYHOST") - # SendMessage(hwnd, WM_DESTORYHOST) - def _alt_enter(self, hwnd, full): - windows.SetForegroundWindow(hwnd) - windows.keybd_event(18, 0, 0, 0) # alt - windows.keybd_event(13, 0, 0, 0) # enter - - windows.keybd_event(13, 0, windows.KEYEVENTF_KEYUP, 0) - windows.keybd_event(18, 0, windows.KEYEVENTF_KEYUP, 0) - - def _SW_SHOWMAXIMIZED(self, hwnd, full): - if full: - self.savewindowstatus = letfullscreen(hwnd) - else: - recoverwindow(hwnd, self.savewindowstatus) - - @threader - def __call__(self, hwnd=0, full=False): - try: - [ - self._magpie_builtin, - self._alt_enter, - self._SW_SHOWMAXIMIZED, - self._external_lossless, - self._external_magpie, - ][self.fsmethod](hwnd, full) - self.status = full - self.lasthwnd = hwnd - except: - print_exc() diff --git a/LunaTranslator/LunaTranslator/scalemethod/SW_SHOWMAXIMIZED.py b/LunaTranslator/LunaTranslator/scalemethod/SW_SHOWMAXIMIZED.py new file mode 100644 index 00000000..09aabf35 --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/SW_SHOWMAXIMIZED.py @@ -0,0 +1,10 @@ +from scalemethod.base import scalebase +from winsharedutils import letfullscreen, recoverwindow + + +class Method(scalebase): + def changestatus(self, hwnd, full): + if full: + self.savewindowstatus = letfullscreen(hwnd) + else: + recoverwindow(hwnd, self.savewindowstatus) diff --git a/LunaTranslator/LunaTranslator/scalemethod/alt_enter.py b/LunaTranslator/LunaTranslator/scalemethod/alt_enter.py new file mode 100644 index 00000000..8fc3620b --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/alt_enter.py @@ -0,0 +1,12 @@ +from scalemethod.base import scalebase +import windows + + +class Method(scalebase): + def changestatus(self, hwnd, full): + windows.SetForegroundWindow(hwnd) + windows.keybd_event(18, 0, 0, 0) # alt + windows.keybd_event(13, 0, 0, 0) # enter + + windows.keybd_event(13, 0, windows.KEYEVENTF_KEYUP, 0) + windows.keybd_event(18, 0, windows.KEYEVENTF_KEYUP, 0) diff --git a/LunaTranslator/LunaTranslator/scalemethod/base.py b/LunaTranslator/LunaTranslator/scalemethod/base.py new file mode 100644 index 00000000..8459a2b0 --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/base.py @@ -0,0 +1,35 @@ +class scalebase: + def __init__(self, setuistatus) -> None: + self._setuistatus = setuistatus + self.full = True + self.hwnd = None + self.hasend = False + self.init() + + def setuistatus(self, current): + if self.hasend: + return + self._setuistatus(current) + self.full = not current + + def callstatuschange(self, hwnd): + self.hwnd = hwnd + self.changestatus(hwnd, self.full) + self.setuistatus(self.full) + + def endX(self): + if not self.full and self.hwnd: + self.callstatuschange(self.hwnd) + self.end() + return True + self.hasend = True + return False + + def changestatus(self, hwnd, full): + raise Exception + + def init(self): + pass + + def end(self): + pass diff --git a/LunaTranslator/LunaTranslator/scalemethod/external_lossless.py b/LunaTranslator/LunaTranslator/scalemethod/external_lossless.py new file mode 100644 index 00000000..689bd14e --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/external_lossless.py @@ -0,0 +1,76 @@ +from scalemethod.base import scalebase +import os +import windows +from myutils.config import globalconfig +from myutils.hwnd import ListProcess, injectdll +from myutils.subproc import subproc_w +import time +from myutils.wrapper import threader +import re + + +class Method(scalebase): + + @threader + def _wait_lossless_stop_external(self): + while windows.FindWindow("LosslessScaling", None) == 0: + time.sleep(0.5) + while windows.FindWindow("LosslessScaling", None): + time.sleep(0.5) + self.setuistatus(False) + + def init(self): + self.injectedpids = set() + + def runlossless(self): + exes = [_[1] for _ in ListProcess()] + path = globalconfig["lossless"]["path"] + pexe = os.path.join(path, "LosslessScaling.exe") + if pexe.replace("/", "\\") not in exes: + subproc_w(pexe, cwd=path, name="LosslessScaling") + time.sleep(1) + + if globalconfig["hooklossless"]: + for pid, exe in ListProcess(): + if exe == pexe.replace("/", "\\"): + if pid in self.injectedpids: + continue + dll = os.path.abspath("./files/plugins/hookmagpie.dll") + injecter = os.path.abspath( + "./files/plugins/shareddllproxy{}.exe".format("64") + ) + injectdll(pid, injecter, dll) + self.injectedpids.add(pid) + break + + def changestatus(self, hwnd, full): + + if full: + self.runlossless() + # self._wait_lossless_stop_external() + + windows.SetForegroundWindow(hwnd) + time.sleep(0.1) + configpath = os.path.join( + os.environ["LOCALAPPDATA"], "Lossless Scaling/Settings.xml" + ) + if os.path.exists(configpath) == False: + return + with open(configpath, "r", encoding="utf8") as ff: + config = ff.read() + + Hotkey = re.findall("(.*?)", config)[0] + hotkHotkeyModifierKeysey = re.findall( + "(.*?)", config + )[0] + + mods = hotkHotkeyModifierKeysey.split(" ") + + vkcode = windows.MapVirtualKey(Hotkey) + mp1 = {"Shift": 16, "Windows": 91, "Control": 17, "Alt": 18} + for k in mods: + windows.keybd_event(mp1[k], 0, 0, 0) + windows.keybd_event(vkcode, 0, 0, 0) + windows.keybd_event(vkcode, 0, windows.KEYEVENTF_KEYUP, 0) + for k in mods: + windows.keybd_event(mp1[k], 0, windows.KEYEVENTF_KEYUP, 0) diff --git a/LunaTranslator/LunaTranslator/scalemethod/external_magpie.py b/LunaTranslator/LunaTranslator/scalemethod/external_magpie.py new file mode 100644 index 00000000..55d5cbaa --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/external_magpie.py @@ -0,0 +1,103 @@ +from scalemethod.base import scalebase +import os, json +import windows, winsharedutils +from myutils.config import globalconfig +from myutils.hwnd import injectdll +from myutils.subproc import subproc_w +import time +from myutils.wrapper import threader + + +class Method(scalebase): + def init(self): + self.injectedpids = set() + + def runmagpie(self): + if windows.FindWindow("Magpie_Hotkey", None) == 0: + subproc_w( + os.path.join(globalconfig["magpiepath"], "Magpie.exe"), + cwd=globalconfig["magpiepath"], + name="magpie", + ) + while windows.FindWindow("Magpie_Hotkey", None) == 0: + time.sleep(0.5) + if globalconfig["hookmagpie"]: + pid = windows.GetWindowThreadProcessId( + windows.FindWindow("Magpie_Hotkey", None) + ) + if pid in self.injectedpids: + return + dll = os.path.abspath("./files/plugins/hookmagpie.dll") + injecter = os.path.abspath( + "./files/plugins/shareddllproxy{}.exe".format("64") + ) + injectdll([pid], injecter, dll) + self.injectedpids.add(pid) + + @threader + def _wait_magpie_stop_external(self): + while ( + windows.FindWindow( + "Window_Magpie_967EB565-6F73-4E94-AE53-00CC42592A22", None + ) + == 0 + ): + time.sleep(0.5) + while windows.FindWindow( + "Window_Magpie_967EB565-6F73-4E94-AE53-00CC42592A22", None + ): + time.sleep(0.5) + self.setuistatus(False) + + def changestatus(self, hwnd, full): + + configpath = os.path.join(globalconfig["magpiepath"], "config/config.json") + + if os.path.exists(configpath) == False: + version = winsharedutils.queryversion( + os.path.join(globalconfig["magpiepath"], "Magpie.exe") + ) + checks = [ + os.path.join( + os.environ["LOCALAPPDATA"], "Magpie/config/v2/config.json" + ), + os.path.join(os.environ["LOCALAPPDATA"], "Magpie/config/config.json"), + ] + if version: + if version[:3] >= (0, 10, 100): # v0.11.0-preview1 + checks = [checks[0]] + else: + checks = [checks[1]] + for ck in checks: + if os.path.exists(ck): + configpath = ck + break + + if os.path.exists(configpath) == False: + return + + with open(configpath, "r", encoding="utf8") as ff: + config = json.load(ff) + autoRestore = config["autoRestore"] + shortcuts = config["shortcuts"]["scale"] + mp1 = {"SHIFT": 16, "WIN": 91, "CTRL": 17, "ALT": 18} + mp = {0x100: "WIN", 0x200: "CTRL", 0x400: "ALT", 0x800: "SHIFT"} + + if full: + self.runmagpie() + if autoRestore == False: + self._wait_magpie_stop_external() + + windows.SetForegroundWindow(hwnd) + time.sleep(0.1) + + for k in mp: + if shortcuts & k != 0: + windows.keybd_event(mp1[mp[k]], 0, 0, 0) + + k2 = shortcuts & 0xFF + windows.keybd_event(k2, 0, 0, 0) + windows.keybd_event(k2, 0, windows.KEYEVENTF_KEYUP, 0) + for k in mp: + if shortcuts & k != 0: + windows.keybd_event(mp1[mp[k]], 0, windows.KEYEVENTF_KEYUP, 0) diff --git a/LunaTranslator/LunaTranslator/scalemethod/magpie_builtin.py b/LunaTranslator/LunaTranslator/scalemethod/magpie_builtin.py new file mode 100644 index 00000000..ddcc0ee9 --- /dev/null +++ b/LunaTranslator/LunaTranslator/scalemethod/magpie_builtin.py @@ -0,0 +1,39 @@ +from scalemethod.base import scalebase +import os, json +import windows +from myutils.config import globalconfig, magpie_config +from myutils.subproc import subproc_w +from myutils.wrapper import threader + + +class Method(scalebase): + @threader + def _waitenginestop_magpie(self): + self.engine.wait() + self.setuistatus(False) + + def changestatus(self, hwnd, full): + if full: + profiles_index = globalconfig["profiles_index"] + if profiles_index > len(magpie_config["profiles"]): + profiles_index = 0 + + jspath = os.path.abspath("./userconfig/magpie_config.json") + with open(jspath, "w", encoding="utf-8") as ff: + ff.write( + json.dumps( + magpie_config, ensure_ascii=False, sort_keys=False, indent=4 + ) + ) + self.engine = subproc_w( + './files/plugins/Magpie/Magpie.Core.exe {} {} "{}"'.format( + profiles_index, hwnd, jspath + ), + cwd="./files/plugins/Magpie/", + ) + self._waitenginestop_magpie() + else: + windows.SendMessage( + windows.FindWindow("Magpie_Core_CLI_Message", None), + windows.RegisterWindowMessage("Magpie_Core_CLI_Message_Stop"), + ) diff --git a/LunaTranslator/files/defaultconfig/static_data.json b/LunaTranslator/files/defaultconfig/static_data.json index 92da2b4d..7303df5b 100644 --- a/LunaTranslator/files/defaultconfig/static_data.json +++ b/LunaTranslator/files/defaultconfig/static_data.json @@ -334,6 +334,7 @@ "./files/plugins/DLL32/libmecab.dll", "./files/plugins/DLL32/libcurl.dll" ] - } - + }, + "scalemethods":["magpie_builtin","alt_enter","SW_SHOWMAXIMIZED","external_lossless","external_magpie"], + "scalemethods_vis":["Magpie","ALT+ENTER","SW_SHOWMAXIMIZED","LosslessScaling","Magpie_External"] } diff --git a/LunaTranslator/pack.py b/LunaTranslator/pack.py index bf770af7..80fb3eda 100644 --- a/LunaTranslator/pack.py +++ b/LunaTranslator/pack.py @@ -35,7 +35,7 @@ for f in ['LunaTranslator_admin.exe','LunaTranslator.exe']: shutil.copytree(r'.\files',rf'{targetdir}\files') shutil.copy(r'..\LICENSE',targetdir) -for f in ['transoptimi','hiraparse','ocrengines','translator','cishu','tts','network','textoutput']: +for f in ['transoptimi','hiraparse','ocrengines','translator','cishu','tts','network','textoutput','scalemethod']: shutil.copytree(rf'.\LunaTranslator\{f}',rf'{targetdir_in}\{f}') def remove(f):