Fenster wie bei Win 7 an den Rand schieben

  • Hi Leute,
    ich hab mal schnell ein Programm gebastelt, was die Fenster, wie bei Win 7 wenn man sie an den Rand schiebt, den halben Bildschirm einnehmen lässt. In meinem Script hab ich es Optional gemacht, wie groß die Fenster werden. Default ist aber 0,5, also 50% des Bildschirms.
    Ich hab nicht nachgeguckt, ob schon jemand so ein Script reingestellt hat, aber lieber zu viel als zu wenig.
    Viel Spaß damit
    Aquaplant

    [autoit]

    #Include <Misc.au3>
    Global $Weite = IniRead(@ScriptDir & "\Weite.ini", "Weite", "Weite", 0.5)
    While 1
    $Mausposition = MouseGetPos()
    $Mausgedruckt = _IsPressed("01")
    $WinTitle = WinGetTitle("")
    If WinActive($WinTitle) And $Mausgedruckt = 1 And $Mausposition[0] <=1 Then
    WinMove($WinTitle, "", 0, 0, @DesktopWidth*$Weite, @DesktopHeight)
    $WinPos = WinGetPos($WinTitle)
    If $WinPos[0] < 0 Then
    WinMove($WinTitle, "", 0, 0, @DesktopWidth*$Weite, @DesktopHeight)
    EndIf
    EndIf
    If WinActive($WinTitle) And $Mausgedruckt = 1 And $Mausposition[0] >= @DesktopWidth - 1 Then
    WinMove($WinTitle, "", @DesktopWidth*$Weite, 0, @DesktopWidth*(1-$Weite), @DesktopHeight)
    $WinPos = WinGetPos($WinTitle)
    If $WinPos[0] < 0 Then
    WinMove($WinTitle, "", @DesktopWidth*$Weite, 0, @DesktopWidth*(1-$Weite), @DesktopHeight)
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Hallo Aquaplant

    Nette idee, aber es gibt noch einiges zu verbessern.

    Wenn ich ein Fenster an den Rand ziehe, dann sehe ich nicht mehr das ganze Fenster, denn die Windows Startleiste überblendet einiges.

    Wenn ich ein Fenster mir einer Scrollbar habe, diese Anfasse, runterfahre und dabei an den Rand komme, wird das Fenster aus resized. Das darf nicht passieren. Es darf sich nur ändern, wenn ich ein Fenster am oberen Fensterrand verschiebe.

    Gruss Roger

  • Warum schreibst du die Weite in eine INI? Wegen einer Zeile lohnt es sich nicht.

    Mach einfach:

    [autoit]

    Global $Weite = IniRead(@ScriptDir & "\Weite.ini", "Weite", "Weite", 0.5)

    [/autoit]

    zu

    [autoit]

    Global $Weite = 0.5

    [/autoit]

    Ach ja, mach es doch so, dass wenn man das Fenster in die Mitte bewegt, dass es die alte größe bekommt.

    [autoit]

    WinGetClientSize ( "title" [, "text"] )

    [/autoit]
  • Ich hab jetzt erstmal eingebaut, dass sich das Fenster nicht mehr beim scrollen verschiebt. Der Haken an der Sache ist, dass _ispressed nicht so ganz will wie ich, oder ich einfach grad den Fehler nicht sehe:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $Weite = IniRead(@ScriptDir & "\Weite.ini", "Weite", "Weite", 0.5)
    While 1
    Sleep(50)
    $Mausposition = MouseGetPos()
    $Mausgedruckt = _IsPressed("01")
    $WinTitle = WinGetTitle("")
    $WinPos = WinGetPos($WinTitle)
    If WinActive($WinTitle) And $Mausgedruckt = 1 And $Mausposition[0] <=1 And $Mausposition[1] <= $WinPos[1] + 30 Then
    WinMove($WinTitle, "", 0, 0, @DesktopWidth*$Weite, @DesktopHeight)
    $WinPos = WinGetPos($WinTitle)
    If $WinPos[0] < 0 Then
    WinMove($WinTitle, "", 0, 0, @DesktopWidth*$Weite, @DesktopHeight)
    EndIf
    While _IsPressed("01") = 1
    Sleep(250)
    WEnd
    EndIf
    If WinActive($WinTitle) And $Mausgedruckt = 1 And $Mausposition[0] >= @DesktopWidth - 1 And $Mausposition[1] <= $WinPos[1] + 30 Then
    WinMove($WinTitle, "", @DesktopWidth*$Weite, 0, @DesktopWidth*(1-$Weite), @DesktopHeight)
    $WinPos = WinGetPos($WinTitle)
    If $WinPos[0] >= @DesktopWidth Then
    WinMove($WinTitle, "", @DesktopWidth*$Weite, 0, @DesktopWidth*(1-$Weite), @DesktopHeight)
    EndIf
    Do
    Sleep(250)
    Until _IsPressed("01") = 0

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

    EndIf
    WEnd

    [/autoit]


    (Es klappt auch nicht, wenn ich mit True oder False gleichsetze und andere Versuche zu warten auch nicht...)

    [autoit]

    WinGetClientSize ( "title" [, "text"] )

    [/autoit]


    Muss ich dann die Fenstergrößen nicht immer vorher in eine Ini schreiben, oder merkt sich der Client/das Fenster seine alte Größe?

  • Du musst:

    [autoit]

    $fenstergröße = WinGetSize("title")

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

    $fenstergröße[0] ; Breite des Fensters
    $fenstergröße[1] ; Höhe des Fensters

    [/autoit][autoit][/autoit][autoit][/autoit]
  • dann bräuchte ich eine endliche Anzahl an verschiedenen Variabeln, weil jemand auch 10 Fenster verschieben könnte.
    Ich mach das dann denke ich mit einer Ini, mit dem Winname als Section und den Größen (und Positionen) als Values im tmp Verzeichnis :)

  • dann bräuchte ich eine endliche Anzahl an verschiedenen Variabeln, weil jemand auch 10 Fenster verschieben könnte.
    Ich mach das dann denke ich mit einer Ini, mit dem Winname als Section und den Größen (und Positionen) als Values im tmp Verzeichnis :)

    Ja, dann erstell eine INI im Tempbereich, doch wie Baust du sie auf?

    Code
    "[Anzahl]
    Anz = DIE FENSTER
    [Fenster]
    Fenstername = [X]WERT[/X][Y]WERT[/Y]
    .
    .
    ."

    Die [X][/X] zúnd [Y][/Y] sind dafür da, um den Wert mittels Stringbetween herauszufiltern :D

  • _IsPressed ist i.A. die Lösung, die man nur dann nimmt, wenn nix anderes geht (also eigentlich nie :D).
    Mein Tipp: Verwende WM_MOUSEMOVE, als wParam kannst du dann auf MK_LBUTTON (Const Wert=1) abprüfen. MK_LBUTTON bedeutet: Maus bewegt und Links geklickt.


    Danke, kannte nichts anderes als _ispressed.

    Zitat

    Ja, dann erstell eine INI im Tempbereich, doch wie Baust du sie auf?

    Hatte ich doch geschrieben:
    [$Wintitle]
    x=
    y=
    Hohe=
    Breite=
    usw.

  • Dann bin ich einmal gespannt wie du das hinbekommst. Freue mich schon auf das Ergebnis.