Hi,
ich habe folgendes Problem, das bei einer größer - kleiner Abfrage immer das gleiche Ergebnis geliefert wird.
Da ich es schon mit mehreren Varianten durchgetested habe wollte ich wissen ob ich ein Fehler mache oder
AutoIT das nicht richtig umsetzt
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.2.9.1 (beta)
Author: Mirage
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
#region ~Includes - Declarations - Options
#include
#include
#include
#include
Opt("GuiOnEventMode",1)
Opt("WinTitleMatchMode",4)
Opt("WinSearchChildren",0)
Global $pr_list, $pid_atg = 0, $pid_atgnew = 0
Global $i_ref = 0
Global $title = "ProWin Control 1.0"
Global $pr_win_list[1][6], $i_pr_wi = 0, $ar_time[1][11]
Global $time_act = 0, $time_index, $time_int
Global $dis_day, $dis_hour,$dis_min,$dis_sec
Global $Force
#endregion ~Includes - Declarations - Options
#region ~GUI - Presettings
$g_main = GUICreate($title,500,600,@DesktopWidth / 2 - 300, @DesktopHeight / 2 - 300)
$g_prlist = GUICtrlCreateList("",0,20,290,300,BitOR($WS_BORDER, $WS_VSCROLL, $WS_HSCROLL))
$g_refresh = GUICtrlCreateButton("Refresh List",310,20,90,20)
$g_add = GUICtrlCreateButton("Add Process", 310,60,90,20)
$g_close = GUICtrlCreateButton("Close Process", 310,100,90,20)
$g_closetime = GUICtrlCreateButton("Close on Time",310, 290,90,20)
$g_showwin = GUICtrlCreateButton("Show Window",310,140,90,20)
$g_hidewin = GUICtrlCreateButton("Hide Window",310,180,90,20)
$g_chname = GUICtrlCreateButton("Change Window Name",310,220,120,20)
GUICtrlSetOnEvent($g_chname,"_ChangeName")
GUICtrlSetOnEvent($g_hidewin,"_HideWin")
GUICtrlSetOnEvent($g_showwin,"_ShowWin")
GUICtrlSetOnEvent($g_closetime,"_CloseTime")
GUICtrlSetOnEvent($g_refresh,"_Refresh")
GUICtrlSetOnEvent($g_add,"_AddProcess")
GUICtrlSetOnEvent($g_close,"_CloseProcess")
GUISetOnEvent(-3,"_Exit",$g_main)
$g_prcllist = GUICtrlCreateList("",0,340,290,240,BitOR($WS_BORDER, $WS_VSCROLL, $WS_HSCROLL))
$g_prcledit = GUICtrlCreateButton("Edit Process Time", 310,340,90,20)
GUICtrlCreateLabel("Next Application to close:",310,450,130,20)
$g_appname = GUICtrlCreateLabel("",310,475,180,20)
GUICtrlCreateLabel("Time Left:",310,500,50,20)
$g_apptimer = GUICtrlCreateLabel("00:00:00",370,500)
AdlibEnable("_Refresh",1000)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_Refresh(0)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW,$g_main)
#endregion ~GUI - Presettings
#region ~Functions
[/autoit] [autoit][/autoit] [autoit]Func _Exit()
Exit
EndFunc
Func _Refresh($Force)
[/autoit] [autoit][/autoit] [autoit]$bkp_list = $pr_list
$pid_atgnew = 0
$pr_list = ProcessList()
$win_list = WinList()
For $i = 1 To UBound($pr_list) - 1
$pid_atgnew = $pid_atgnew + $pr_list[$i][1]
Next
$pid_atgnew = $pid_atgnew + $win_list[0][0]
If $Force = 1 Then
Else
If $pid_atgnew = $pid_atg Then
Return
EndIf
EndIf
ReDim $pr_win_list[1][6]
$i_pr_wi = 0
$pid_atg = 0
GUICtrlSetData($g_prlist,"")
For $i = 1 To UBound($pr_list) - 1
$win_ava = ""
$pro_ava = ""
If $pr_list[$i][1] = 0 Then
Else
$i_pr_wi = $i_pr_wi + 1
ReDim $pr_win_list[$i_pr_wi + 1][6]
$pro_ava = " -- PID "
$pr_win_list[$i_pr_wi][0] = $pr_list[$i][1]
$pr_win_list[$i_pr_wi][1] = $pr_list[$i][0]
$pr_win_list[$i_pr_wi][4] = $pr_win_list[$i_pr_wi][4] + 1
$pid_atg = $pid_atg + $pr_list[$i][1]
For $a = 1 To UBound($win_list) - 1
If WinGetProcess($win_list[$a][0]) = $pr_list[$i][1] Then
$win_ava = " -- WIN"
$pr_win_list[$i_pr_wi][2] = $win_list[$a][0]
$pr_win_list[$i_pr_wi][4] = $pr_win_list[$i_pr_wi][4] + 2
$pr_win_list[$i_pr_wi][5] = $win_list[$a][1]
ExitLoop
EndIf
Next
$pr_win_list[$i_pr_wi][3] = $pr_list[$i][0] & $win_ava & $pro_ava & $pr_list[$i][1]
GUICtrlSetData($g_prlist,$pr_win_list[$i_pr_wi][3])
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Next
For $i = 1 To UBound($win_list) - 1
$win_exi = 0
For $a = 1 To UBound($pr_win_list) - 1
If $win_list[$i][1] = $pr_win_list[$a][5] Then
$win_exi = 1
ExitLoop
Else
EndIf
Next
If $win_exi = 0 Then
For $a = 1 To UBound($pr_win_list) - 1
If WinGetProcess($win_list[$i][1]) = $pr_win_list[$a][0] And WinGetProcess($win_list[$i][1]) <> 0 Then
$win_exi = 1
ExitLoop
Else
EndIf
Next
EndIf
If $win_exi = 0 Then
$i_pr_wi = $i_pr_wi + 1
ReDim $pr_win_list[$i_pr_wi + 1][6]
$pr_win_list[$i_pr_wi][2] = $win_list[$i][0]
$pr_win_list[$i_pr_wi][4] = $pr_win_list[$i_pr_wi][4] + 4
$pr_win_list[$i_pr_wi][5] = $win_list[$i][1]
$pr_win_list[$i_pr_wi][3] = "No Process -- " & $pr_win_list[$i_pr_wi][2] & " -- HWnd " & $pr_win_list[$i_pr_wi][5]
GUICtrlSetData($g_prlist,$pr_win_list[$i_pr_wi][3])
EndIf
Next
$pid_atg = $pid_atg + $win_list[0][0]
;~ _ArrayDisplay($pr_win_list)
EndFunc
Func _AddProcess()
$pr_open = FileOpenDialog($title,"","Executable Files (*.exe;*.com;*.bat;.tif)")
If @error Then
Return
EndIf
$file_path = ""
$ar_filesplit = StringSplit($pr_open,"\")
$file_name = $ar_filesplit[$ar_filesplit[0]]
For $i = 1 To UBound($ar_filesplit) - 2
$file_path = $file_path & $ar_filesplit[$i] & "\"
Next
Run($file_name,$file_path)
EndFunc
Func _CloseProcess()
$g_prlist_index = _GUICtrlListGetCaretIndex($g_prlist)
If _GUICtrlListGetText($g_prlist,$g_prlist_index) = - 1 Then
Return
EndIf
$msgbox = MsgBox(266276,$title,"Are you sure that you want to close the process: " & _GUICtrlListGetText($g_prlist,$g_prlist_index) & " ?")
[/autoit] [autoit][/autoit] [autoit]If $msgbox = 7 Then
Else
For $i = 1 To UBound($pr_win_list) -1
If StringInStr(_GUICtrlListGetText($g_prlist,$g_prlist_index),$pr_win_list[$i][3]) Then
$pr_index = $i
EndIf
Next
If $pr_index = 0 Then Return MsgBox(0,$title,"Unexcepted Error!")
If $pr_win_list[$pr_index][4] = 4 Then
WinClose($pr_win_list[$pr_index][5])
EndIf
ProcessClose($pr_win_list[$pr_index][0])
EndIf
EndFunc
Func _ShowWin()
$win_index = 0
$g_prlist_index = _GUICtrlListGetCaretIndex($g_prlist)
For $i = 1 To UBound($pr_win_list) -1
If StringInStr(_GUICtrlListGetText($g_prlist,$g_prlist_index),$pr_win_list[$i][3]) Then
$win_index = $i
EndIf
Next
If $win_index = 0 Then Return MsgBox(0,$title,"Unexcepted Error!")
If $pr_win_list[$win_index][4] = 1 Then Return MsgBox(0,$title,"This Process don't have any Window")
WinSetState($pr_win_list[$win_index][5],"",@SW_SHOW)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _HideWin()
$win_index = 0
$g_prlist_index = _GUICtrlListGetCaretIndex($g_prlist)
For $i = 1 To UBound($pr_win_list) -1
If StringInStr(_GUICtrlListGetText($g_prlist,$g_prlist_index),$pr_win_list[$i][3]) Then
$win_index = $i
EndIf
Next
If $win_index = 0 Then Return MsgBox(0,$title,"Unexcepted Error!")
If $pr_win_list[$win_index][4] = 1 Then Return MsgBox(0,$title,"This Process don't have any Window")
WinSetState($pr_win_list[$win_index][5],"",@SW_HIDE)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _ChangeName()
$win_index = 0
$g_prlist_index = _GUICtrlListGetCaretIndex($g_prlist)
For $i = 1 To UBound($pr_win_list) -1
If StringInStr(_GUICtrlListGetText($g_prlist,$g_prlist_index),$pr_win_list[$i][3]) Then
$win_index = $i
EndIf
Next
If $win_index = 0 Then Return MsgBox(0,$title,"Unexcepted Error!")
If $pr_win_list[$win_index][4] = 1 Then Return MsgBox(0,$title,"This Process don't have any Window")
$input = InputBox($title,"Please enter a new name for the window" & @CRLF & $pr_win_list[$win_index][2],$pr_win_list[$win_index][2])
If @error Then Return
WinSetTitle($pr_win_list[$win_index][5],"",$input)
_Refresh(1)
EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _CloseTime()
$win_index = 0
$shutdown = 0
$g_prlist_index = _GUICtrlListGetCaretIndex($g_prlist)
For $i = 1 To UBound($pr_win_list) -1
If StringInStr(_GUICtrlListGetText($g_prlist,$g_prlist_index),$pr_win_list[$i][3]) Then
$win_index = $i
EndIf
Next
If $win_index = 0 Then Return MsgBox(0,$title,"Unexcepted Error!")
$inputtime = InputBox($title,"Please enter how many time to elapse for closing the process "& @CRLF & _GUICtrlListGetText($g_prlist,$g_prlist_index) & @CRLF & "(Hours:Minutes:Seconds)","00:00:00",Default,330,Default)
If @error Then Return
$requshut = MsgBox(266276,$title,"Do you want to automatically shut down the PC after count down?")
If $requshut = 6 Then $shutdown = 1
$time_split = StringSplit($inputtime,":")
If $time_split[0] <> 3 Then Return MsgBox(0,$title,"Invalid Value!")
If StringIsDigit($time_split[1]) = 0 Or StringIsDigit($time_split[2]) = 0 Or StringIsDigit($time_split[3]) = 0 ThenReturn MsgBox(0,$title,"Invalid Value!")
If $time_split[2] > 60 Or $time_split[3] > 60 Then Return MsgBox(0,$title,"Invalid Value!")
$time_inms = 0
$time_inms = $time_inms + $time_split[3] * 1000 + $time_split[2] * 60000 + $time_split[1] * 3600000
If $time_inms = 0 Then Return MsgBox(0,$title,"Invalid Value!")
$time_index = UBound($ar_time) - 1
ReDim $ar_time[UBound($ar_time) + 1][11]
For $i = 0 To 5
$ar_time[$time_index + 1][$i] = $pr_win_list[$win_index][$i]
Next
$ar_time[$time_index + 1][6] = $time_inms
$ar_time[$time_index + 1][7] = TimerInit() + $time_inms
$ar_time[$time_index + 1][8] = $shutdown
$ar_time[$time_index + 1][9] = 0
_TicksToTimeMod(_TimeToTicks(@HOUR,@MIN,@SEC) + $ar_time[$time_index + 1][6], $dis_day, $dis_hour, $dis_min, $dis_sec)
GUICtrlSetData($g_prcllist,$ar_time[$time_index + 1][3] & " Close at: " & $dis_day & " Day " & StringFormat("%02i:%02i:%02i", $dis_hour - $dis_day * 24,$dis_min,$dis_sec) )
$ar_time[$time_index + 1][10] = $dis_day & "|" & $dis_hour & "|" & $dis_min & "|" & $dis_sec
$ontop = 0
$dummy = TimerInit()
If UBound($ar_time) = 2 Then
$ar_time[$time_index + 1][9] = 1
$time_int = 1
Else
If $ar_time[$time_index +1][7] > $ar_time[$time_int][7] Then
;~ MsgBox(0,"halo",$time_int & "|" & $time_index + 1 )
Else
;~ MsgBox(0,"halo",$time_int & "|1" & $time_index + 1 )
$ar_time[$time_index +1][9] = 1
$ar_time[$time_int][9] = 0
$time_int = $time_index + 1
EndIf
EndIf
_ArrayDisplay($ar_time)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit]Func _TicksToTimeMod($iTicks,ByRef $iDays, ByRef $iHours, ByRef $iMins, ByRef $iSecs)
If Number($iTicks) > 0 Then
$iTicks = Round($iTicks / 1000)
$iHours = Int($iTicks / 3600)
$iTicks = Mod($iTicks, 3600)
$iMins = Int($iTicks / 60)
$iSecs = Round(Mod($iTicks, 60))
; If $iHours = 0 then $iHours = 24
$iDays = Int($iHours / 24)
Return 1
ElseIf Number($iTicks) = 0 Then
$iHours = 0
$iTicks = 0
$iMins = 0
$iSecs = 0
Return 1
Else
SetError(1)
Return 0
EndIf
EndFunc ;==>_TicksToTime
#endregion ~Functions
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]If $time_act = 0 Then
Else
EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Sleep(10)
WEnd
Das Problem liegt in den Zeilen 277 - 300
Mit freundlichen Gruß
~Mirage</date.au3></array.au3></guilist.au3></guiconstants.au3>