2010-09-04 4 views
0

J'aimerais pouvoir enregistrer mon état de session dans l'éditeur PythonWin (par exemple, ces trois fichiers sont ouverts et positionnés dans ces emplacements particuliers dans la fenêtre PythonWin). Je peux obtenir des poignées pour chacune des fenêtres enfants dans PythonWin en utilisant win32gui, ainsi que les titres de chacun des fichiers et les positions/tailles des fenêtres. Je ne comprends pas comment obtenir le chemin d'accès complet du fichier listé comme nom de la fenêtre enfant (par exemple, si le nom de la fenêtre enfant est test.py et que test.py réside à c: \ python \ test.py, je ne sais pas savoir comment obtenir c: \ python). Je pensais que j'écrirais quels fichiers ont été ouverts plus leurs positions de fenêtre dans un petit fichier que j'appellerais alors à l'heure de démarrage de PythonWin pour le chargement.Etat de la session d'enregistrement PythonWin

Des idées sur la façon d'obtenir les chemins d'accès complets aux noms de la fenêtre enfant?

Si quelqu'un a déjà une solution plus élégante pour sauvegarder l'état de session dans PythonWin, veuillez le transmettre. Voici le code que j'utilise en ce moment (merci à Michal Niklas pour le code de démarrage pour l'utilisation 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() 

Répondre

0

Je peux me tromper, mais n'est pas PythonWin écrit en Python?

Avez-vous essayé de lire la source à la commande "Enregistrer" pour déterminer où elle stocke ses chemins complets?

(je prendrais un regard moi-même, mais je n'ai pas utilisé Windows depuis une décennie la moitié)

+0

Je pense qu'il est écrit en C++, mais peu importe, bonne idée. Je regarde maintenant. Merci pour le conseil. –