堆积木——GBQ4.0设置“统一设置安装费用”中的“高层建筑增加费”

为什么我要写这么一个脚本?因为我有几十个签证和变更需要分别设置“安装费用”,我发现,一个个的点速度太慢了,于是脑袋一热,想着我为什么不写个脚本模拟按键来解决这重复的操作呢。

于是为了应付当前的工作,用VBScript写了一个简易的脚本,代码如下:

 1 Dim WshShell
 2 Set WshShell = CreateObject("WScript.Shell")
 3 
 4 Do
 5     WScript.Sleep 200
 6 Loop Until WshShell.AppActivate("统一设置安装费用")
 7 
 8 For k = 1 to 8
 9     If K <> 4 Then
10         '发送Enter键用于选择当前列表
11         WshShell.SendKeys "{Enter}"
12         WScript.Sleep 200
13 
14         '发送Alt+Down键用于打开下拉列表
15         WshShell.SendKeys "%{Down}"
16         WScript.Sleep 200
17 
18         '发送UP键10次,用于定位到第一个选项[无]
19         WshShell.SendKeys "{UP 10}"
20         WScript.Sleep 100
21 
22         '当前楼层数为33,根据列表中的选项,排在第9位
23         WshShell.SendKeys "{Down 9}"
24         WScript.Sleep 100
25 
26         '发送Enter键确认当前选项
27         WshShell.SendKeys "{Enter}"
28     End If
29 
30     '继续下一个专业
31     WshShell.SendKeys "{Down}"
32 Next
View Code

于是乎,我从重复的选择中解脱,也帮我提升了效率,下面请看对比

自己鼠标点选

堆积木——GBQ4.0设置“统一设置安装费用”中的“高层建筑增加费”_第1张图片

 用脚本辅助选择

堆积木——GBQ4.0设置“统一设置安装费用”中的“高层建筑增加费”_第2张图片

是不是有不一样的感觉。不过VBS脚本虽然方便,却也有一些缺点,比如,如果我打开“统一设置安装费用”的窗口,但是我并没有点击“高层建筑增加费”怎么办,或者某程序弹出消息,使得焦点不在当前窗口怎么办……

于是,我选择操起 AutoIt3 这家伙,我既可以方便的模拟鼠标点击,又可以方便的激活窗口。比起VBS,不说功能强大,至少方便些,不用我自己去造某些轮子(^_^)

用AutoIT重写脚本如下:

 1 #cs ----------------------------------------------------------------------------
 2 
 3  AutoIt Version: 3.3.14.5
 4  Author:         lnissi
 5 
 6  Script Function:
 7     Template AutoIt script.
 8 
 9 #ce ----------------------------------------------------------------------------
10 
11 ; Script Start - Add your code below here
12 
13 #include 
14 
15 Local $str_Title = "统一设置安装费用"
16 Local $Floor_Count = 61        ;此处设置实际工程楼层数
17 
18 ;列表中最大为60,即使点击更多,还是60
19 If $Floor_Count > 60 Then $Floor_Count = 60
20 
21 If WinExists($str_Title) = 0 Then
22    MsgBox($MB_OK + $MB_ICONWARNING, "温馨提示", "未找到【" & $str_Title & "】窗口")
23    Exit
24 EndIf
25 
26 ;激活窗口
27 WinActivate($str_Title)
28 WinSetState($str_Title, "", @SW_MAXIMIZE)
29 
30 ;点击高层建筑增加费
31 ControlClick($str_Title, "", "[CLASS:TGSPDBGrid; INSTANCE:2]", "left", 1, 150, 50)
32 ;点击规则说明
33 ControlClick($str_Title, "", "[CLASS:TGSPDBGrid; INSTANCE:1]", "left", 1, 330, 52)
34 
35 #cs
36    ;序号1,电气设备安装工程    从9层开始,递增3层,到60层;更多...
37    ;序号2,消防工程    从9层开始,递增3层,到60层,更多...
38    ;序号3,给排水、采暖、燃气工程    从9层开始,递增3层,到60层;更多...
39    ;序号4,通风空调工程    从36层开始,递增3层,到60层;从9层开始,递增3层,到33层;更多...
40    ;序号5,通信设备及线路工程    从9层开始,递增3层,到60层;更多...
41    ;序号6,建筑智能化系统设备安装工程    从9层开始,递增3层,到60层;更多...
42    ;序号7,安装节能工程-1安装节能电气工程    从9层开始,递增3层,到60层;更多...
43    ;序号8,安装节能工程-2安装节能给排水采暖工程    从9层开始,递增3层,到60层;更多...
44 #ce
45 
46 For $n = 1 to 8 Step 1
47 
48    ;初始化 $Count_Down 用于选择与实际楼层相匹配的列表
49    Local $Count_Down = 1
50 
51    Switch $n
52    Case 1 to 3, 5 to 8    ;除通风空调以外
53       #Region "计算需要 {DOWN} 多少次"
54       ;根据 $Floor_Count 中设置的楼层数,进行循环匹配
55       ;匹配成功就跳出循环,匹配不成功则 $Count_Down 累加
56       For $Floor_Num = 9 to 60 Step 3
57          If $Floor_Count <= $Floor_Num Then
58             ExitLoop
59          Else
60             $Count_Down += 1
61          EndIf
62       Next
63       #EndRegion
64    Case 4    ;通风空调工程
65       #Region "计算需要 {DOWN} 多少次"
66       ;第一次循环,条件满足,则跳出循环。否则累加 $Count_Down
67       For $Floor_Num = 36 to 60 Step 3
68          If $Floor_Count <= $Floor_Num And $Floor_Count > 33 Then
69             ExitLoop
70          Else
71             $Count_Down += 1
72          EndIf
73       Next
74       ;第二次循环,如果条件满足,继续累加 $Count_Down
75       If $Floor_Num <= 33 Then
76          For $Floor_Num = 9 to 33 Step 3
77             If $Floor_Count <= $Floor_Num Then
78                ExitLoop
79             Else
80                $Count_Down += 1
81             EndIf
82          Next
83       EndIf
84       #EndRegion
85    EndSwitch
86 
87    WinWaitActive($str_Title)    ;为避免列表选择时的窗口无法获得焦点,需激活窗口
88    ControlSend($str_Title, "", "[CLASS:TGSPDBGrid; INSTANCE:1]", "{F2}")
89    Send("!{DOWN}")    ;发送 ALT + DOWN ,使列表出现
90    Send("{UP 20}")    ;发送 UP 键 20 次,使当前选择的列表置顶[无]
91    ;根据计算得出的列表位置,选择与楼层数对应的列表
92    For $i = 1 to $Count_Down Step 1
93       Send("{DOWN}")
94    Next
95    Send("{ENTER}")
96    Send("{DOWN}")    ;选择下一个工程类别
97 Next
View Code

 

转载于:https://www.cnblogs.com/lnissi/p/11326685.html

你可能感兴趣的:(堆积木——GBQ4.0设置“统一设置安装费用”中的“高层建筑增加费”)