Я хотел бы иметь возможность сохранить мое состояние сеанса в редакторе PythonWin (например, эти три файла открываются и размещаются в этих конкретных местах в окне PythonWin).Я могу получить дескрипторы для каждого из дочерних окон в PythonWin, используя win32gui, а также названия каждого из файлов и положения / размеры окон.Мне неясно, как получить полный путь к файлу, указанному в качестве имени дочернего окна (т. Е. Если имя дочернего окна - test.py и test.py живет в c: \ python \ test.py, я незнаю, как получить c: \ python).Я думал, что напишу, какие файлы были открыты, плюс их позиции окна, в небольшой файл, который я затем вызову во время запуска PythonWin для загрузки.
Любые идеи о том, как получить полные пути к дочернему окнуимена?
В качестве альтернативы, если у кого-то уже есть более элегантное решение для сохранения состояния сеанса в PythonWin, пожалуйста, передайте его.
Ниже приведен код, который я сейчас использую (спасибо Михалу Никласу за стартеркод для использования win32gui ).
import win32gui
import re
MAIN_HWND = 0
def is_win_ok(hwnd, starttext):
s = win32gui.GetWindowText(hwnd)
if s.startswith(starttext):
global MAIN_HWND
MAIN_HWND = hwnd
return None
return 1
def find_main_window(starttxt):
global MAIN_HWND
win32gui.EnumChildWindows(0, is_win_ok, starttxt)
return MAIN_HWND
def winPos(hwnd):
if type(hwnd) == type(1): ( left, top, right, bottom ) = win32gui.GetWindowRect(hwnd)
return "%i, %i, %i, %i" % (left, right, top, bottom)
def winName(hwnd, children):
s = win32gui.GetWindowText(hwnd)
rePy = re.compile(r'[a-zA-Z1-9_ ]*.py')
rePySearch = rePy.search(s)
if rePySearch is not None:
if rePySearch.group()[0:7] != "Running":
s = s + ',' + winPos(hwnd) + '\n'
children.append(s)
return 1
def main():
children = []
main_app = 'PythonWin'
hwnd = win32gui.FindWindow(None, main_app)
if hwnd < 1:
hwnd = find_main_window(main_app)
if hwnd:
win32gui.EnumChildWindows(hwnd, winName, children)
filename = "sessionInfo.txt"
sessionFile = os.path.join(sys.path[0],filename)
fp=open(sessionFile, 'wb')
for i in range(len(children)):
fp.write(children[i])
fp.close()
main()