Fenstergröße rausfinden

07/11/2011 20:04 Ludder231#16
Joa kann schon sein, danke für die erläuterung.. ich werd mich mal dransetzen wenn ich lust habe...

Ps: Wenn das fenster minimiert wurde ergibt $position[0] = -32000 und $position[1] ebenfalls... sonst hätt ich diese if abfrage garnciht gemacht..


Besser so?
07/11/2011 20:48 | Moep |#17
Quote:
Originally Posted by lolkop View Post
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.
War selbst kurz davor ihn drauf hinzuweisen, wollt es mir dann aber verkneifen, weil er gesagt hat, ich zitiere: "es klappt perfekt".

Edit: @Ludder321: Du hast trotz der vielen Tipps noch soviele unnötige Passagen und Fehler in deinem Script dass das lesen schon echt wehtut. Konzentriere dich auf das wesentliche und schmeiß nicht sinnlos irgendwelche funktionen zusammen die du gerade gelernt hast.
07/11/2011 22:22 lolkop#18
leider hast du nicht wirklich die haupt fehler behoben auf die ich dich hinweisen wollte :/

hier nochmal das script wie ich es mir vorgestellt hätte:
Code:
HotKeySet("{F1}", "Resize")

Global $hwnd, $tmp[4]

GUICreate("ICQ WS", 139, 84, 199, 138)
$Button1 = GUICtrlCreateButton("Save Coords ", 32, 48, 75, 25)
$Input1 = GUICtrlCreateInput("Window Title", 8, 16, 121, 21)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $button1
			$hwnd = WinGetHandle(GUICtrlRead($input1))
			If Not IsVisible($hwnd) Then
				MsgBox(16, "", "The Windows must be visible")
			ElseIf WinExists($hwnd) Then
				$pos = WinGetPos($hwnd)
				For $i=0 To 3
					$tmp[$i]=$pos[$i]
				Next
			Else
				MsgBox(16, "Not Found", "Window does not exist")
			EndIf
	EndSwitch
WEnd

func Resize()
	Local $i, $match = True, $pos = WinGetPos($hwnd)
	For $i=0 To 3
		If $tmp[$i]<>$pos[$i] Then $match = False
	Next
	If Not $match Then WinMove($hwnd, '', $tmp[0], $tmp[1], $tmp[2], $tmp[3], 1)
EndFunc

Func IsVisible($hwnd)
	If BitAnd(WinGetState($hwnd), 2) Then Return true
	Return false
EndFunc