Hey@all
Habe eine Variabel $test .
Jetzt möchte ich wissen welche Art von Control diese ist.
Dh ist es ein Edit, Label, Input,....
Dies brauche ich für ein Skript, den ich bald vorstellen werde.
Thx4Help
Hey@all
Habe eine Variabel $test .
Jetzt möchte ich wissen welche Art von Control diese ist.
Dh ist es ein Edit, Label, Input,....
Dies brauche ich für ein Skript, den ich bald vorstellen werde.
Thx4Help
Du kannst mit _WinAPI_GetClassName den Klassennamen herausfinden. Dann kannst du anhand der Styles herausfinden, um welches es sich genau handelt, z.B. Input und Edit haben beide "Edit" als Klassennamen, aber Ein Edit hat ES_MULTILINE als style.
Hmm. Gibst du mir pls ein Bsp. dafür. So ganz weit komme ich da nicht...
Hier mein Anfang:
[autoit]
Switch _WinAPI_GetClassName($VAR)
Case "Static"
$class="Label"
Case "Edit"
$class="Edit"
Case "Button"
$class="Button"
Case "ComboBox"
$class="Combo"
Case Else
$class=_WinAPI_GetClassName($VAR)
EndSwitch
Bitte heflt, damit man Edit&Input unterscheiden kann. Wäre nett wenn einer dies hier verfollständigen würde.
Bitte heflt, damit man Edit&Input unterscheiden kann
Das ist beides CLASS:EDIT, somit kannst du sie auf diese Weise nicht unterscheiden.
Zitat[Heute, 18:46] L3viathan: Du kannst es versuchen, rauszufinden, je nachdem, welche Funktionen einen Error zurückgeben und welche nicht... wäre aber *sehr* unsauber*
ZitatDann kannst du anhand der Styles herausfinden, um welches es sich genau handelt, z.B. Input und Edit haben beide "Edit" als Klassennamen, aber Ein Edit hat ES_MULTILINE als style.
Aber wie?
Wenn man es so sieht ist eine Edit oder eine Input das gleiche. Nur das Eine Input immer gleich hoch ist.
Ja, dass ist mir klar.
Ich möchte ja nur wissen ob das geht.
Anderes Beispiel:
Button und Checkbox werden beide als Button gekennzeichnet.
Da eine Input immer gleich hoch ist könntest du mit Höhenerkennung arbeiten.
Ohh, sry.
Jetzt hast du den Edit net gesehn:
ZitatAnderes Beispiel:
Button und Checkbox werden beide als Button gekennzeichnet.
Da kann man ja leider nicht wirklich mit Höhenerkennung arbeiten, da Button ja fast immer anders gleich hoch sind.
Thx4Help
Kann mir denn keiner helfen?
Func _GetWindowStyles($hwnd)
If Not IsHWnd($hwnd) Then
$hwnd = GUICtrlGetHandle($hwnd)
EndIf
$tagWINDOWINFO = DllStructCreate("DWORD cbSize; long[4]; long[4]; DWORD dwStyle; DWORD dwExStyle; DWORD dwWindowStatus;UINT;UINT;WORD;WORD")
DllStructSetData($tagWINDOWINFO, "cbSize", DllStructGetSize($tagWINDOWINFO))
DllCall("User32.dll", "BOOL", "GetWindowInfo", "hwnd", $hwnd, "ptr", DllStructGetPtr($tagWINDOWINFO))
Return DllStructGetData($tagWINDOWINFO, "dwStyle")
EndFunc
Func _ControlGetClassName($hwnd)
Switch _WinAPI_GetClassName($hwnd)
Case "Static"
$class="Label"
Case "Edit"
If BitAND(_GetWindowStyles($hwnd), $ES_MULTILINE) = $ES_MULTILINE Then
$class="Edit"
Else
$class="Input"
EndIf
Case "Button"
$class="Button"
Case "ComboBox"
$class="Combo"
Case Else
$class=_WinAPI_GetClassName($hwnd)
EndSwitch
Return $class
EndFunc
Du bist der Größte . Thx
Ergänzend dazu habe ich auch noch die Funktion '_IsCheckBox' geschrieben, um Buttons und CheckBoxen zu unterscheiden.
Func _IsCheckbox($hCtrl)
;funkey
If Not IsHWnd($hCtrl) Then $hCtrl = GUICtrlGetHandle($hCtrl)
Local $aResult = DllCall("user32.dll", "int", "GetClassNameW", "hwnd", $hCtrl, "wstr", "", "int", 4096)
If $aResult[2] <> "Button" Then Return 0
Local $sFuncName = "GetWindowLongW"
If @AutoItX64 Then $sFuncName = "GetWindowLongPtrW"
$aResult = DllCall("user32.dll", "long_ptr", $sFuncName, "hwnd", $hCtrl, "int", 0xFFFFFFF0)
If BitAND($aResult[0], 0x3) = 0x3 Then Return 1
Return 0
EndFunc