Hallo zusammen,
ja super, GUICtrlDelete() hat funktioniert.
Besten Dank euch.
Gruß Schumi
Hallo zusammen,
ja super, GUICtrlDelete() hat funktioniert.
Besten Dank euch.
Gruß Schumi
Hallo zusammen,
in der Onlinehilfe ist von UEZ eine tolle Funktion "_GUICtrlPic_Create" (Beispiel 2) zu finden.
Unter "_GDIPlus_BitmapCreateFromFile" ist das Beispiel auch zu finden.
Wenn man sich so ein Bild in der GUI erstellt hat - wie kann man es wieder löschen ?
Mit "_WinAPI_DeleteObject" habe ich es nicht hinbekommen.
Hat evtl. einer eine Idee?
Gruß Schumi
Ich habe doch noch etwas anderes gefunden.
Hier in der Zip.au3 ist eine Funktion "_Zip_List", die genau das liefert was ich brauche.
Gruß Schumi
Hallo BugFix,
danke für den Tipp.
Dateien binär einlesen habe ich noch nicht versucht. Na, ich versuche es mal ...
Besten Dank.
Gruß Schumi
Hallo BugFix,
ich habe mal eine Frage zu der Funktion "_BuildInZIP".
Kann man beim Entpacken die Dateinamen (also die entpackt werden sollen) auslesen.
Ich möchte deine tolle Funktion gerne nutzen. Aber ich möchte auch im Script "sehen" was ich da auspacke.
Wie kann man das machen?
Gruß Schumi
Hallo BugFix,
das hat leider nicht funktioniert. Es hat sich keine Änderung gezeigt.
Auch ohne diese Zeile _GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED) hat das nicht funktioniert.
Ich habe das so eingebaut:
#Region ### START Koda GUI section ### Form=
$Form1_1 = GUICreate("Fenster-Info", 783, 568, 556, 198, $GUI_SS_DEFAULT_GUI + $WS_SIZEBOX)
$lb_Info = GUICtrlCreateLabel("", 208, 136, 342, 25) ; Label zur Kontrollanzeige
;div.
;GUICtrlCreateLabel
;GUICtrlCreateButton
;GUICtrlCreateListView
;GUICtrlCreateTab
usw...
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; ermittle die ClassNN von der Listview
$WGTxtListViewClassNN = GetClassNameNN_FromControlID($Form1_1, $WGTxtListView)
; ermittle die ClassNN vom Control welches jetzt den Focus hat
$Focus = ControlGetFocus($Form1_1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case ... für dies
Case ... für das
EndSwitch
If $Focus <> ControlGetFocus($Form1_1) Then ; prüfe ob sich der Focus geändert hat
If $Focus = $WGTxtListViewClassNN Then ; wenn ja - war das der Focus von der Listview
_GuiCtrlListView_SetFocusSelected($WGTxtListView) ; wenn ja - ruf die Funktion von BugFix auf
Else
GUICtrlSetData($lb_Info, "False: " & $Focus & " = " & $WGTxtListViewClassNN) ; wenn nein - zeige welcher Fucus war es
EndIf
$Focus = ControlGetFocus($Form1_1)
EndIf
WEnd
; Funktion von BugFix mit kleinen Änderunegn
Func _GuiCtrlListView_SetFocusSelected($hWnd )
; Quelle: https://autoit.de/index.php/Thread/29498-GuiCtrlListView-SetFocusSelected/?postID=237411#post237411
$iIndex = _GUICtrlListView_GetSelectionMark($hWnd) ; ermittle den Index vom selectiertem Element
IF $iIndex = -1 Then Return
GUICtrlSetData($lb_Info, "True: Index= " & $iIndex & " neuer Focus= " & ControlGetFocus($Form1_1)) ;
_GUICtrlListView_BeginUpdate($hWnd)
_GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED)
_GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_SELECTED, $LVIS_SELECTED)
_GUICtrlListView_EnsureVisible($hWnd, $iIndex)
_GUICtrlListView_EndUpdate($hWnd)
EndFunc
Func GetClassNameNN_FromControlID( $wndTitle, $id , $winText="")
; Quelle: https://www.autoitscript.com/forum/topic/60043-get-classnamenn-by-control-id/
; Derive the Window Class for the given Control ID
Local $hWnd = ControlGetHandle( $wndTitle, $winText, $id )
Local $ClassName = _WinAPI_GetClassName( $hWnd )
; Get an array of classes associated with the same window
Local $ClassList = StringSplit( WinGetClassList( $wndTitle, $winText), @LF )
Local $ClassCount = 0
; Walk the array.
For $i = 1 to $ClassList[0]
If $ClassList[$i] = $ClassName Then
; If we encounter the same classname, increment the class count
$ClassCount += 1
; Obtain the Control ID using the ClassNameNN syntax
$Test_ClassNameNN = $ClassName & $ClassCount
$Test_hWnd = ControlGetHandle( $wndTitle, $winText, $Test_ClassNameNN )
$Test_ID = GetControlID( $Test_hWnd )
; Test if the ID's are the same
If $id = $Test_ID then Return $Test_ClassNameNN
EndIf
Next
EndFunc
Func GetControlID($hwnd)
; Quelle: https://www.autoitscript.com/forum/topic/60043-get-classnamenn-by-control-id/
Local $ID = DllCall('user32.dll', 'int', 'GetDlgCtrlID', 'hwnd', $hwnd)
if IsArray ($ID) Then Return $ID[0]
Return 0
EndFunc
Alles anzeigen
Deine Funktion wird also immer nach dem Focuswechsel aufgerufen. Aber das kann doch nicht schädlich sein, oder doch?
Gruß Schumi
wird getestet...
Ich melde mich dann ...
Vielen Dank.
Gruß Schumi
Hallo BugFix,
vielen Dank. Das ist ja sehr interessant.
Einen Haken hat die Funktion aber - der Aufruf.
Die GUI-Abfrage mache ich mit:
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case ...
...usw.
Wie kann ich denn den Fokus-Wechsel abfragen?
Das könnte aber mit ControlGetFocus() gehen, oder?
Gruß Schumi
Hallo Kanashius,
vielen Dank für die Info.
In einer Listbox ist das komischerweise nicht so. Da bleibt das Blau erhalten.
Ich werde mir das auch noch einmal anschauen.
Vielen Dank.
Gruß Schumi
Hallo teamnoobPDB,
das markierte Item soll ja bei Fokusverlust gut sichtbar bleiben.
Und eine Fokus-Prüfung/Steuerung hört sich recht umfangreich an. Ich möchte auch nicht mit Kanonen auf Spatzen schießen.
Vielleicht geht es doch irgendwie einfacher.
Gruß Schumi
Hallo zusammen,
das selektierte Element einer Listview ist ja in blau schön sichtbar. Wenn die Listview keinen Fucus hat wird daraus ein unscheinbares grau.
Kann man dieses Grau irgendwie ändern - und wenn ja, wie?
Gruß Schumi.
Im ersten Test hat das funktioniert - die Funktion "NET_DumpAllControlNames" liefert die Namen.
Und das kann man sich dann mit [NAME: (derName)] zusammenbauen.
Super, vielen Dank.
Gruß Schumi
Ja richtig, dieser Seite habe ich eben auch gefunden.
Ich schau mir das mal an und teste das mal.
Besten Dank.
Gruß Schumi
Hallo AspirinJunkie,
ich habe jetzt mal so einiges nach deinem Muster getestet. Und was soll ich sagen ... es ist so wie du sagst.
Bei meiner GUI handelt es sich um eine .NET-Anwendung. Und hier sieht das in dem Window-Info-Tool anders aus.
Hier im Bild ein Beispiel:
Hier kann man leider nichts zusammenbauen. Hier findest du auch [NAME:tbFirmenname] . Und darüber kann man das Control wunderbar ansprechen.
Gruß Schumi
Ja, was will ich erreichen:
Mit Autoit lese oder schreibe ich Daten aus bzw. in eine GUI. Und dabei benutze ich auch Fensterelemente der GUI.
Mit den ClassNN kann man das nur bedingt machen - die ändern sich schnell und ich muss das Script laufend anpassen.
Am besten geht das mit den "Advanced Mode"-Namen.
Im Laufe der Zeit bekomme ich auch mal eine neue Version der GUI. Dann muss ich natürlich alle "Advanced Mode" überprüfen.
Die ClassNN habe sich in jedem Fall geändert. Bei den "Advanced Mode" habe noch keine Änderungen gefunden. Ich muss es aber dennoch prüfen.
Zur Prüfung der ClassNN habe ich das Script von Großvater benutzt. Ein tolles Teil und hier zu finden.
https://autoit.de/index.php/Thread/27373-WinGetControls-Controls-eines-Fensters-auslesen/?postID=224614&highlight=wingetcontrol
Und genau dieses Script würde ich gern um die gesuchte Funktion erweitern. Damit kann ich dann die komplette GUI auslesen und sehe alles auf einen Blick.
Ich will mir also eine eigene Art "Win-Info-Tool" bauen. Damit kann ich dann meine Scripte sehr viel schneller anpassen und muss nicht alle Infos mit Window-Info suchen und kopieren.
Gruß Schumi
Nein, mit Excel habe ich nichts vor. Das war nur ein Beispiel was viele nachvollziehen können.
Danke.
Gruß Schumi
Also nur zur Sicherheit - hier am Beispiel von Excel2010...
lt. Win-Info-Tool steht hier:
Advanced Mode [CLASS:EXCEL7; INSTANCE:1]
#include "Array.au3"
Opt("WinTitleMatchMode", 4)
$handle = WinGetHandle("Microsoft Excel - Mappe2")
$aClass = StringSplit(WinGetClassList($handle),@LF)
_ArrayDisplay($aClass)
... und mit dem Test hier bekomme ich 52 Class angezeigt. An der 31. Stelle habe ich "EXCEL7" gefunden.
So richtig eineindeutig ist das nicht.
Bekommt man das etwas gezielter hin? Oder habe ich dich noch nicht richtig verstanden?
Gruß Schumi
Das kenne ich nicht. Das wäre ja toll. Ich teste das mal.
Vielen Dank.
Gruß Schumi
Vielen Dank. Das ist es leider nicht.
Ich suche eine Funktion die mir den "Advanced Mode"-Namen oder Inhalt liefert.
zB. so...
$handle = WinActivate("Mein Fenster")
$sAdvancedMode = _ControlGetAdvancedMode($handle)
... und in $sAdvancedMode steht dann [NAME:MyWindow]
Ich habe nichts dazu gefunden. Hast du noch einen anderen Tipp?
Gruß Schumi
Hallo zusammen,
in dem Window Info-Tool wird u.a. auch der "Advanced Mode" bzw. "Advanced Class" angezeigt.
Ich suche eine Funktion mit der man genau diesen "Advanced Mode" aus einem Fensterhandle auslesen kann.
Hat einer von euch einen Tipp oder eine Lösung?
Besten Dank.
Gruß Schumi