AutoIT多窗口创建,实现Scroll功能设想

#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-once
 
#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 <Constants.au3 >
#Include <WinAPI.au3>
#Include <WinAPIEx.au3>
 
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=c:\documents and settings\administrator\桌面\form_softinstall.kxf
$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

实现复选框全选功能




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值