被折腾了一把按键精灵

需求

线上有台Windows服务器,上面跑了一个第三方C/S架构的程序。因为这个程序比较矫情,经常与这第三方的通信中断,然后就得手动重启。而重启之后报错几率很大,反复登录得消耗很长时间。所以别人提到是不是可以用按键精灵自动完成输密码登录的操作。当时觉得还是有点为难的,因为输密码那个地方,屏蔽了很多自动输入的方式,不过好在最后找到了解决办法,算是弄出来了。

不过现在这代码断开远程桌面之后就执行不了了,算是一个弊端,而且刚接触手写按键精灵的代码,基本上写的很面向过程,哈哈。想起来高中那几年,要是当初能把按键精灵研究好,当时玩天龙八部也不至于那么乏味枯燥吧。下面直接上码。

Show the Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//初始化屏幕分辨率
sx = Plugin.Sys.GetScRX()
sy = Plugin.Sys.GetScRY()

//设置定时器
Rem Loop1
Do
NowTime = Time
//TracePrint NowTime
SWTime = "02:30" //这里是定时时间
If Hour(SWTime) = Hour(NowTime) and Minute(SWTime) = Minute(NowTime) Then
Exit Do
End If
Loop

LogStart "C:\reboot_v3.log"
TracePrint "-------"
TracePrint "程序开始"
Call Login()
FindPic sx / 2, sy / 2, sx, sy, "Attachment:\2.bmp", 0.8, int4M, int4N //检查是否登录成功
TracePrint "任务栏登陆成功图片 X轴坐标" & int4M
TracePrint "任务栏登陆成功图片 Y轴坐标" & int4N
Delay 100
While int4M < 0 and int4N < 0
TracePrint "看来得重新登陆一遍"
Call Lib.系统.结束进程("进程名")
Delay 2000
RunApp "应用程序完整路径"
Delay 5000
Call 子程序2()
Delay 600
Call 子程序3()
FindPic sx / 2, sy / 2, sx, sy, "Attachment:\2.bmp", 0.8, int4M, int4N
Delay 1000
TracePrint "继续检查是否登录成功"
Delay 100
TracePrint "任务栏登陆成功图片 X轴坐标" & int4M
TracePrint "任务栏登陆成功图片 Y轴坐标" & int4N
Wend
TracePrint "登陆成功,执行完毕"
TracePrint "等待下一次执行"
TracePrint "-------"
LogStop
Goto Loop1

Sub Login()
Call 子程序1()
Delay 1000
Call 子程序2()
Delay 600
Call 子程序3()
End Sub

//启动应用程序
Sub 子程序1()
FindPic 0, 0, sx, sy, "Attachment:\1.bmp", 0.9, intX, intY
If intX < 0 And intY < 0 Then
TracePrint "远程桌面似乎已关闭,终止运行"
LogStop
EndScript
End If
Hwnd = Plugin.Window.Find(0, "应用窗口名")
Delay 2000
Call Plugin.Window.Close(Hwnd)
Delay 2000
RunApp "应用程序完整路径"
TracePrint "开始子程序1,应用程序已启动"
End Sub

//点击调出登陆按钮
Sub 子程序2()
TracePrint "开始子程序2,调出登陆框"
Delay 1000
/*
这段代码不重要,不提了
*/
Delay 400
End If
End Sub

//输入密码并回车
Sub 子程序3()
TracePrint "开始子程序3,输入密码并登陆"
Delay 1000
FindPic 0, 0, sx, sy, "Attachment:\4.bmp", 0.9, int3X, int3Y
TracePrint "输入框X轴坐标" & int3X
TracePrint "输入框Y轴坐标" & int3Y
Delay 100
If int3X > 0 And int3Y > 0 Then
MoveTo int3X+110, int3Y+8
Delay 2000
LeftClick 1
Call Lib.键盘.KeyList("我是账号",0,20)
Delay 100
KeyPress "Tab",1
Delay 2000
Call Lib.键盘.KeyList("我是密码",0,30)
Delay 1000
KeyPress "Tab",1
Delay 2000
KeyPress "Enter", 1
TracePrint "登陆等待"
TracePrint Time
Delay 400000 //程序登录缓慢,设置一个延时时间等待响应
TracePrint Time
End If
End Sub