Fenstergröße rausfinden

07/09/2011 15:26 Ludder231#1
hi,

ich will mit Autoit von einem Icq Fenster die größe rausfinden und wenn sie sich verändert wieder auf die maße bringen die vor der veränderung waren...

Ich weiß nicht wie ich das jz anstellen soll, weiß jemand wie?

PHP Code:
wingethandel() 
vllt??
07/09/2011 15:45 bassbanane#2
Schau dir mal diese beiden Funktionen genauer an.
Code:
WinGetPos
WinGetClientSize
07/09/2011 17:01 Ludder231#3
Quote:
Originally Posted by bassbanane View Post
Schau dir mal diese beiden Funktionen genauer an.
Code:
WinGetPos
WinGetClientSize
Hab ich gemacht aber er will mir die Position nicht anzeigen -.-
07/09/2011 22:27 Imaginär#4
Aus der AutoIt Helpfile zu WinGetPos :

Quote:
Return Value

Success: Returns a 4-element array containing the following information:
$array[0] = X position
$array[1] = Y position
$array[2] = Width
$array[3] = Height
Nun denke nocheinmal über
Quote:
$position = WinGetPos(guictrlread($input1))
MsgBox(0, "test", $position)
nach ;)
07/10/2011 12:37 Ludder231#5
Quote:
Originally Posted by _DownTime View Post
Aus der AutoIt Helpfile zu WinGetPos :



Nun denke nocheinmal über

nach ;)

Oh mein Gott, ich bin manchmal einfach zu blöd :D Danke für den Tipp klappt jetzt wunderbar. :)
07/10/2011 14:22 Ludder231#6
Ich hab jetzt ein neues Problem mit einer while schleife, wenn ich mein script so starte hängt es sich bei reziser() auf wegen der while schleife, kennt jemand das Problem und weiß wie man das wegmacht? Es würde mit einer for schleife gehen aber die ist ja leider nicht endlos...

Mfg Ludder231
07/10/2011 14:37 | Moep |#7
einfach das while weglassen, sollte aufn ersten blick auch so funzen. Warum speicherst du eigentlich die pos in einer ini?
07/10/2011 14:52 Ludder231#8
Quote:
Originally Posted by | Moep | View Post
einfach das while weglassen, sollte aufn ersten blick auch so funzen. Warum speicherst du eigentlich die pos in einer ini?
Wenn ich die while weglasse macht er das doch nur einmal oder nicht?

Weil ich es später mit mehreren Fenstern gleichzeitig machen würde...
07/10/2011 14:59 | Moep |#9
Es wird immer ausgeführt wenn button 1 gedrückt wird und die ganzen anderen if bedingungen erfüllt sind. Wenn du willst dass es immer ausgeführt wird, dann musst du die func aus der if bedingung nehmen. Wenn du willst, dass es ausgeführt wird, wenn du den button drückst und erst wieder beendet wird, wenn der button ein zweites mal gedrückt wird, dann kannst du das über einen schalter machen. z.B. so:

Code:
#include <GUIConstantsEx.au3>

Opt('MustDeclareVars', 1)
Global $Button1Switch = False,$i

Example()

Func Example()
    Local $Button_1, $msg
    GUICreate("Mein GUI Button") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird

    Opt("GUICoordMode", 2)
    $Button_1 = GUICtrlCreateButton("button", 10, 30, 100)

    GUISetState() ; Zeigt eine Dialogbox mit 2 Buttons an

    ; Die Schleife wiederholt sich, bis der Benutzer eine Beenden-Aktion auslöst
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
            Case $msg = $Button_1
				$Button1Switch = not $Button1Switch
		EndSelect
		If $Button1Switch then
			ToolTip($i)
			$i += 1
			EndIf
    WEnd
EndFunc   ;==>Example
07/10/2011 15:50 Ludder231#10
hmm... ja so kann mans auch machen aber ich will es genau so wie mein script jz ist und es sich nicht aufhängt....Er soll es erst dann verändern wenn alle if bedingugen erfüllt sind...Vllt mach ich den ausschalter noch dazu....


Warum geht es so nicht? Es kommt immer gleich wenn man es startet: "Window does nit exists"
07/10/2011 17:26 | Moep |#11
funzt das?
PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<misc.au3>
#include<string.au3>
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("ICQ WS"13984199138)
$Button1 GUICtrlCreateButton("Save Coords "32487525)
$Input1 GUICtrlCreateInput("Window Title"81612121)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Opt('MustDeclareVars'1)
Global 
$Button1 False$handle$input1$position



