Fensterposition und Größe - Wo wirds gespeichert - wie wirds gemacht ?

  • Hallo,

    ich stehe hier gerade aktuell vor einem Problem.

    Wenn ich meinen Gui beende, will ich , dass sich die Fensterposition und Größe speichert.
    Das mit der größe hat schonmal geklappt aber mit der Position... ?!
    Bisher speichere Ich die informationen in einer Config ini.
    Aber wie macht das Windows normalerweise ?

    Danke für eure Hilfe...

  • Warum eigl. in einer ini? Tuts da nich auch ne txt?

    Ich speichere Optionen und dergleichen eigl. nur in txt dateien.

  • Ich schätze mal weil ini-dateien kleiner als txt-dateien sind... mit diesen auch in der registry gearbeitet wird, sie fürs programmieren übersichtlicher sind und der ottonormalverbaucher diese nicht lesen kann/wird ;)

    Außerdem stell dir mal vor du willst ein grooooßes Programm entwickeln und musst 100e Werte in eine Datei schreiben um mit diesen nach restart arbeiten zu können... was ist praktischer: Immer die genauen Zeilen für jeden Parameter zu behalten oder nach einem system vorgehen und einfach die Sektionsnamen zu merken? ;)

  • Eine Ini ist eine Initialisierungsdatei. Diese dient dem speichern von Programmeinstellungen. Da Microsoft diese benutzt gibt es in der Win-Api Funktionen zum abrufen.
    AutoIt unterstützt das eben auch weswegen es einfach ist damit zu arbeiten. Moderne Programme nutzen dafür z.b. auch XML Strukturen
    BMyMind
    Ein Beispiel für den Umgang mit einer Ini findest Du z.B. hier:
    https://autoit.de/index.php?page…45840#post45840

  • Danke für den Tip mit wingetpos.... aber....

    was ist wenn das fenster Maximiert ist ?

  • Probiers doch einfach aus ;) Wenns minimiert ist gibt die Func eine negative Zahl zurück... Ich schätze mal das bei maximiertem Fenster für:

    X = 0
    Y = 0
    Width = @DesktopWidth
    Height = @DesktopHeight

    zurückgegeben wird!

  • Das sollte alles speichern, auch minimiert, maximiert usw ;)

    Spoiler anzeigen
    [autoit]

    #include<WinAPI.au3>
    ; $GUI - Handle der GUI (Rückgabe von GUICreate)
    ; $INI - Die Inidatei
    ; $Section - Die Sektion der INI
    Func _SaveWindowToIni($GUI, $Ini, $Section)
    ; Autor: Prog@ndy
    Local $Placement = _WinAPI_GetWindowPlacement($GUI)
    If @error Then Return SetError(@error,@extended,$Placement)
    Local $avPlacement[11][2] = [ _
    ["length", DllStructGetData($Placement,"length")], _
    ["flags", DllStructGetData($Placement,"flags")], _
    ["showCmd", DllStructGetData($Placement,"showCmd")], _
    ["ptMinPositionX", DllStructGetData($Placement,"ptMinPosition", 1)], _
    ["ptMinPositionY", DllStructGetData($Placement,"ptMinPosition", 2)], _
    ["ptMaxPositionX", DllStructGetData($Placement,"ptMaxPosition", 1)], _
    ["ptMaxPositionY", DllStructGetData($Placement,"ptMaxPosition",2)], _
    ["rcNormalPositionX", DllStructGetData($Placement,"rcNormalPosition", 1)], _
    ["rcNormalPositionY", DllStructGetData($Placement,"rcNormalPosition", 2)], _
    ["rcNormalPositionW", DllStructGetData($Placement,"rcNormalPosition", 3)], _
    ["rcNormalPositionH", DllStructGetData($Placement,"rcNormalPosition", 4)] _
    ]
    Local $r = IniWriteSection($Ini,$Section,$avPlacement,1)
    Return SetError(@error,@extended,$r)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ; $GUI - Handle der GUI (Rückgabe von GUICreate)
    ; $INI - Die Inidatei
    ; $Section - Die Sektion der INI
    ; $AllowHideOrMinimize - wird auch @SW_HIDE und @SW_MINIMIZE wiederhergestellt?
    Func _LoadWindowFromIni($GUI, $Ini, $Section, $AllowHideOrMinimize=True)
    ; Autor: Prog@ndy
    Local $Placement = DllStructCreate($tagWINDOWPLACEMENT)
    Local $avPlacement = IniReadSection($Ini,$Section)
    If @error Then Return SetError(@error,@extended,$avPlacement)
    DllStructSetData($Placement,"length", DllStructGetSize($Placement))
    For $i = 1 To $avPlacement[0][0]
    Switch $avPlacement[$i][0]
    Case "flags"
    DllStructSetData($Placement,"flags", $avPlacement[$i][1])
    Case "showCmd"
    DllStructSetData($Placement,"showCmd", $avPlacement[$i][1])
    Case "ptMinPositionX"
    DllStructSetData($Placement,"ptMinPosition", $avPlacement[$i][1], 1)
    Case "ptMinPositionY"
    DllStructSetData($Placement,"ptMinPosition", $avPlacement[$i][1], 2)
    Case "ptMaxPositionX"
    DllStructSetData($Placement,"ptMaxPosition", $avPlacement[$i][1], 1)
    Case "ptMaxPositionY"
    DllStructSetData($Placement,"ptMaxPosition", $avPlacement[$i][1],2)
    Case "rcNormalPositionX"
    DllStructSetData($Placement,"rcNormalPosition", $avPlacement[$i][1], 1)
    Case "rcNormalPositionY"
    DllStructSetData($Placement,"rcNormalPosition", $avPlacement[$i][1], 2)
    Case "rcNormalPositionW"
    DllStructSetData($Placement,"rcNormalPosition", $avPlacement[$i][1], 3)
    Case "rcNormalPositionH"
    DllStructSetData($Placement,"rcNormalPosition", $avPlacement[$i][1], 4)
    EndSwitch
    Next
    If Not $AllowHideOrMinimize Then
    Local $showCMD = DllStructGetData($Placement,"showCmd")
    If BitAND($showCMD,@SW_MINIMIZE)=@SW_MINIMIZE Or BitAND($showCMD,@SW_HIDE)=@SW_HIDE Then
    $showCMD = BitOR($showCMD, BitNOT(BitOR(@SW_MINIMIZE,@SW_HIDE)), @SW_SHOW)
    DllStructSetData($Placement,"showCmd", $showCMD)
    EndIf
    EndIf
    Local $r = _WinAPI_SetWindowPlacement($GUI, DllStructGetPtr($Placement))
    Return SetError(@error,@extended,$r)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    #include<WindowsConstants.au3>
    $GUI = GUICreate("testGUI",500,500,100,100,BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU,$WS_THICKFRAME,$WS_MAXIMIZEBOX))

    [/autoit] [autoit][/autoit] [autoit]

    _LoadWindowFromIni($GUI,@DesktopDir&"\pos.ini","test", False)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While GUIGetMsg()<>-3
    WEnd
    _SaveWindowToIni($GUI,@DesktopDir&"\pos.ini","test")

    [/autoit]
  • Ah, jetz weis ich auch, für was immer soviele INI's benutzt werden.

    Thx, das werd ich in zukunft dann auch mal versuchen ^^

  • Ich speichere auch alles in inis ab weil ich mich da mit dem lesen besser auskene weil in der ini gibt es ja die [...] und ...=