From 97b97310d0ef47c01f3408b56f8dcc3f53e146bf Mon Sep 17 00:00:00 2001 From: themixray Date: Fri, 7 Jan 2022 16:07:43 +0300 Subject: [PATCH] fixed ramlimit3 --- build/lib/pygwin/_win.py | 117 ++++++++++++++++++++++---------------- build/lib/pygwin/ui.py | 23 +++++--- dist/pgw-0.1.2-py3.7.egg | Bin 0 -> 50682 bytes src/pgw.egg-info/PKG-INFO | 2 +- src/pygwin/_win.py | 62 +++++++++++++------- 5 files changed, 126 insertions(+), 78 deletions(-) create mode 100644 dist/pgw-0.1.2-py3.7.egg diff --git a/build/lib/pygwin/_win.py b/build/lib/pygwin/_win.py index 3fa9cda..ba5544b 100644 --- a/build/lib/pygwin/_win.py +++ b/build/lib/pygwin/_win.py @@ -4,10 +4,14 @@ from datetime import datetime as _dt from pygwin.image import save as _s from pygwin._pg import pg as _pg import pygwin.image as _img -import win32job as _w32j -import win32api as _w32a -import win32con as _w32c -import win32gui as _w32g +try: + import win32job as _w32j + import win32api as _w32a + import win32con as _w32c + import win32gui as _w32g + nonwin32api = False +except: + nonwin32api = True import requests as _req import tempfile as _tf import threading as _t @@ -70,37 +74,46 @@ class _win(_surface): try:self.tray.stop() except:pass def focus(self): - self.hide() - self.show() - _w32g.BringWindowToTop(self.hwnd) - _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOWNORMAL) - _w32g.SetForegroundWindow(self.hwnd) + if not nonwin32api: + self.hide() + self.show() + _w32g.BringWindowToTop(self.hwnd) + _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOWNORMAL) + _w32g.SetForegroundWindow(self.hwnd) def hide(self): - _w32g.ShowWindow(self.hwnd, _w32c.SW_HIDE) + if not nonwin32api: + _w32g.ShowWindow(self.hwnd, _w32c.SW_HIDE) def show(self): - _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOW) + if not nonwin32api: + _w32g.ShowWindow(self.hwnd, _w32c.SW_SHOW) def move(self, x, y): - rect = _w32g.GetWindowRect(self.hwnd) - _w32g.MoveWindow(self.hwnd, int(x), int(y), - rect[2]-x, rect[3]-y, 0) + if not nonwin32api: + rect = self._getRect() + _w32g.MoveWindow(self.hwnd, int(x), int(y), + rect[2]-x, rect[3]-y, 0) def screenshot(self, path): _s(self._orig, path) return path - def center(self,x=_w32a.GetSystemMetrics(0)/2, - y=_w32a.GetSystemMetrics(1)/2): + def center(self,x=_pg.display.get_desktop_sizes()[0][0]/2, + y=_pg.display.get_desktop_sizes()[0][1]/2): self.move(x-self.size[0]/2,y-self.size[1]/2) + def _getRect(self): + if not nonwin32api: + return _w32g.GetWindowRect(self.hwnd) def denyDrag(self): - self._isallowdrag = True - def loop(self): - while self._isallowdrag: - pos = _m.get_position() - pos = [pos[i]-self.position[i] for i in range(2)] - if pos[0] < _w32g.GetWindowRect(self.hwnd)[2]-137: - if pos[1] < 30: - _m.release('left') - _t.Thread(target=lambda:loop(self),daemon=1).start() + if not nonwin32api: + self._isallowdrag = True + def loop(self): + while self._isallowdrag: + pos = _m.get_position() + pos = [pos[i]-self.position[i] for i in range(2)] + if pos[0] < self._getRect()[2]-137: + if pos[1] < 30: + _m.release('left') + _t.Thread(target=lambda:loop(self),daemon=1).start() def allowDrag(self): - self._isallowdrag = False + if not nonwin32api: + self._isallowdrag = False # def smartDrag(self, x): # self.allowDrag() # self._issmartdrag = x @@ -128,10 +141,11 @@ class _win(_surface): # _t.Thread(target=lambda:loop(self),daemon=1).start() @property def position(self): - rect = _w32g.GetWindowRect(self.hwnd) - x = rect[0] - y = rect[1] - return (x, y) + if not nonwin32api: + rect = self._getRect() + x = rect[0] + y = rect[1] + return (x, y) @property def rawFps(self): if self._withfps: @@ -143,10 +157,12 @@ class _win(_surface): return int(self.rawFps) @property def hwnd(self): - return _pg.display.get_wm_info()['window'] + if not nonwin32api: + return _pg.display.get_wm_info()['window'] @property def visible(self): - return _w32g.IsWindowVisible(self._win) + if not nonwin32api: + return _w32g.IsWindowVisible(self._win) def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): screen = _pg.display.set_mode(size) @@ -162,23 +178,26 @@ def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): return _win(icon) def ramLimit(memory_limit): - hjob = _w32j.CreateJobObject(None,job_name) - if breakaway: - info = _w32j.QueryInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation) - if breakaway=='silent':info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) - else:info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) - _w32j.SetInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation,info) - hprocess = _w32a.GetCurrentProcess() - try:_w32j.AssignProcessToJobObject(hjob, hprocess);g_hjob=hjob - except _w32j.error as e: - if e.winerror!=winerror.ERROR_ACCESS_DENIED:raise - elif sys.getwindowsversion()>=(6,2):raise - elif _w32j.IsProcessInJob(hprocess,None):raise - warnings.warn('The process is already in a job. Nested jobs are not supported prior to Windows 8.') - info=_w32j.QueryInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation) - info['ProcessMemoryLimit']=memory_limit - info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) - _w32j.SetInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation,info) + if not nonwin32api: + job_name = '' + breakaway = 'silent' + hjob = _w32j.CreateJobObject(None,job_name) + if breakaway: + info = _w32j.QueryInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation) + if breakaway=='silent':info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) + else:info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) + _w32j.SetInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation,info) + hprocess = _w32a.GetCurrentProcess() + try:_w32j.AssignProcessToJobObject(hjob, hprocess);g_hjob=hjob + except _w32j.error as e: + if e.winerror!=winerror.ERROR_ACCESS_DENIED:raise + elif sys.getwindowsversion()>=(6,2):raise + elif _w32j.IsProcessInJob(hprocess,None):raise + warnings.warn('The process is already in a job. Nested jobs are not supported prior to Windows 8.') + info=_w32j.QueryInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation) + info['ProcessMemoryLimit']=memory_limit + info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) + _w32j.SetInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation,info) def close(): _pg.quit() diff --git a/build/lib/pygwin/ui.py b/build/lib/pygwin/ui.py index 274d7b7..4720f02 100644 --- a/build/lib/pygwin/ui.py +++ b/build/lib/pygwin/ui.py @@ -646,15 +646,20 @@ class checkBox(widget): def draw(self, win, pos): self._generate(pos) win.blit(self.surface,pos) -# class colorPicker(widget): -# def __init__(self): -# self._generate() -# def _generate(self, position=None): -# self.surface = _s((255,self.width)) -# -# def draw(self, win, pos): -# self._generate(pos) -# win.blit(self.surface,pos) +class comboBox(widget): + def __init__(self,text,values=[], +fontSize=30,font=_df,width=None,height=None, +bg=(70,70,70),fg=(180,180,200),afg=(50,50,50), +abg=(200,200,200),borderColor=(50,50,50),borderWidth=5): + super()._args(locals()) + self._generate() + + def _generate(self, position=None): + self.surface = _s((255,self.width)) + + def draw(self, win, pos): + self._generate(pos) + win.blit(self.surface,pos) class tip(widget): def __init__(self,text,responceWidth,responceHeight,fontSize=15,font=_df, borderColor=(180,180,50),borderWidth=2,bg=(255,255,128), diff --git a/dist/pgw-0.1.2-py3.7.egg b/dist/pgw-0.1.2-py3.7.egg new file mode 100644 index 0000000000000000000000000000000000000000..18518644e94cded1ca3c667f9ce53ad4545f4ca0 GIT binary patch literal 50682 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 literal 0 HcmV?d00001 diff --git a/src/pgw.egg-info/PKG-INFO b/src/pgw.egg-info/PKG-INFO index 5fddfe9..f2b1d30 100644 --- a/src/pgw.egg-info/PKG-INFO +++ b/src/pgw.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: pgw -Version: 0.1.0 +Version: 0.1.2 Summary: A library for creating Python applications. Home-page: https://github.com/themixray/pygwin Author: themixray diff --git a/src/pygwin/_win.py b/src/pygwin/_win.py index ba5544b..4eae82d 100644 --- a/src/pygwin/_win.py +++ b/src/pygwin/_win.py @@ -12,6 +12,9 @@ try: nonwin32api = False except: nonwin32api = True +import sys as _sys +import warnings as _warn +import winwerror as _we import requests as _req import tempfile as _tf import threading as _t @@ -179,25 +182,46 @@ def create(title=None, size=(0,0), icon=None, resizable=False, noframe=False): def ramLimit(memory_limit): if not nonwin32api: - job_name = '' - breakaway = 'silent' - hjob = _w32j.CreateJobObject(None,job_name) - if breakaway: - info = _w32j.QueryInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation) - if breakaway=='silent':info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) - else:info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) - _w32j.SetInformationJobObject(hjob,_w32j.JobObjectExtendedLimitInformation,info) - hprocess = _w32a.GetCurrentProcess() - try:_w32j.AssignProcessToJobObject(hjob, hprocess);g_hjob=hjob - except _w32j.error as e: - if e.winerror!=winerror.ERROR_ACCESS_DENIED:raise - elif sys.getwindowsversion()>=(6,2):raise - elif _w32j.IsProcessInJob(hprocess,None):raise - warnings.warn('The process is already in a job. Nested jobs are not supported prior to Windows 8.') - info=_w32j.QueryInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation) - info['ProcessMemoryLimit']=memory_limit - info['BasicLimitInformation']['LimitFlags']|=(_w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) - _w32j.SetInformationJobObject(g_hjob,_w32j.JobObjectExtendedLimitInformation,info) + g_hjob = None + def create_job(job_name='', breakaway='silent'): + hjob = _w32j.CreateJobObject(None, job_name) + if breakaway: + info = _w32j.QueryInformationJobObject(hjob, + _w32j.JobObjectExtendedLimitInformation) + if breakaway == 'silent': + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) + else: + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_BREAKAWAY_OK) + _w32j.SetInformationJobObject(hjob, + _w32j.JobObjectExtendedLimitInformation, info) + return hjob + def assign_job(hjob): + global g_hjob + hprocess = _w32a.GetCurrentProcess() + try: + _w32j.AssignProcessToJobObject(hjob, hprocess) + g_hjob = hjob + except _w32j.error as e: + if (e._we != _we.ERROR_ACCESS_DENIED or + _sys.getwindowsversion() >= (6, 2) or + not _w32j.IsProcessInJob(hprocess, None)): + raise + _warn.warn('The process is already in a job. Nested jobs are not ' + 'supported prior to Windows 8.') + def limit_memory(memory_limit): + if g_hjob is None: + return + info = _w32j.QueryInformationJobObject(g_hjob, + _w32j.JobObjectExtendedLimitInformation) + info['ProcessMemoryLimit'] = memory_limit + info['BasicLimitInformation']['LimitFlags'] |= ( + _w32j.JOB_OBJECT_LIMIT_PROCESS_MEMORY) + _w32j.SetInformationJobObject(g_hjob, + _w32j.JobObjectExtendedLimitInformation, info) + assign_job(create_job()) + limit_memory(memory_limit) def close(): _pg.quit()