#cs ____________________________________
#cs ____________________________________
Au3 版本: 3.3.6.1
脚本作者: wozijisunfly
Email:
QQ/TM: Test Dept.
脚本版本: v-2.0
脚本功能: 实现meter工具自动化脚本
#ce _______________脚本开始_________________
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiIPAddress.au3>
#include <StructureConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
Opt('MustDeclareVars', 1)
Opt("GUICloseOnESC", 0)
Global $server_num=1,$client_num=1,$server[1000][9],$client[1000][16],$a_server[9],$a_client[16]
_create_gui()
Func _create_gui()
Local $msg,$gui,$sub_gui,$search_btn,$TXT_label,$TXT_input,$version_btn
Local $path,$search,$file,$arr,$mark=0,$num,$execute,$server_path,$client_path
Local $list_label[1000],$list_check[1000],$list_sbtn[1000],$list_cbtn[1000],$list_input[1000]
Dim $btn[1000],$list[1000]
$gui = GUICreate("Auto-Meter-List", @DesktopWidth, @DesktopHeight-60, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_SIZEBOX,$WS_MAXIMIZEBOX))
GUISetBkColor(0x88AABB)
$TXT_label = GUICtrlCreateLabel("请输入TXT包所在的路径:",20,350,310,30)
GUICtrlSetBkColor(-1,0xd71345)
GUICtrlSetColor(-1,0xf58f98)
GUICtrlSetFont(-1,20)
GUICtrlSetResizing($TXT_label,$GUI_DOCKALL + $GUI_DOCKHEIGHT + $GUI_DOCKSIZE)
$TXT_input = GUICtrlCreateInput("D:\WorkSpace\meter-tool",20,390,850,30)
GUICtrlSetFont(-1,20)
GUICtrlSetResizing($TXT_input,$GUI_DOCKALL + $GUI_DOCKHEIGHT + $GUI_DOCKSIZE)
$search_btn = GUICtrlCreateButton("查找",880,390,80,30)
GUICtrlSetFont(-1,12)
GUICtrlSetResizing($search_btn,$GUI_DOCKALL + $GUI_DOCKHEIGHT + $GUI_DOCKSIZE)
$version_btn = GUICtrlCreateLabel("Version : v-2.0",@DesktopWidth/2 - 100,@DesktopHeight - 200,200,30)
GUICtrlSetBkColor(-1,0xd71345)
GUICtrlSetColor(-1,0xf58f98)
GUICtrlSetFont(-1,20)
GUICtrlSetResizing($version_btn, $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKSIZE)
;~ GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $search_btn
$path = StringStripWS(GUICtrlRead($TXT_input),8)
If Not StringInStr(FileGetAttrib($path),"D") Then
MsgBox(0,"WRONG","输入的路径不存在或不是一个目录。")
ContinueLoop
EndIf
; 显示当前目录中所有文件的文件名
$search = FileFindFirstFile($path & "\*")
; 检查搜索是否成功
If $search = -1 Then
MsgBox(0, "WRONG", "没有文件/目录匹配搜索")
Exit
EndIf
$num = 0
While 1
$file = FileFindNextFile($search)
If @error Then ExitLoop
$arr = StringSplit($file,".")
If $arr[0] >= 2 Then
If StringCompare(StringUpper($arr[$arr[0]]),"TXT") == 0 Then
$list[$num] = $file
$num = $num + 1
$mark = 1
Else
ContinueLoop
EndIf
EndIf
WEnd
; 关闭搜索句柄
FileClose($search)
If $mark <> 1 Then Return
GUICtrlDelete($TXT_label)
GUICtrlDelete($TXT_input)
GUICtrlDelete($search_btn)
GUICtrlDelete($version_btn)
$sub_gui = GUICreate("Child GUI", @DesktopWidth - 10, @DesktopHeight - 120, 1, 50, $WS_CHILD, $WS_EX_CLIENTEDGE, $gui)
;GUISetBkColor(0X006400)
GUISetBkColor(0x98F5FF)
GUICtrlSetResizing($sub_gui,$GUI_DOCKALL + $GUI_DOCKHEIGHT + $GUI_DOCKSIZE + $GUI_DOCKAUTO)
GUICtrlCreateLabel("编号",10,10,50)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("名称",300,10,50)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("是否执行",530,10,75)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Server-conf",610,10,100)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Client-conf",750,10,100)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("循环次数",890,10,70)
GUICtrlSetFont(-1,12)
GUISetState()
For $i = 0 To $num - 1
GUICtrlCreateLabel($i+1,13,50+$i*50)
GUICtrlSetFont(-1,12)
$arr = StringSplit($list[$i],"-")
$list_label[$i] = GUICtrlCreateLabel($arr[1],50,50+$i*50,420)
GUICtrlSetFont(-1,12)
GUICtrlSetTip(-1,$path & "\" & $list[$i])
GUICtrlSetFont(-1,12)
$list_check[$i] = GUICtrlCreateCheckbox("",550,50+$i*50,20,20)
GUICtrlSetFont(-1,12)
$list_sbtn[$i] = GUICtrlCreateButton("Server-conf",600,50+$i*50,100)
GUICtrlSetFont(-1,12)
$list_cbtn[$i] = GUICtrlCreateButton("Client-conf",740,50+$i*50,100)
GUICtrlSetFont(-1,12)
$list_input[$i] = GUICtrlCreateInput("",890,50+$i*50,50)
GUICtrlSetFont(-1,12)
Next
$execute = GUICtrlCreateButton("执行",660,60 + $i * 50,80)
GUICtrlSetResizing($sub_gui,$GUI_DOCKALL)
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
_GUIScrollBars_Init($sub_gui,0,10 * $num / 3)
While 1
$msg = GUIGetMsg()
For $i = 0 To $num - 1
If $msg = $list_sbtn[$i] Then
_server_gui($path,$list[$i])
ElseIf $msg = $list_cbtn[$i] Then
_client_gui($path,$list[$i])
ElseIf $msg = $execute Then
$mark = 0
For $i = 0 To $num - 1
If BitAND(GUICtrlRead($list_check[$i]),$GUI_CHECKED) == $GUI_CHECKED Then
$mark = 1
$server_path=$path & "\config\server_" & StringReplace(StringUpper($list[$i]),".TXT",".conf")
$client_path=$path & "\config\client_" & StringReplace(StringUpper($list[$i]),".TXT",".conf")
_execute_now($server_path,$client_path)
Else
ContinueLoop
EndIf
Next
If $mark == 0 Then
MsgBox(0,"INFO","没有选中所需执行的用例,请选择后再次执行。")
ContinueLoop
EndIf
ElseIf $msg = $GUI_EVENT_CLOSE Then
Exit
EndIf
Next
WEnd
GUISwitch($gui)
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
EndFunc
;~ 执行选中的用例
Func _execute_now($server_path,$client_path)
Local $mark1,$mark2="",$file,$line,$s_num = 1,$c_num = 1,$s[9],$c[16],$i,$soc_cli,$main_socket
Dim $arr
If FileExists($server_path) And FileExists($client_path) Then
$file = FileOpen($server_path, 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "ERROR", "不能打开 " & $server_path & " 文件。")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line,"<server>",1) == 1 Then
ContinueLoop
EndIf
If StringInStr($line,"</server>",1) == 1 Then
If $s_num == 10 Then
ExitLoop
Else
MsgBox(0,"WRONG",$server_path&"配置文件不正确,请检查。")
Return
EndIf
EndIf
$arr = StringSplit($line,"=>",1)
Switch $arr[1]
Case "meter_server"
$s[0]=$arr[2]
$s_num = $s_num + 1
Case "listen_port"
$s[1]=$arr[2]
$s_num = $s_num + 1
Case "simulate_client_ip"
$s[2]=$arr[2]
$s_num = $s_num + 1
Case "simulate_client_port"
$s[3]=$arr[2]
$s_num = $s_num + 1
Case "simulate_server_ip"
$s[4]=$arr[2]
$s_num = $s_num + 1
Case "simulate_server_port"
$s[5]=$arr[2]
$s_num = $s_num + 1
Case "sequence"
$s[6]=$arr[2]
$s_num = $s_num + 1
Case "TXTfile"
$s[7]=$arr[2]
$s_num = $s_num + 1
Case "os"
$s[8]=$arr[2]
$s_num = $s_num + 1
Case Else
MsgBox(0,"WRONG","无法识别的字符" & $arr[1])
EndSwitch
Wend
FileClose($file)
$file = FileOpen($client_path, 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "ERROR", "不能打开 " & $client_path & " 文件。")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line,"<client>",1) == 1 Then
ContinueLoop
EndIf
If StringInStr($line,"</client>",1) == 1 Then
If $c_num == 17 Then
ExitLoop
Else
MsgBox(0,"WRONG",$client_path & "配置文件不正确,请检查。")
Return
EndIf
EndIf
$arr = StringSplit($line,"=>",1)
Switch $arr[1]
Case "meter_client"
$c[0]=$arr[2]
$c_num = $c_num + 1
Case "socket_client"
$c[1]=$arr[2]
$c_num = $c_num + 1
Case "server_ip"
$c[2]=$arr[2]
$c_num = $c_num + 1
Case "server_port"
$c[3]=$arr[2]
$c_num = $c_num + 1
Case "listen_port"
$c[4]=$arr[2]
$c_num = $c_num + 1
Case "simulate_client_ip"
$c[5]=$arr[2]
$c_num = $c_num + 1
Case "simulate_client_port"
$c[6]=$arr[2]
$c_num = $c_num + 1
Case "simulate_server_ip"
$c[7]=$arr[2]
$c_num = $c_num + 1
Case "simulate_server_port"
$c[8]=$arr[2]
$c_num = $c_num + 1
Case "simulate_client_count"
$c[9]=$arr[2]
$c_num = $c_num + 1
Case "connect_per_sec"
$c[10]=$arr[2]
$c_num = $c_num + 1
Case "loop_count"
$c[11]=$arr[2]
$c_num = $c_num + 1
Case "sequence"
$c[12]=$arr[2]
$c_num = $c_num + 1
Case "think_time"
$c[13]=$arr[2]
$c_num = $c_num + 1
Case "run_time"
$c[14]=$arr[2]
$c_num = $c_num + 1
Case "TXTfile"
$c[15]=$arr[2]
$c_num = $c_num + 1
Case Else
MsgBox(0,"WRONG","无法识别的字符" & $arr[1])
EndSwitch
Wend
FileClose($file)
;~ server端所在的操作系统是Windows还是Linux时,对其操作是有区别的
;~ 此处应添加一个判断(最好是在Server-Config页面添加),具体为服务器端所在的操作系统类型Windows/Linux
$soc_cli = $c[1] & " "& $c[2] & "#" & $c[3] & "#"
TCPStartup()
$main_socket = TCPConnect($c[2], $c[3])
If $main_socket = -1 Then
MsgBox(0,"WRONG","服务器端的Socket-Server服务器没有开启,请开启IP:"&$c[2] & "=Port:" & $c[3] &"后执行。")
TCPCloseSocket($main_socket)
TCPShutdown()
Return
EndIf
If StringCompare($s[8], "Windows") == 0 Then
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""rd /S /Q C:\__meter_server""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""mkdir C:\__meter_server""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "sendfile["& $s[0] &",C:\__meter_server\meter_server]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "sendfile["& $s[7] &",C:\__meter_server\meter_need.TXT]", "", Default)
Run(@ComSpec & " /c " & $soc_cli & "cmd[""C:\__meter_server\meter_server "& $s[1] & " " & $s[2] & " " & $s[3] & " " & $s[4] & " " & $s[5] & " " & $s[6] & "" & " C:\__meter_server\meter_need.TXT &""]", "", Default)
RunWait(@ComSpec & " /c " & $c[0] & " " & $c[2] & " " & $c[4] & " " & $c[5] & " " & $c[6] & " " & $c[7] & " " & $c[8] & " " & $c[9] & " " & $c[10] & " " & $c[11] & " " & $c[12] & " " & $c[13] & " " & $c[14] & " " & $c[15] & " ", "", @SW_MAXIMIZE)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""TASKKILL /IM meter_server""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""rd /S /Q C:\__meter_server""]", "", Default)
ElseIf StringCompare($s[8], "Linux") == 0 Then
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""rm -rf /home/__meter_server""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""mkdir /home/__meter_server""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "sendfile["& $s[0] &",/home/__meter_server/meter_server]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "sendfile["& $s[7] &",/home/__meter_server/meter_need.TXT]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""chmod 777 /home/__meter_server/*""]", "", Default)
Run(@ComSpec & " /c " & $soc_cli & "cmd[""cd /home/__meter_server;./meter_server "& $s[1] & " " & $s[2] & " " & $s[3] & " " & $s[4] & " " & $s[5] & " " & $s[6] & "" & " /home/__meter_server/meter_need.TXT &""]", "", Default)
RunWait(@ComSpec & " /c " & $c[0] & " " & $c[2] & " " & $c[4] & " " & $c[5] & " " & $c[6] & " " & $c[7] & " " & $c[8] & " " & $c[9] & " " & $c[10] & " " & $c[11] & " " & $c[12] & " " & $c[13] & " " & $c[14] & " " & $c[15] & " ", "", @SW_MAXIMIZE)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""kill `ps -ef | grep meter_server | grep -v grep | awk '{print $2}'`""]", "", Default)
RunWait(@ComSpec & " /c " & $soc_cli & "cmd[""rm -rf /home/__meter_server""]", "", Default)
Else
MsgBox(0,"ERROR","有病毒入侵了?程序将在5秒后自动退出。",5)
Exit
EndIf
Else
MsgBox(0,"WRONG","当前目录下缺少没有配置Server-Config或者Client-Config,程序无法正常执行。" & _
@CRLF & @CRLF & "请先配置后再执行。",5)
EndIf
EndFunc
;~ 检查文件是否存在
Func _check_file($path)
Local $attr
If FileExists($path) Then
$attr = FileGetAttrib($path)
If StringInStr($attr,"N") Or StringInStr($attr,"C") Or StringInStr($attr,"O") Or StringInStr($attr,"A") Then
Return "yes"
Else
Return "no"
EndIf
Else
Return "no"
EndIf
EndFunc
;~ 创建客户端界面
Func _client_gui($path,$name)
Local $client_gui,$meter_client,$socket_client,$listen_port,$simulate_client_ip,$c_msg,$close_btn,$submit_btn
Local $simulate_client_port,$simulate_server_ip,$simulate_server_port,$sequence,$TXTfile,$reset_btn,$return
Local $simulate_client_count,$connect_per_sec,$loop_count,$think_time,$run_time,$server_ip,$server_port,$all_name
Local $file,$line,$c_num = 1
Dim $arr
If Not FileExists($path & "\config\") Then
DirCreate ($path & "\config\")
EndIf
$name = StringReplace (StringUpper($name),".TXT",".conf")
$all_name = $path & "\config\client_" & $name
$client_gui = GUICreate("Client-Config",500,600,Default,Default)
;~ GUISetStyle(BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), BitOR($WS_EX_CLIENTEDGE, $WS_EX_TOOLWINDOW), $client_gui)
GUICtrlCreateLabel("Meter-Client-Path :",20,20,134,Default)
GUICtrlSetFont(-1,11)
$meter_client = GUICtrlCreateInput("",155,17,315,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Socket-Client-Path:",20,80,130,Default)
GUICtrlSetFont(-1,11)
$socket_client = GUICtrlCreateInput("",155,77,315,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Server_IP:",20,120,120,Default)
GUICtrlSetFont(-1,12)
$server_ip = _GUICtrlIpAddress_Create($client_gui, 155, 118,145)
_GUICtrlIpAddress_SetFont($server_ip,Default,14)
GUICtrlCreateLabel("Server-Port:",310,120,97,Default)
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlSetFont(-1,12)
$server_port = GUICtrlCreateInput("",410,118,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Listen-Port:",155,160,100,Default)
GUICtrlSetBkColor(-1, 0x00ff00)
GUICtrlSetFont(-1,12)
$listen_port = GUICtrlCreateInput("",260,158,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Simulate_Client_IP:",20,200,150,Default)
GUICtrlSetFont(-1,12)
$simulate_client_ip = _GUICtrlIpAddress_Create($client_gui, 175, 198,145)
_GUICtrlIpAddress_SetFont($simulate_client_ip,Default,14)
GUICtrlCreateLabel("Port:",360,200,60,Default)
GUICtrlSetFont(-1,12)
$simulate_client_port = GUICtrlCreateInput("",410,198,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Simulate_Server_IP:",20,260,150,Default)
GUICtrlSetFont(-1,12)
$simulate_server_ip = _GUICtrlIpAddress_Create($client_gui, 175, 258,145)
_GUICtrlIpAddress_SetFont($simulate_server_ip,Default,14)
GUICtrlCreateLabel("Port:",360,260,60,Default)
GUICtrlSetFont(-1,12)
$simulate_server_port = GUICtrlCreateInput("",410,258,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Simulate_Client_Count:",20,320,175,Default)
GUICtrlSetFont(-1,12)
;这个值的范围待商榷
$simulate_client_count = GUICtrlCreateInput("",200,317,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Connect_Per_Sec:",270,320,130,Default)
GUICtrlSetFont(-1,12)
$connect_per_sec = GUICtrlCreateInput("",410,317,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Loop_Count:",20,380,85,Default)
GUICtrlSetFont(-1,12)
$loop_count = GUICtrlCreateInput("",110,377,50,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Loop_Start_Sequence:",170,380,160,Default)
GUICtrlSetFont(-1,12)
$sequence = GUICtrlCreateInput("",340,377,130,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Think_Time(ms):",20,440,120,Default)
GUICtrlSetFont(-1,12)
$think_time = GUICtrlCreateInput("",170,437,50,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,4)
GUICtrlCreateLabel("Run_Time(sec):",270,440,110,Default)
GUICtrlSetFont(-1,12)
$run_time = GUICtrlCreateInput("",410,437,60,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("TXTFile :",20,500,100,Default)
GUICtrlSetFont(-1,12)
$TXTfile = GUICtrlCreateInput("",155,497,315,25)
GUICtrlSetFont(-1,12)
If FileExists($all_name) Then
$file = FileOpen($all_name, 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "ERROR", "不能打开 " & $all_name & " 文件。")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line,"<client>",1) == 1 Then
ContinueLoop
EndIf
If StringInStr($line,"</client>",1) == 1 Then
If $c_num == 17 Then
ExitLoop
Else
MsgBox(0,"WRONG",$all_name & "配置文件不正确,请检查。")
Return
EndIf
EndIf
$arr = StringSplit($line,"=>",1)
Switch $arr[1]
Case "meter_client"
GUICtrlSetData($meter_client,$arr[2])
$c_num = $c_num + 1
Case "socket_client"
GUICtrlSetData($socket_client,$arr[2])
$c_num = $c_num + 1
Case "server_ip"
_GUICtrlIpAddress_Set($server_ip,$arr[2])
$c_num = $c_num + 1
Case "server_port"
GUICtrlSetData($server_port,$arr[2])
$c_num = $c_num + 1
Case "listen_port"
GUICtrlSetData($listen_port,$arr[2])
$c_num = $c_num + 1
Case "simulate_client_ip"
_GUICtrlIpAddress_Set($simulate_client_ip,$arr[2])
$c_num = $c_num + 1
Case "simulate_client_port"
GUICtrlSetData($simulate_client_port,$arr[2])
$c_num = $c_num + 1
Case "simulate_server_ip"
_GUICtrlIpAddress_Set($simulate_server_ip,$arr[2])
$c_num = $c_num + 1
Case "simulate_server_port"
GUICtrlSetData($simulate_server_port,$arr[2])
$c_num = $c_num + 1
Case "simulate_client_count"
GUICtrlSetData($simulate_client_count,$arr[2])
$c_num = $c_num + 1
Case "connect_per_sec"
GUICtrlSetData($connect_per_sec,$arr[2])
$c_num = $c_num + 1
Case "loop_count"
GUICtrlSetData($loop_count,$arr[2])
$c_num = $c_num + 1
Case "sequence"
GUICtrlSetData($sequence,$arr[2])
$c_num = $c_num + 1
Case "think_time"
GUICtrlSetData($think_time,$arr[2])
$c_num = $c_num + 1
Case "run_time"
GUICtrlSetData($run_time,$arr[2])
$c_num = $c_num + 1
Case "TXTfile"
GUICtrlSetData($TXTfile,$arr[2])
$c_num = $c_num + 1
Case Else
MsgBox(0,"WRONG","无法识别的字符" & $arr[1])
EndSwitch
Wend
FileClose($file)
EndIf
$submit_btn = GUICtrlCreateButton("Submit",200,540,70,30)
GUICtrlSetFont(-1,12)
$reset_btn = GUICtrlCreateButton("Reset",300,540,70,30)
GUICtrlSetFont(-1,12)
$close_btn = GUICtrlCreateButton("Close",400,540,70,30)
GUICtrlSetFont(-1,12)
GUISetState()
While 1
$c_msg = GUIGetMsg()
Select
Case $c_msg = $submit_btn
If StringCompare(_check_file(GUICtrlRead($meter_client)),"yes") == 0 Then
$a_client[0] = GUICtrlRead($meter_client)
ElseIf StringCompare(_check_file(GUICtrlRead($meter_client)),"no") == 0 Then
MsgBox(0,"WRONG","给定的Meter-Client-Path路径下,没有对应的文件,请确认")
ContinueLoop
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If StringCompare(_check_file(GUICtrlRead($socket_client)),"yes") == 0 Then
$a_client[1] = GUICtrlRead($socket_client)
ElseIf StringCompare(_check_file(GUICtrlRead($socket_client)),"no") == 0 Then
MsgBox(0,"WRONG","给定的Socket-Client-Path路径下,没有对应的文件,请确认")
ContinueLoop
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If StringCompare(StringStripWS(_GUICtrlIpAddress_Get($server_ip),8),"0.0.0.0") == 0 Or StringLen(StringStripWS(_GUICtrlIpAddress_Get($server_ip),8)) == 7 Then
MsgBox(0,"WRONG","给出的Server-IP不应为" & _GUICtrlIpAddress_Get($server_ip) & "请重置")
ContinueLoop
Else
$a_client[2] = StringStripWS(_GUICtrlIpAddress_Get($server_ip),8)
EndIf
If StringRegExp(GUICtrlRead($server_port),"^[1-9][0-9]{0,}",0) Then
$a_client[3] = GUICtrlRead($server_port)
Else
MsgBox(0,"WRONG","请对Server-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($listen_port),"^[1-9][0-9]{0,}",0) Then
$a_client[4] = GUICtrlRead($listen_port)
Else
MsgBox(0,"WRONG","请对Listen-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8),"0.0.0.0") == 0 Or StringLen(StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8)) == 7 Then
MsgBox(0,"WRONG","给出的Simulate-Client-IP不应为" & _GUICtrlIpAddress_Get($simulate_client_ip) & "请重置")
ContinueLoop
Else
$a_client[5] = StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8)
EndIf
If StringRegExp(GUICtrlRead($simulate_client_port),"^[1-9][0-9]{0,}",0) Then
$a_client[6] = GUICtrlRead($simulate_client_port)
Else
MsgBox(0,"WRONG","请对Simulate-Client-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8),"0.0.0.0") == 0 Or StringLen(StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8)) == 7 Then
MsgBox(0,"WRONG","给出的Simulate-Server-IP不应为" & _GUICtrlIpAddress_Get($simulate_server_ip) & "请重置")
ContinueLoop
Else
$a_client[7] = StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8)
EndIf
If StringRegExp(GUICtrlRead($simulate_server_port),"^[1-9][0-9]{0,}",0) Then
$a_client[8] = GUICtrlRead($simulate_server_port)
Else
MsgBox(0,"WRONG","请对Simulate-Server-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($simulate_client_count),"^[1-9][0-9]{0,}",0) Then
$a_client[9] = GUICtrlRead($simulate_client_count)
Else
MsgBox(0,"WRONG","请对Simulate_Client_Count输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($connect_per_sec),"^[1-9][0-9]{0,}",0) Then
$a_client[10] = GUICtrlRead($connect_per_sec)
Else
MsgBox(0,"WRONG","请对Connect_Per_Sec输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($loop_count),"^[1-9][0-9]{0,}",0) Then
$a_client[11] = GUICtrlRead($loop_count)
Else
MsgBox(0,"WRONG","请对Loop_Count输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($sequence),"^[1-9][0-9]{0,}",0) Then
$a_client[12] = GUICtrlRead($sequence)
Else
MsgBox(0,"WRONG","请对Loop_Start_Sequence输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($think_time),"^[1-9][0-9]{0,}",0) Then
$a_client[13] = GUICtrlRead($think_time)
Else
MsgBox(0,"WRONG","请对Think_Time(ms)输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($run_time),"^[1-9][0-9]{0,}",0) Then
$a_client[14] = GUICtrlRead($run_time)
Else
MsgBox(0,"WRONG","请对Run_Time(sec)输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(_check_file(GUICtrlRead($TXTfile)),"yes") == 0 Then
$a_client[15] = GUICtrlRead($TXTfile)
ElseIf StringCompare(_check_file(GUICtrlRead($TXTfile)),"no") == 0 Then
MsgBox(0,"WRONG","给定的TXTFile路径下,没有对应的文件,请确认")
ContinueLoop
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If FileExists($all_name) Then
FileDelete($all_name)
EndIf
;~ 写入配置数据
FileWriteLine($all_name,"<client>")
FileWriteLine($all_name,"meter_client=>" & GUICtrlRead($meter_client))
FileWriteLine($all_name,"socket_client=>" & GUICtrlRead($socket_client))
FileWriteLine($all_name,"server_ip=>" & _GUICtrlIpAddress_Get($server_ip))
FileWriteLine($all_name,"server_port=>" & GUICtrlRead($server_port))
FileWriteLine($all_name,"listen_port=>" & GUICtrlRead($listen_port))
FileWriteLine($all_name,"simulate_client_ip=>" & _GUICtrlIpAddress_Get($simulate_client_ip))
FileWriteLine($all_name,"simulate_client_port=>" & GUICtrlRead($simulate_client_port))
FileWriteLine($all_name,"simulate_server_ip=>" & _GUICtrlIpAddress_Get($simulate_server_ip))
FileWriteLine($all_name,"simulate_server_port=>" & GUICtrlRead($simulate_server_port))
FileWriteLine($all_name,"simulate_client_count=>" & GUICtrlRead($simulate_client_count))
FileWriteLine($all_name,"connect_per_sec=>" & GUICtrlRead($connect_per_sec))
FileWriteLine($all_name,"loop_count=>" & GUICtrlRead($loop_count))
FileWriteLine($all_name,"sequence=>" & GUICtrlRead($sequence))
FileWriteLine($all_name,"think_time=>" & GUICtrlRead($think_time))
FileWriteLine($all_name,"run_time=>" & GUICtrlRead($run_time))
FileWriteLine($all_name,"TXTfile=>" & GUICtrlRead($TXTfile))
FileWriteLine($all_name,"</client>")
MsgBox(0,"SUCCESS","添加Client端数据成功",3)
Case $c_msg = $reset_btn
GUICtrlSetData($meter_client,"")
GUICtrlSetData($socket_client,"")
_GUICtrlIpAddress_Destroy($server_ip)
$server_ip = _GUICtrlIpAddress_Create($client_gui, 155, 118,145)
_GUICtrlIpAddress_SetFont($server_ip,Default,14)
GUICtrlSetData($server_port,"")
GUICtrlSetData($listen_port,"")
_GUICtrlIpAddress_Destroy($simulate_client_ip)
$simulate_client_ip = _GUICtrlIpAddress_Create($client_gui, 175, 198,145)
_GUICtrlIpAddress_SetFont($simulate_client_ip,Default,14)
GUICtrlSetData($simulate_client_port,"")
_GUICtrlIpAddress_Destroy($simulate_server_ip)
$simulate_server_ip = _GUICtrlIpAddress_Create($client_gui, 175, 258,145)
_GUICtrlIpAddress_SetFont($simulate_server_ip,Default,14)
GUICtrlSetData($simulate_server_port,"")
GUICtrlSetData($simulate_client_count,"")
GUICtrlSetData($connect_per_sec,"")
GUICtrlSetData($loop_count,"")
GUICtrlSetData($sequence,"")
GUICtrlSetData($think_time,"")
GUICtrlSetData($run_time,"")
GUICtrlSetData($TXTfile,"")
Case $c_msg = $close_btn
ExitLoop
Case $c_msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd
GUIDelete($client_gui)
EndFunc
;~ 创建服务端界面
Func _server_gui($path,$name)
Local $server_gui,$s_msg,$close_btn,$meter_server,$listen_port,$simulate_client_ip,$reset_btn
Local $simulate_client_port,$simulate_server_ip,$simulate_server_port,$sequence,$TXTfile,$submit_btn,$return
Local $file,$line,$s_num = 1
Local $win,$lin,$all_name
Dim $arr
If Not FileExists($path & "\config\") Then
DirCreate ($path & "\config\")
EndIf
$name = StringReplace (StringUpper($name),".TXT",".conf")
$all_name = $path & "\config\server_" & $name
$server_gui = GUICreate("Server-Config",500,480,Default,Default)
GUICtrlCreateLabel("Meter-Server-Path :",20,20,134,Default)
GUICtrlSetFont(-1,11)
$meter_server = GUICtrlCreateInput("",155,17,315,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("Listen-Port:",155,80,100,Default)
GUICtrlSetBkColor(-1,"0x00ff00")
GUICtrlSetFont(-1,12)
$listen_port = GUICtrlCreateInput("",260,77,75,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Simulate_Client_IP:",20,140,150,Default)
GUICtrlSetFont(-1,12)
$simulate_client_ip = _GUICtrlIpAddress_Create($server_gui, 175, 138,145)
_GUICtrlIpAddress_SetFont($simulate_client_ip,Default,14)
GUICtrlCreateLabel("Port:",360,140,60,Default)
GUICtrlSetFont(-1,12)
$simulate_client_port = GUICtrlCreateInput("",410,138,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Simulate_Server_IP:",20,200,150,Default)
GUICtrlSetFont(-1,12)
$simulate_server_ip = _GUICtrlIpAddress_Create($server_gui, 175, 198,145)
_GUICtrlIpAddress_SetFont($simulate_server_ip,Default,14)
GUICtrlCreateLabel("Port:",360,200,60,Default)
GUICtrlSetFont(-1,12)
$simulate_server_port = GUICtrlCreateInput("",410,198,60,25)
GUICtrlSetFont(-1,12)
GUICtrlSetLimit(-1,5)
GUICtrlCreateLabel("Loop_Start_Sequence:",80,260,160,Default)
GUICtrlSetFont(-1,12)
$sequence = GUICtrlCreateInput("",250,257,150,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateLabel("TXTFile :",20,320,100,Default)
GUICtrlSetFont(-1,12)
$TXTfile = GUICtrlCreateInput("",155,317,315,25)
GUICtrlSetFont(-1,12)
GUICtrlCreateGroup("Meter-Server所在操作系统(OS)",120,355,250,45)
$win = GUICtrlCreateRadio("Windows",150,375,100)
GUICtrlSetFont(-1,12)
$lin = GUICtrlCreateRadio("Linux",270,375,80)
GUICtrlSetFont(-1,12)
GUICtrlSetState($lin, $GUI_CHECKED)
If FileExists($all_name) Then
$file = FileOpen($all_name, 0)
; 检查打开的文件是否可读
If $file = -1 Then
MsgBox(0, "ERROR", "不能打开 " & $all_name & " 文件。")
Exit
EndIf
; 每次读取一行文本,直到文件结束.
While 1
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
If StringInStr($line,"<server>",1) == 1 Then
ContinueLoop
EndIf
If StringInStr($line,"</server>",1) == 1 Then
If $s_num == 10 Then
ExitLoop
Else
MsgBox(0,"WRONG",$all_name & "配置文件不正确,请检查。")
Return
EndIf
EndIf
$arr = StringSplit($line,"=>",1)
Switch $arr[1]
Case "meter_server"
GUICtrlSetData($meter_server,$arr[2])
$s_num = $s_num + 1
Case "listen_port"
GUICtrlSetData($listen_port,$arr[2])
$s_num = $s_num + 1
Case "simulate_client_ip"
_GUICtrlIpAddress_Set($simulate_client_ip,$arr[2])
$s_num = $s_num + 1
Case "simulate_client_port"
GUICtrlSetData($simulate_client_port,$arr[2])
$s_num = $s_num + 1
Case "simulate_server_ip"
_GUICtrlIpAddress_Set($simulate_server_ip,$arr[2])
$s_num = $s_num + 1
Case "simulate_server_port"
GUICtrlSetData($simulate_server_port,$arr[2])
$s_num = $s_num + 1
Case "sequence"
GUICtrlSetData($sequence,$arr[2])
$s_num = $s_num + 1
Case "TXTfile"
GUICtrlSetData($TXTfile,$arr[2])
$s_num = $s_num + 1
Case "os"
If StringCompare($arr[2],"Windows")==0 Then
GUICtrlSetState($win,$GUI_CHECKED)
ElseIf StringCompare($arr[2],"Linux")==0 Then
GUICtrlSetState($lin,$GUI_CHECKED)
EndIf
$s_num = $s_num + 1
Case Else
MsgBox(0,"WRONG","无法识别的字符" & $arr[1])
EndSwitch
Wend
FileClose($file)
EndIf
$submit_btn = GUICtrlCreateButton("Submit",200,420,70,30)
GUICtrlSetFont(-1,12)
$reset_btn = GUICtrlCreateButton("Reset",300,420,70,30)
GUICtrlSetFont(-1,12)
$close_btn = GUICtrlCreateButton("Close",400,420,70,30)
GUICtrlSetFont(-1,12)
GUISetState()
While 1
$s_msg = GUIGetMsg()
Select
Case $s_msg = $submit_btn
If StringCompare(_check_file(GUICtrlRead($meter_server)),"yes") == 0 Then
$a_server[0] = GUICtrlRead($meter_server)
ElseIf StringCompare(_check_file(GUICtrlRead($meter_server)),"no") == 0 Then
MsgBox(0,"WRONG","给定的Meter-Server-Path路径下,没有对应的文件,请确认")
ContinueLoop
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If StringRegExp(GUICtrlRead($listen_port),"^[1-9][0-9]{0,}",0) Then
$a_server[1] = GUICtrlRead($listen_port)
Else
MsgBox(0,"WRONG","请对Listen-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8),"0.0.0.0") == 0 Or StringLen(StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8)) == 7 Then
MsgBox(0,"WRONG","给出的Simulate-Client-IP不应为" & _GUICtrlIpAddress_Get($simulate_client_ip) & "请重置")
ContinueLoop
Else
$a_server[2] = StringStripWS(_GUICtrlIpAddress_Get($simulate_client_ip),8)
EndIf
If StringRegExp(GUICtrlRead($simulate_client_port),"^[1-9][0-9]{0,}",0) Then
$a_server[3] = GUICtrlRead($simulate_client_port)
Else
MsgBox(0,"WRONG","请对Simulate-Client-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8),"0.0.0.0") == 0 Or StringLen(StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8)) == 7 Then
MsgBox(0,"WRONG","给出的Simulate-Server-IP不应为" & _GUICtrlIpAddress_Get($simulate_server_ip) & "请重置")
ContinueLoop
Else
$a_server[4] = StringStripWS(_GUICtrlIpAddress_Get($simulate_server_ip),8)
EndIf
If StringRegExp(GUICtrlRead($simulate_server_port),"^[1-9][0-9]{0,}",0) Then
$a_server[5] = GUICtrlRead($simulate_server_port)
Else
MsgBox(0,"WRONG","请对Simulate-Server-Port输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringRegExp(GUICtrlRead($sequence),"^[1-9][0-9]{0,}",0) Then
$a_server[6] = GUICtrlRead($sequence)
Else
MsgBox(0,"WRONG","请对Loop_Start_Sequence输入首字母不为0的数字。")
ContinueLoop
EndIf
If StringCompare(_check_file(GUICtrlRead($TXTfile)),"yes") == 0 Then
$a_server[7] = GUICtrlRead($TXTfile)
ElseIf StringCompare(_check_file(GUICtrlRead($TXTfile)),"no") == 0 Then
MsgBox(0,"WRONG","给定的TXTFile路径下,没有对应的文件,请确认")
ContinueLoop
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If BitAND(GUICtrlRead($win), $GUI_CHECKED) = $GUI_CHECKED Then
$a_server[8] = "Windows"
ElseIf BitAND(GUICtrlRead($lin), $GUI_CHECKED) = $GUI_CHECKED Then
$a_server[8] = "Linux"
Else
MsgBox(0,"ERROR","机器已被病毒入侵,5秒后将关闭程序。",5)
Exit
EndIf
If FileExists($all_name) Then
FileDelete($all_name)
EndIf
;~ 写入配置数据
FileWriteLine($all_name,"<server>")
FileWriteLine($all_name,"meter_server=>" & GUICtrlRead($meter_server))
FileWriteLine($all_name,"listen_port=>" & GUICtrlRead($listen_port))
FileWriteLine($all_name,"simulate_client_ip=>" & _GUICtrlIpAddress_Get($simulate_client_ip))
FileWriteLine($all_name,"simulate_client_port=>" & GUICtrlRead($simulate_client_port))
FileWriteLine($all_name,"simulate_server_ip=>" & _GUICtrlIpAddress_Get($simulate_server_ip))
FileWriteLine($all_name,"simulate_server_port=>" & GUICtrlRead($simulate_server_port))
FileWriteLine($all_name,"sequence=>" & GUICtrlRead($sequence))
FileWriteLine($all_name,"TXTfile=>" & GUICtrlRead($TXTfile))
If BitAND(GUICtrlRead($win), $GUI_CHECKED) = $GUI_CHECKED Then
FileWriteLine($all_name,"os=>Windows")
EndIf
If BitAND(GUICtrlRead($lin), $GUI_CHECKED) = $GUI_CHECKED Then
FileWriteLine($all_name,"os=>Linux")
EndIf
FileWriteLine($all_name,"</server>")
MsgBox(0,"SUCCESS","添加Server端数据成功",3)
Case $s_msg = $reset_btn
GUICtrlSetData($meter_server,"")
GUICtrlSetData($listen_port,"")
_GUICtrlIpAddress_Destroy($simulate_client_ip)
$simulate_client_ip = _GUICtrlIpAddress_Create($server_gui, 175, 138,145)
_GUICtrlIpAddress_SetFont($simulate_client_ip,Default,14)
GUICtrlSetData($simulate_client_port,"")
_GUICtrlIpAddress_Destroy($simulate_server_ip)
$simulate_server_ip = _GUICtrlIpAddress_Create($server_gui, 175, 198,145)
_GUICtrlIpAddress_SetFont($simulate_server_ip,Default,14)
GUICtrlSetData($simulate_server_port,"")
GUICtrlSetData($sequence,"")
GUICtrlSetData($TXTfile,"")
Case $s_msg = $close_btn
ExitLoop
Case $s_msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd
GUIDelete($server_gui)
EndFunc
;~ 设置Windows窗口的大小
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $wParam
Local $index = -1, $yChar, $xChar, $xClientMax, $xClient, $yClient, $ivMax
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$xClientMax = $aSB_WindowInfo[$index][1]
$xChar = $aSB_WindowInfo[$index][2]
$yChar = $aSB_WindowInfo[$index][3]
$ivMax = $aSB_WindowInfo[$index][7]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
; Retrieve the dimensions of the client area.
$xClient = BitAND($lParam, 0x0000FFFF)
$yClient = BitShift($lParam, 16)
$aSB_WindowInfo[$index][4] = $xClient
$aSB_WindowInfo[$index][5] = $yClient
; Set the vertical scrolling range and page size
DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
DllStructSetData($tSCROLLINFO, "nMin", 0)
DllStructSetData($tSCROLLINFO, "nMax", $ivMax)
DllStructSetData($tSCROLLINFO, "nPage", $yClient / $yChar)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
; Set the horizontal scrolling range and page size
DllStructSetData($tSCROLLINFO, "fMask", BitOR($SIF_RANGE, $SIF_PAGE))
DllStructSetData($tSCROLLINFO, "nMin", 0)
DllStructSetData($tSCROLLINFO, "nMax", 2 + $xClientMax / $xChar)
DllStructSetData($tSCROLLINFO, "nPage", $xClient / $xChar)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZE
;~ 设置横向滚动条
Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $xChar, $xPos
Local $Min, $Max, $Page, $Pos, $TrackPos
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$xChar = $aSB_WindowInfo[$index][2]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
;~ ; Get all the horizontal scroll bar information
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
; Save the position for comparison later on
$xPos = DllStructGetData($tSCROLLINFO, "nPos")
$Pos = $xPos
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
#forceref $Min, $Max
Switch $nScrollCode
Case $SB_LINELEFT ; user clicked left arrow
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
Case $SB_LINERIGHT ; user clicked right arrow
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
Case $SB_THUMBTRACK ; user dragged the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch
;~ // Set the position and then retrieve it. Due to adjustments
;~ // by Windows it may not be the same as the value set.
DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
;// If the position has changed, scroll the window and update it
$Pos = DllStructGetData($tSCROLLINFO, "nPos")
If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_HSCROLL
;~ 设置纵向滚动条
Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $wParam, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $yChar, $yPos
Local $Min, $Max, $Page, $Pos, $TrackPos
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index][3]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
; Get all the vertial scroll bar information
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
; Save the position for comparison later on
$yPos = DllStructGetData($tSCROLLINFO, "nPos")
$Pos = $yPos
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
Switch $nScrollCode
Case $SB_TOP ; user clicked the HOME keyboard key
DllStructSetData($tSCROLLINFO, "nPos", $Min)
Case $SB_BOTTOM ; user clicked the END keyboard key
DllStructSetData($tSCROLLINFO, "nPos", $Max)
Case $SB_LINEUP ; user clicked the top arrow
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
Case $SB_LINEDOWN ; user clicked the bottom arrow
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
Case $SB_THUMBTRACK ; user dragged the scroll box
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch
;~ // Set the position and then retrieve it. Due to adjustments
;~ // by Windows it may not be the same as the value set.
DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
;// If the position has changed, scroll the window and update it
$Pos = DllStructGetData($tSCROLLINFO, "nPos")
If ($Pos <> $yPos) Then
_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
$yPos = $Pos
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_VSCROLL
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("仓位核查", 920, 345, 277, 113)
$list = GUICtrlCreateListView("品种|多单|空单|净头寸", 16, 72, 433, 257)
$Button1 = GUICtrlCreateButton("当前持仓", 96, 16, 89, 25)
$Button2 = GUICtrlCreateButton("Button2", 232, 16, 75, 25)
GUISetState(@SW_SHOW)
Local $flag_Interrupt = 0 ;设置中断标志
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND") ;截获WM_COMMAND消息以处理
Do
$msg = GUIGetMsg()
If $msg = $Button1 Then
$flag_Interrupt = 0
Do
GUICtrlCreateListViewItem("IF|10|-1|9", $list)
Sleep(50)
Until $flag_Interrupt
ElseIf $msg = $Button2 Then
MsgBox(0, 0, "Interrupted!")
EndIf
Until $msg = $GUI_EVENT_CLOSE
Func WM_COMMAND($hWnd, $msg, $wParam, $lParam)
#forceref $hWnd, $Msg
$LoWord = BitAND($wParam, 0x0000FFFF)
If $LoWord = $Button2 Then $flag_Interrupt = 1
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form_SoftInstall = GUICreate("Soft_Name", 552, 393, 193, 131)
GUISetBkColor(0xC0C0C0)
$Pic1 = GUICtrlCreatePic("C:\WINDOWS\Web\Wallpaper\bliss.jpg", 0, 0, 551, 92)
$Group_ChooseSoft = GUICtrlCreateGroup(" 选择软件: ", 8, 96, 537, 245, -1, $WS_EX_TRANSPARENT)
$Checkbox1 = GUICtrlCreateCheckbox("软件1", 64, 136, 193, 33)
$Checkbox2 = GUICtrlCreateCheckbox("软件2", 64, 193, 193, 33)
$Checkbox3 = GUICtrlCreateCheckbox("软件3", 64, 243, 193, 33)
$Checkbox4 = GUICtrlCreateCheckbox("软件4", 64, 308, 193, 17)
$Checkbox5 = GUICtrlCreateCheckbox("软件5", 336, 144, 193, 17)
$Checkbox6 = GUICtrlCreateCheckbox("软件6", 336, 199, 193, 17)
$Checkbox7 = GUICtrlCreateCheckbox("软件7", 336, 253, 193, 17)
$Checkbox8 = GUICtrlCreateCheckbox("软件8", 336, 308, 193, 17)
$Icon2 = GUICtrlCreateIcon("", -1, 24, 195, 25, 25)
$Icon1 = GUICtrlCreateIcon("", -1, 24, 140, 25, 25)
$Icon3 = GUICtrlCreateIcon("", -1, 24, 249, 25, 25)
$Icon4 = GUICtrlCreateIcon("", -1, 24, 304, 25, 25)
$Icon5 = GUICtrlCreateIcon("", -1, 296, 140, 25, 25)
$Icon6 = GUICtrlCreateIcon("", -1, 296, 195, 25, 25)
$Icon7 = GUICtrlCreateIcon("", -1, 296, 249, 25, 25)
$Icon8 = GUICtrlCreateIcon("", -1, 296, 304, 25, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("安装", 352, 360, 75, 25)
$Button2 = GUICtrlCreateButton("退 出", 440, 360, 75, 25)
$Radio1 = GUICtrlCreateRadio("全选", 216, 364, 57, 17)
$Radio2 = GUICtrlCreateRadio("全不选", 280, 364, 65, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Radio1
SetAllCheckBox(True)
Case $Radio2
SetAllCheckBox(False)
EndSwitch
WEnd
Func SetAllCheckBox($status)
$childWndArray = _WinAPI_EnumChildWindows($Form_SoftInstall)
If IsArray($childWndArray) Then
If $status Then
For $i=1 To $childWndArray[0][0]
If $childWndArray[$i][1] = "Button" Then
$btnStyle = _WinAPI_GetWindowLong($childWndArray[$i][0], $GWL_STYLE)
If BitAND($btnStyle, $BS_AUTOCHECKBOX) = $BS_AUTOCHECKBOX Then
_SendMessage($childWndArray[$i][0], $BM_SETCHECK, $BST_CHECKED)
EndIf
EndIf
Next
Else
For $i=1 To $childWndArray[0][0]
If $childWndArray[$i][1] = "Button" Then
$btnStyle = _WinAPI_GetWindowLong($childWndArray[$i][0], $GWL_STYLE)
If BitAND($btnStyle, $BS_AUTOCHECKBOX) = $BS_AUTOCHECKBOX Then
_SendMessage($childWndArray[$i][0], $BM_SETCHECK, $BST_UNCHECKED)
EndIf
EndIf
Next
EndIf
EndIf
EndFunc