- Offizieller Beitrag
Hi,
ihr kennt es sicher: Man benötigt in einem Funktionsaufruf den X-Wert des Cursors od. die ID über der der Cursor ist, einen Wert der Position eines Fensters oder eines Controls.
In jedem Fall habe ich keinen direkten Zugriff sondern muss mir mit dem Funktionsaufruf ein Array zurückgeben lassen und kann anschließend auf die einzelnen Werte zugreifen.
Solange ich mehrere Werte verwende ist das OK, aber bei einem einzelnen ist es eleganter, wenn ich den Funktionsaufruf zur Abfrage des Parameters direkt in meine Zielfunktion einsetzen kann.
Ich habe folgende Funktionen etwas umgebaut:
• WinGetPos ==> _WinGetPos
• ControlGetPos ==> _CtrlGetPos
• GUIGetCursorInfo ==> _GUICursorInfo
und zusätzlich noch eine Funktion zur Statusabfrage:
• _WinHasState
Ausserdem können alle Einzelparameter neben dem bekannten Index im Array auch über ihren Parameternamen abgefragt werden (s. Funktionsbeschreibungen), das erleichtert durchaus das Lesen des Codes und erspart Kommentare:
[autoit]
$FensterBreite = _WinGetPos('w') ;== od. _WinGetPos(2)
$Ctrl_Hoehe = _CtrlGetPos('h', $hWnd, $ID) ;== od. _CtrlGetPos(3, $hWnd, $ID)
$ID_unter_Cursor = _GUICursorInfo('id') ;== od. _GUICursorInfo(4)
$Existiert = _WinHasState('exists', 'Firefox') ;== od. _WinHasState(1, 'Firefox')
Alles zusammen habe ich in der Datei "GuiPartialInfo.au3" gespeichert.
Spoiler anzeigen
;===============================================================================
; Function Name....: _WinGetPos
; Description......: wie WinGetPos() - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,w,h ]
; .................: $_hWnd Handle des Fensters oder Titel, Standard "" - das aktive Fenster
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg Array mit Positionsdaten oder einzelner Positionswert
; .................: Fehler @error 1 - Fenster konnte nicht bestimmt werden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WinGetPos($_vPart=-1, $_hWnd='', $_sText='')
Local $aHWnd = WinGetPos($_hWnd, $_sText)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aHWnd
Case '0', 'x'
Return $aHWnd[0]
Case '1', 'y'
Return $aHWnd[1]
Case '2', 'w'
Return $aHWnd[2]
Case '3', 'h'
Return $aHWnd[3]
EndSwitch
EndFunc ;==>_WinGetPos
;===============================================================================
; Function Name....: _CtrlGetPos
; Description......: wie ControlGetPos - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,w,h ]
; .................: $_hWnd Handle des Fensters oder Titel
; .................: $_ID ID des Controls
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg Array mit Positionsdaten oder einzelner Positionswert
; .................: Fehler @error 1 - Control konnte nicht bestimmt werden
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _CtrlGetPos($_vPart, $_hWnd, $_ID, $_sText='')
Local $aCtrl = ControlGetPos($_hWnd, $_sText, $_ID)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aCtrl
Case '0', 'x'
Return $aCtrl[0]
Case '1', 'y'
Return $aCtrl[1]
Case '2', 'w'
Return $aCtrl[2]
Case '3', 'h'
Return $aCtrl[3]
EndSwitch
EndFunc ;==>_CtrlGetPos
;===============================================================================
; Function Name....: _GUICursorInfo
; Description......: wie GUIGetCursorInfo - aber Einzelparameterabfrage möglich
; Parameter(s).....: $_vPart -1 (Standard) gibt das kpl. Array zurück, sonst Index im Array od. Parameter [ x,y,primary,secondary,id ]
; .................: $_hWnd Handle des Fensters oder Titel
; Return Value(s)..: Erfolg Array mit Cursordaten oder einzelner Wert
; .................: Fehler @error 1 - Aufruf GUIGetCursorInfo() fehlerhaft
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _GUICursorInfo($_vPart=-1, $_hWnd='')
Local $aCursor = GUIGetCursorInfo($_hWnd)
If @error Then Return SetError(1,0,0)
Switch String($_vPart)
Case '-1'
Return $aCursor
Case '0', 'x'
Return $aCursor[0]
Case '1', 'y'
Return $aCursor[1]
Case '2', 'primary'
Return $aCursor[2]
Case '3', 'secondary'
Return $aCursor[3]
Case '4', 'id'
Return $aCursor[4]
EndSwitch
EndFunc ;==>_GUICursorInfo
;===============================================================================
; Function Name....: _WinHasState
; Description......: Überprüft ob ein Fenster einen bestimmten Status hat
; Parameter(s).....: $_vState Der zu prüfende Status als numerischer Wert od. Parameter [ exists,visible,enabled,active,minimized,maximized ]
; .................: $_hWnd Handle des Fensters oder Titel, Standard "" - das aktive Fenster
; ...optional......: $_sText optionaler Text zur Fenster-Bestimmung
; Return Value(s)..: Erfolg True / False
; .................: Fehler @error 1 - Fenster konnte nicht bestimmt werden
; .................: @error 2 - übergebenes Statuswort gibt es nicht
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _WinHasState($_vState, $_hWnd='', $_sText='')
If IsString($_vState) Then
Switch $_vState
Case 'exists'
$_vState = 1
Case 'visible'
$_vState = 2
Case 'enabled'
$_vState = 4
Case 'active'
$_vState = 8
Case 'minimized'
$_vState = 16
Case 'maximized'
$_vState = 32
EndSwitch
If IsString($_vState) Then Return SetError(2,0,0)
EndIf
If IsString($_hWnd) Then $_hWnd = WinGetHandle($_hWnd)
Local $iState = WinGetState($_hWnd, $_sText)
If @error Then Return SetError(1,0,0)
Return Not Not BitAND($iState, $_vState)
EndFunc ;==>_WinHasState