def __init__(self): log.initialize_logging("SLController") self.logger = logging.getLogger("SLController") self.config = SLConfig() self.lockerProc = [] # determine if application is a script file or frozen exe if getattr(sys, 'frozen', False): application_path = os.path.dirname(sys.executable) self.app_init = [os.path.join(application_path, "screenlockApp.exe")] self.appname="screenlockApp.exe" elif __file__: application_path = os.path.dirname(__file__) self.app_init = ["python.exe", os.path.join(application_path, "screenlockApp.py")] self.appname="screenlockApp.py" self.logger.debug("Screenlock Controller Initialized, path: %s, appName: %s" % (application_path, self.appname))
class SLController(object): def __init__(self): log.initialize_logging("SLController") self.logger = logging.getLogger("SLController") self.config = SLConfig() self.lockerProc = [] # determine if application is a script file or frozen exe if getattr(sys, 'frozen', False): application_path = os.path.dirname(sys.executable) self.app_init = [os.path.join(application_path, "screenlockApp.exe")] self.appname="screenlockApp.exe" elif __file__: application_path = os.path.dirname(__file__) self.app_init = ["python.exe", os.path.join(application_path, "screenlockApp.py")] self.appname="screenlockApp.py" self.logger.debug("Screenlock Controller Initialized, path: %s, appName: %s" % (application_path, self.appname)) def is_running(self): for p in psutil.process_iter(): try: if p.name == self.appname: return True except psutil.Error as err: #permission error on getting name of process (safe to ignore) pass return False def lock_screen(self): self.lockerProc.append( subprocess.Popen(self.app_init, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) ) def unlock_screen(self): if len(self.lockerProc) == 0: self.logger.debug("ScreenlockController: ignoring unlock, no lock found") else: for p in self.lockerProc: if p.pid: self.logger.debug("%s %s" % (" Killing PID: ", p.pid)) try: p.send_signal(signal.SIGTERM) except: self.logger.debug("ScreenlockController: The Screenlock app is not running.") continue del self.lockerProc[:] self.unlock_screen_started_by_other_process() self.make_coral_not_top_most() def unlock_screen_started_by_other_process(self): keyBlocker = self.config.get('keysblock') for p in psutil.process_iter(): try: if p.name == self.appname or p.name == keyBlocker: self.logger.debug("Killing %s by pid %s" % (p.name, p.pid)) p.send_signal(signal.SIGTERM) return True except psutil.Error as err: self.logger.error("Error on unlock: %s" % (pprint.pformat(err))) return False def make_coral_not_top_most(self): self.logger.debug("making coral NOT topmost from SERVER") coralWindow = getWindow("Coral") if coralWindow: try: win32gui.SetWindowPos(coralWindow["Coral"],win32con.HWND_NOTOPMOST,0,0,500,500, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE ) self.logger.debug("Made coral not topmost") except: self.logger.error (" screenlockApp makeCoralNotTopMost: Coral window may not exist.") else: self.logger.debug("No coral window to not topmost")