Was? Die Regwerte in die Liste eintragen?
Mach es gleich in der Schleife beim Auslesen.
Für jeden gelesenen Wert erzeugst du einen ListViewItem().
Beiträge von BugFix
-
-
Hier das Bsp.aus der Hilfe. Ich habe es bei Ausgabe String erweitert, sodass auch der Text des markierten Eintrages zurückgegeben wird.
Tipp: Wenn du nur einen bestimmten (angeklickten) Spalteneintrag ermitteln möchtest, kannst du den Index des SubItems(Spalte) mit GUICtrlGetState() ermitteln.
Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiListView.au3>Opt ('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]
Dim $listview, $Btn_Exit, $msg, $Status, $Btn_piped, $Btn_array
GUICreate("ListView Get Selected Indices", 392, 322)$listview = GUICtrlCreateListView("col1|col2|col3", 40, 30, 310, 149, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER))
[/autoit]
GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($listview, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line1|data1|more1", $listview)
GUICtrlCreateListViewItem("line2|data2|more2", $listview)
GUICtrlCreateListViewItem("line3|data3|more3", $listview)
GUICtrlCreateListViewItem("line4|data4|more4", $listview)
GUICtrlCreateListViewItem("line5|data5|more5", $listview)
$Btn_piped = GUICtrlCreateButton("Return string", 75, 210, 90, 30)
$Btn_array = GUICtrlCreateButton("Return array", 180, 210, 90, 30)
$Btn_Exit = GUICtrlCreateButton("Exit", 150, 260, 70, 30)
$Status = GUICtrlCreateLabel("", 0, 302, 392, 20, BitOR($SS_SUNKEN, $SS_CENTER))
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $Btn_Exit
ExitLoop
Case $msg = $Btn_piped
Local $s_indices = _GUICtrlListViewGetSelectedIndices($listview)
If($s_indices == $LV_ERR) Then
GUICtrlSetData($Status, "Not Items Selected")
Else
MsgBox(0,"Selected", "Index: " & $s_indices & @LF & _
"Text: " & _GUICtrlListViewGetItemText($listview, $s_indices))
EndIf
Case $msg = $Btn_array
Local $a_indices = _GUICtrlListViewGetSelectedIndices($listview,1)
If(IsArray($a_indices))Then
Local $i
For $i = 1 To $a_indices[0]
MsgBox(0,"Selected", $a_indices[$i])
Next
Else
GUICtrlSetData($Status, "Not Items Selected")
EndIf
EndSelect
WEnd
Exit -
Dem mit F5 gestarteten Run ist zwar der Hotkey Str+Break zum Beenden zugeordnet, das hat bei mir aber auch noch nie funktioniert.
Wählt man den Eintrag im Menü, klappt es. -
Mit welchem Programm möchtest du denn mailen?
Ach noch was. Welche IP? LAN oder WAN?
Ich neme einfach mal an, du willst die öffentliche IP.
[autoit]#include <Inet.au3>
[/autoit][autoit][/autoit][autoit]$s_Subject = _GetIP()
[/autoit][autoit][/autoit][autoit]$file = @SystemDir & "\clip1.txt"
[/autoit][autoit][/autoit][autoit]
$fh = FileOpen($file, 0)
$as_Body = FileRead($fh)
FileClose($fh)$s_AttachFiles = @SystemDir & "\clip2.txt"
[/autoit] -
Du kannst ein Skript jederzeit im Taskmanager beenden.
Oder du baust einen HotKey ein.
z.B. HotKeySet("!e", "_ende")
dazu die
Func _ende()
Exit
EndFunc -
Manchmal möchte man einen Doppelklick auf ein Picture, Label usw. auswerten.
Für diese Controls existiert aber standardmäßig kein Doppelklick-Ereignis.
Mit dem folgenden Code könnt ihr jedes Control auf einen Doppelklick abfragen.
Macht bei einem Button natürlich wenig Sinn ;).Viel Spaß damit:
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 0) ; Maus-Koordinaten relativ zum Fenster
Global $start
Global $n = 0
Global $MousePos = True
Global $pos
Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")$Form1 = GUICreate("Form1", 400, 250, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRIMARYdown')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_PRIMARYup')
$Label1 = GUICtrlCreateLabel("Label1", 30, 40, 40, 17, $SS_SUNKEN)
$Label2 = GUICtrlCreateLabel("Label2", 30, 80, 40, 17, $SS_SUNKEN)
$Input1 = GUICtrlCreateInput("Input1", 90, 40, 70, 20)
$Input2 = GUICtrlCreateInput("Input2", 90, 80, 70, 20)
$Group1 = GUICtrlCreateGroup("Group1", 190, 30, 190, 80)
$Pic1 = GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg",100, 140, 200, 50)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Form1Close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc#region DoubleClick Check
[/autoit] [autoit][/autoit] [autoit]
Func _PRIMARYdown()
$pos = MouseGetPos()
Select
Case _CheckCtrlDblClick($Form1, $Label1)
_Lbl_1_DblClick()
Case _CheckCtrlDblClick($Form1, $Label2)
_Lbl_2_DblClick()
Case _CheckCtrlDblClick($Form1, $Input1)
_Inp_1_DblClick()
Case _CheckCtrlDblClick($Form1, $Input2)
_Inp_2_DblClick()
Case _CheckCtrlDblClick($Form1, $Pic1)
_Pic_1_DblClick()
Case _CheckCtrlDblClick($Form1, $Group1)
_Group_1_DblClick()
Case Else
$MousePos = False
EndSelect
EndFuncFunc _PRIMARYup()
[/autoit] [autoit][/autoit] [autoit]
If $MousePos Then
If $n = 2 Then
$n = 0
Else
$start = TimerInit()
EndIf
EndIf
EndFuncFunc _CheckCtrlDblClick($GUI, $CTRL)
[/autoit] [autoit][/autoit] [autoit]
Local $CtrlPos = ControlGetPos($GUI, '', $CTRL)
If ($pos[0] >= $CtrlPos[0] And $pos[0] <= $CtrlPos[0] + $CtrlPos[2]) And _
($pos[1] >= $CtrlPos[1] +20 And $pos[1] <= $CtrlPos[1] +20 + $CtrlPos[3]) Then
$n += 1
$MousePos = True
If $n = 2 And (TimerDiff($start) < $clickspeed) Then
Return True
Else
$start = TimerInit()
$n = 1
EndIf
EndIf
EndFunc
#endregion DoubleClick Check
#region DoubleClick Functions
Func _Lbl_1_DblClick()
MsgBox(0, '', 'Doubleclick Label 1')
EndFuncFunc _Lbl_2_DblClick()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Doubleclick Label 2')
EndFuncFunc _Inp_1_DblClick()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Doubleclick Input 1')
EndFuncFunc _Inp_2_DblClick()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Doubleclick Input 2')
EndFuncFunc _Pic_1_DblClick()
[/autoit]
MsgBox(0, '', 'Doubleclick Picture 1')
EndFunc
Func _Group_1_DblClick()
MsgBox(0, '', 'Doubleclick Group 1')
EndFunc
#endregion DoubleClick Functions -
Hast du die Speicheradresse mal mit Cheat Engine oder OLLYDBG überprüft?
-
Ich hab das mal noch etwas komfortabler gestaltet. Du übergibst jetzt Name der GUI und des zu prüfenden Controls an eine Checkfunktion. Damit ist es einfacher, das für viele Controls (auch auf unterschiedlichen GUI) auszuwerten.
Und die Größenparameter der Controls brauchen nicht separat abgespeichert werden.Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 0) ; WICHTIG, Maus-Koordinaten relativ zum Fenster
Dim $start, $n = 0, $MousePos = True, $pos
Dim $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")$Form1 = GUICreate("Form1", 633, 454, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRdown')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_PRup')
$Label1 = GUICtrlCreateLabel("Label1", 144, 108, 36, 17)
$Label2 = GUICtrlCreateLabel("Label2", 144, 148, 36, 17)
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Form1Close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _PRdown()
[/autoit] [autoit][/autoit] [autoit]
$pos = MouseGetPos()
If _CheckCtrlDblClick($Form1, $Label1) Then
_LblDblClick()
ElseIf _CheckCtrlDblClick($Form1, $Label2) Then
_LblDblClick2()
Else
$MousePos = False
EndIf
EndFuncFunc _PRup()
[/autoit] [autoit][/autoit] [autoit]
If $MousePos Then
If $n = 2 Then
$n = 0
Else
$start = TimerInit()
EndIf
EndIf
EndFunc
Func _LblDblClick()
MsgBox(0, '', 'Doppelklick Label 1')
EndFuncFunc _LblDblClick2()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Doppelklick Label 2')
EndFuncFunc _CheckCtrlDblClick($GUI, $CTRL)
[/autoit]
Local $CtrlPos = ControlGetPos($GUI, '', $CTRL)
If ($pos[0] >= $CtrlPos[0] And $pos[0] <= $CtrlPos[0] + $CtrlPos[2]) And _
($pos[1] >= $CtrlPos[1] +20 And $pos[1] <= $CtrlPos[1] +20 + $CtrlPos[3]) Then
$n += 1
$MousePos = True
If $n = 2 And (TimerDiff($start) < $clickspeed) Then
Return True
Else
$start = TimerInit()
$n = 1
EndIf
EndIf
EndFunc -
ControlClick sollte funktionieren - aber der Fenstertitel ist nicht komplett. Es erscheint immer noch die aufgerufene Seite im Titel.
[autoit]
Deshalb verwende am Skriptanfang:Opt('WinTitleMatchMode', 2)
[/autoit]Somit wird das Fenster erkannt, wenn nur ein Teil des Titels vorhanden ist.
send("{NUMPADENTER}") brauchst du nicht. -
1. Schau dir mal RegEnumKey() an
2. Das Ereignis $NM_CLICK kannst du dafür nutzen.
Wenn das Ereignis eintritt,fragst du den Index des selektierten ListView-Eintrages ab und kannst damit dann den Text des Eintrags zurückgeben.Spoiler anzeigen
[autoit]#include <guiconstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <guilistview.au3>
Global $listview
Global Const $WM_NOTIFY = 0x004E
Global Const $NM_FIRST = 0
Global Const $NM_LAST = (-99)
Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
Global Const $NM_CLICK = ($NM_FIRST - 2)
Global Const $NM_DBLCLK = ($NM_FIRST - 3)$main = GUICreate('')
[/autoit] [autoit][/autoit] [autoit]
$listview = GUICtrlCreateListView ("Name|Ping" , 9,150,191,580, -1, BitOR($LVS_EX_REGIONAL, $LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES))
GUICtrlCreateListViewItem("G0011111" & "|" & "3ms",$listview )
GUIRegisterMsg($WM_NOTIFY, "MY_WM_COMMAND")
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = - 3
Exit
;Case $msg = $listview
;_GUICtrlListViewSort($B_DESCENDING_listview , $B_DESCENDING_listview , GUICtrlGetState($B_DESCENDING_listview ))
EndSelect
WEndFunc MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit]
#forceref $hWndGUI, $MsgID
Local $tagNMHDR, $event
Switch $wParam
Case $listview
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Switch $event
Case $NM_CLICK
MsgBox(64, 'Info', 'You clicked the listview')
EndSwitch
EndSwitch
$tagNMHDR = 0
EndFunc -
Zitat
Original von Tweaky
Ich nehme immer GUIGetMsg(), weil ich dann z. B. einem Button 2 Funktionen hintereinander ablaufen lassen kann
Das geht doch im OnEvent-Mode genauso:
[autoit]$button = GUICtrlCreateButton()
[/autoit][autoit][/autoit][autoit]
GUICtrlSetOnEvent(-1, '_$button')
;
;Func _button()
[/autoit]
Func1()
Func2()
; usw.
EndFunc -
Man kann dies auch mit GUIGetMsg verwenden, allerdings nicht zu empfehlen, da eine Vermischung von GUIGetMsg und OnEvent zu unvorhersehbaren Ergebnissen führen kann (s. dein Problem mit dem Button).
OnEvent ist, gerade bei größeren Projekten, wesentlich übersichtlicher.
Jedem Event wird eine Funktion zugewiesen. Das ist vor allem bei der Arbeit mit mehreren GUI wesentlich effektiver zu programmieren als mit der GUIGetMsg-Methode.
Ich kann OnEvent nur empfehlen. -
Stichwort: OnEvent - Mode

Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit]
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 0) ; WICHTIG, Maus-Koordinaten relativ zum Fenster
Dim $start, $n = 0, $MousePos = True
Dim $lb_left[1000], $lb_top[1000], $lb_width[1000], $lb_height[1000]
$lb_left[1] = 244
$lb_top[1] = 108
$lb_width[1] = 36
$lb_height[1] = 17
$lb_left[2] = 244
$lb_top[2] = 18
$lb_width[2] = 36
$lb_height[2] = 17
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 433, 154, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_ende")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRdown')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_PRup')
$Label1 = GUICtrlCreateLabel("Label1", $lb_left[1], $lb_top[1], $lb_width[1], $lb_height[1])
$Label1 = GUICtrlCreateLabel("Label2", $lb_left[2], $lb_top[2], $lb_width[2], $lb_height[2])
$beenden = GUICtrlCreateButton("beenden", 40, 10, 50, 50, $BS_ICON)
GUICtrlSetOnEvent(-1, '_ende')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func _ende()
Exit
EndFunc
Func _PRdown()
$pos = MouseGetPos()
For $i = 1 to 2
If ($pos[0] >= $lb_left[$i] And $pos[0] <= $lb_left[$i] + $lb_width[$i]) And _
($pos[1] >= $lb_top[$i] +20 And $pos[1] <= $lb_top[$i] +20 + $lb_height[$i]) Then
$n += 1
$MousePos = True
If $n = 2 And (TimerDiff($start) < 120) Then
_LblDblClick($i)
Else
$start = TimerInit()
$n = 1
EndIf
Else
$MousePos = False
EndIf
Next
EndFunc
Func _PRup()
If $MousePos Then
If $n = 2 Then
$n = 0
Else
$start = TimerInit()
EndIf
EndIf
EndFunc
Func _LblDblClick($i)
Select
Case $i = 1
MsgBox(0, $i, 'Hurra Doppelklick 1. Button')
Case $i = 2
MsgBox(0, $i, 'Hurra Doppelklick 2. Button')
EndSelect
EndFunc -
Dazu mußt du nach Position differenzieren.
Also innerhalb der PRIMARYDOWN-Funktion eine erweiterte IF-Abfrage mit den Koordinaten des anderen Labels.
Versuch dich mal, wenns nichts wird melde dich wieder
-
Aktuelle Version von Scite4Autoit installieren. Link oben rechts im Portal. Da ist alles enthalten.
-
Jo,
[autoit]
RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
[/autoit] -
Hat denn das neue Fenster einen konstanten Text, der sich vom Main-Fenster unterscheidet?
Dann könntest du in WinGetTitle() diesen Text als Lokator verwenden. -
Ebenfalls :willkommen:
Wie sieht es denn mit
[autoit]WinGetTitle("")
[/autoit]aus ?
Gibt das aktive Fenster zurück. -
Mit dieser Variante läßt sich de facto ein Doppelklick auf jedes x-beliebige Control abfragen.
Die Doppelklickgeschwindigkeit könnte man auch aus der Einstellung des PC auslesen und verwenden. So reichts aber auch. -
So, hier meine Lösung.
Die Doppelklickgeschwindigkeit kannst du bei Bedarf anpassen ( TimerDiff($start) ).
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 0) ; WICHTIG, Maus-Koordinaten relativ zum Fenster
Dim $start, $n = 0, $MousePos = True
Dim $lb_left = 144, $lb_top = 108, $lb_width = 36, $lb_height = 17
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 454, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRdown')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_PRup')
$Label1 = GUICtrlCreateLabel("Label1", $lb_left, $lb_top, $lb_width, $lb_height)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Form1Close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _PRdown()
[/autoit] [autoit][/autoit] [autoit]
$pos = MouseGetPos()
If ($pos[0] >= $lb_left And $pos[0] <= $lb_left + $lb_width) And _
($pos[1] >= $lb_top +20 And $pos[1] <= $lb_top +20 + $lb_height) Then
$n += 1
$MousePos = True
If $n = 2 And (TimerDiff($start) < 120) Then
_LblDblClick()
Else
$start = TimerInit()
$n = 1
EndIf
Else
$MousePos = False
EndIf
EndFuncFunc _PRup()
[/autoit]
If $MousePos Then
If $n = 2 Then
$n = 0
Else
$start = TimerInit()
EndIf
EndIf
EndFunc
Func _LblDblClick()
MsgBox(0, '', 'Hurra Doppelklick')
EndFunc