While 1
    Local $Button1
$msg
        $msg 
GUIGetMsg()
        
Select
            
Case $msg $GUI_EVENT_CLOSE
                ExitLoop
            
Case $msg $Button1
                $Button1 
not $Button1
        EndSelect
        
If $Button1 then
            
if WinExists(guictrlread($input1)) AND IsVisible($handleThen
                
if isvisible($handle) = 0 Then
                    msgbox
(16"""The Windows must be visible")
                    endif
                
$position WinGetPos(guictrlread($input1))
                if 
$position[0] AND $position[1] < 0 Then
                    msgbox
(16"Error""Window must be active!")
                    else
                
IniWrite(@windowsdir&"\ICQWS.ini""X""X"$position[0])
                
IniWrite(@windowsdir&"\ICQWS.ini""Y""Y"$position[1])
                
IniWrite(@windowsdir&"\ICQWS.ini""W""W"$position[2])
                
IniWrite(@windowsdir&"\ICQWS.ini""H""H"$position[3])
                
msgbox(0"ICQ WS""X= "&$position[0]&" Y= "&$position[1]& @CRLF _
                
" W= "&$position[2]&" H= "&$position[3])
                
                endif
            Else
                
MsgBox(16"Not Found""Window does not exist")
        endif
            
            EndIf
reziser()
    
WEnd

func resizer
()
    if 
not $position iniread(@windowsdir&"\ICQWS.ini""W""W""") AND iniread(@windowsdir&"\ICQWS.ini""H""H"""Then
    WinMove
(GUICtrlRead($input1), ""iniread(@windowsdir&"\ICQWS.ini""X""X"""), IniRead(@windowsdir&"\ICQWS.ini""Y""Y"""), Iniread(@windowsdir&"\ICQWS.ini""W""W"""), Iniread(@windowsdir&"\ICQWS.ini""H""H"""))
endif
EndFunc


Func IsVisible
($handle)
  If 
BitAndWinGetState($handle), Then 
    
Return true
  
Else
    Return 
false
  
EndIf

EndFunc 
07/10/2011 17:51 Ludder231#12
Nee immernoch das gleiche
Wenn ich vor $button1 ein $msg= mache kommt das nciht mehr aber dann macht der keine msgbox mehr aber er macht das fenster wieder an die richtige stelle

Wenn ich wären die msgbox kommt und ich einfach nicht bestätige und den fensternamen eingebe und dann die msgbox bestätige gehgts aber erm hört dann nciht auf die msgbox mit den koordinaten zu machen...
07/10/2011 19:50 | Moep |#13
Sorry, aber ich versteh nicht was du uns mit deinem letzen Post sagen willst.
Probier mal dass und c&p dir das was du brauchst...

Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<misc.au3>
#include<string.au3>
#Region ### START Koda GUI section ### Form=
$winTitle = "ICQ WS"
$Form1 = GUICreate($winTitle, 139, 84, 199, 138)
$winPos = WinGetPos($winTitle)
$Button1 = GUICtrlCreateButton("Save Coords ", 32, 48, 75, 25)
$Input1 = GUICtrlCreateInput("Window Title", 8, 16, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Opt('MustDeclareVars', 1)
Global $Button1Switched = False, $handle, $input1,$winPosNew

While 1
    Local $Button1, $msg
	$msg = GUIGetMsg()
        Switch $msg
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $Button1
                $Button1Switched = not $Button1Switched
		EndSwitch
			
        If $Button1Switched then
			$winPosNew = WinGetPos($winTitle)
			If $winPos[0] <> $winPosNew[0] Or $winPos[1] <> $winPosNew[1] Or $winPos[2] <> $winPosNew[2] Or $winPos[3] <> $winPosNew[3] Then
				WinMove($winTitle,"",$winPos[0],$winPos[1],$winPos[2],$winPos[3])
				EndIf
		EndIf
WEnd
07/11/2011 12:38 Ludder231#14
Ich habs jz einfach so gemacht un es klappt perfekt...

PHP Code:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<misc.au3>
#include<string.au3>
#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("ICQ WS"13984199138)
$Button1 GUICtrlCreateButton("Save Coords "32487525)
$Input1 GUICtrlCreateInput("Window Title"81612121)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $handle$input1$position
HotKeySet
("{F1}""resizer")
While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        
            case 
$button1

            
if WinExists(guictrlread($input1)) AND IsVisible($handleThen
                
if isvisible($handle) = 0 Then
                    msgbox
(16"""The Windows must be visible")
                    endif
                
$position WinGetPos(guictrlread($input1))
                if 
$position[0] AND $position[1] < 0 Then
                    msgbox
(16"Error""Window must be active!")
                    else
                
IniWrite(@windowsdir&"\ICQWS.ini""X""X"$position[0])
                
IniWrite(@windowsdir&"\ICQWS.ini""Y""Y"$position[1])
                
IniWrite(@windowsdir&"\ICQWS.ini""W""W"$position[2])
                
IniWrite(@windowsdir&"\ICQWS.ini""H""H"$position[3])
                
msgbox(0"ICQ WS""X= "&$position[0]&" Y= "&$position[1]& @CRLF _
                
" W= "&$position[2]&" H= "&$position[3])
                
                endif
            Else
                
MsgBox(16"Not Found""Window does not exist")
            endif
            
            EndSwitch    
wend            
            
func resizer
()
    if 
not $position iniread(@windowsdir&"\ICQWS.ini""W""W""") AND iniread(@windowsdir&"\ICQWS.ini""H""H"""Then
    WinMove
(GUICtrlRead($input1), ""iniread(@windowsdir&"\ICQWS.ini""X""X"""), IniRead(@windowsdir&"\ICQWS.ini""Y""Y"""), Iniread(@windowsdir&"\ICQWS.ini""W""W"""), Iniread(@windowsdir&"\ICQWS.ini""H""H"""))
endif
EndFunc


Func IsVisible
($handle)
  If 
BitAndWinGetState($handle), Then 
    
Return true
  
Else
    Return 
false
  
EndIf

EndFunc 
07/11/2011 19:52 lolkop#15
Quote:
Originally Posted by Ludder231 View Post
Ich habs jz einfach so gemacht un es klappt perfekt...

von dem was du da geschrieben hast ergibt leider nur wenig einen sinn...

du nutzt
Code:
IsVisible($handle)
obwohl die einzige stelle an der du $handle definiert hast, oben bei den globalen definitionen sitzt.

dh $handle ist dein gesamtes script hindurch einfach nur true...

IsVisible schaut ob das fenster mit dem handle $handle (True) sichtbar ist.
da handles iterativ vergeben werden, sollte das erste fenster welches das os öffnet (gehe mal davon aus das dies der explorer ist), das handle True (1) haben.

dein script schaut also ständig nach, ob der explorer sichtbar ist.

Falls dies der Fall ist, und IsVisible(1) True ausgibt, überprüfst du ob IsVisible(1) False ausgibt, was ja auchnicht allzuviel sinn macht.

danach kommt folgende codestelle:
Code:
if $position[0] AND $position[1] < 0 Then
    msgbox(16, "Error", "Window must be active!")
    [...]
leider ergibt auch dies keinen sinn.

WinGetPos bestimmt immer die aktuelle position des fensters. hierbei ist egal ob das fenster aktiv ist oder nicht.

auch deine resize funktion ist weitestgehend unbrauchbar.
Code:
func resizer()
    if not $position = iniread(@windowsdir&"\ICQWS.ini", "W", "W", "") AND iniread(@windowsdir&"\ICQWS.ini", "H", "H", "") Then
    WinMove(GUICtrlRead($input1), "", iniread(@windowsdir&"\ICQWS.ini", "X", "X", ""), IniRead(@windowsdir&"\ICQWS.ini", "Y", "Y", ""), Iniread(@windowsdir&"\ICQWS.ini", "W", "W", ""), Iniread(@windowsdir&"\ICQWS.ini", "H", "H", ""))
endif
EndFunc
$position ist definiert als 4 elementiges 1 dimensionales array.
--> $position wird immer 0 sein.

wenn sich dein fenster also nicht an x position 0 befindet, wird es auf die alte position zurück gesetzt.

davon abgesehen finde ich die idee ständig eine ini anzulegen viel zu umständlich.
für so etwas legt man sich variablen zum speichern der alten werte an.