3个回答
展开全部
这个是我6级考试的题目,多开记事本,并控制记事本暂停与继续
//编写一个多线程控制记事本的多开程序,线程运行时,会在记事本窗口中不停的模拟按下a键;可以通过特定的操作来结束一条线程的执行,这部分操作要在注释中说明。
//假设打开4个记事本
Dim Hwnd, Key, 信息, 返回, a, b, 已停止线程集
Global HwndEx
Dim 线程()
Const 记事本数量 = 4'设置的记事本数量
Redim Preserve 线程(记事本数量 - 1)
For i = 0 To 记事本数量-1
RunApp "notepad.exe"
Delay 500 '等待程序打开
Hwnd = Plugin.Window.Find("Notepad", 0)'窗口句柄
HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)'客户区句柄
Call Plugin.Window.Move(Hwnd, 50 * i, 100 * i)
Delay 200
Call Plugin.Window.Size(Hwnd, 500, 300)
Delay 200
线程ID = BeginThread(记事本线程)
线程(i) = 线程ID
TracePrint "线程" & i & " ID= " & 线程ID
Next
MessageBox "你可以按[End]键来设置各窗口的运行状态"
Do
//等待按[End]键呼出输入框
//在输入框中输入相对应的编号+状态,就能做出对应的操作.
//编号: 窗口从左上到右下的顺序排列,第1个窗口编号为1,第2个窗口编号为2,...依次类推
//状态: 0表示停止,1表示暂停,2表示继续.
//如输入1+0,那么第1个窗口线程被停止,
//如输入3+1,那么第3个窗口线程被暂停,之后可以按[End]在输入框中输入3+2来继续运行第3个窗口线程.
Key = WaitKey()
If Key = 35 Then
信息 = "编号: 记事本窗口从左上到右下的顺序排列," & vbcr & " 左上第一个窗口编号为1,依次类推." & vbcr & vbcr
信息 = 信息 & "状态: 0表示停止,1表示暂停,2表示继续." & vbcr & vbcr
信息 = 信息 & "输入格式:编号+状态" & vbcr & vbcr & "比如我要暂停第2个记事本,那么输入2+1" & vbcr
返回 = split(InputBox(信息, "线程操作"), "+")
'TracePrint "返回值" & UBound(返回)
If UBound(返回) = 1 Then
a = CInt(返回(0)) : b = CInt(返回(1))
'TracePrint a & " " & b
If 1 <= a and a <= 记事本数量 Then
For i = 0 To 记事本数量 - 1
If i + 1 = a Then
'TracePrint 线程(i)
If InStr(已停止线程集, 线程(i)) > 0 Then
MessageBox "记事本窗口" & i + 1 & " 线程ID=" & 线程(i) & "已经停止." & vbcr & vbcr & "你无法对已停止的线程进行操作!"
Else
Select Case b
Case 0
StopThread 线程(i)
MessageBox "记事本窗口" & i + 1 & "已经停止! 线程ID=" & 线程(i)
已停止线程集 = 已停止线程集 & 线程(i)
Case 1
PauseThread 线程(i)
MessageBox "记事本窗口" & i + 1 & "已经暂停! 线程ID=" & 线程(i)
Case 2
ContinueThread 线程(i)
MessageBox "记事本窗口" & i + 1 & "已经继续运行! 线程ID=" & 线程(i)
Case Else
MessageBox"你输入的[状态]不正确,无法生效"
End Select
End If
End If
Next
Else
MessageBox"你输入的[编号]不正确,无法生效"
End If
ElseIf 返回 = - 1 Then
Else
MessageBox "你输入格式不正确,无法生效" & vbcr & vbcr & "格式:编号+状态"
End If
End If
Delay 100
Loop
Sub 记事本线程()
'TracePrint HwndEx
Hwnd1=HwndEx
Do
Delay 1000
Call Plugin.Bkgnd.KeyPress(Hwnd1, 65)'按a
Loop
End Sub
Sub OnScriptExit()
Hwndg = Plugin.Window.SearchEx("Notepad",0,0)
TracePrint Hwndg
fg = split(Hwndg, "|")
For i = 0 To UBound(fg) - 1
Call Plugin.Window.Close(fg(i))
Next
MessageBox "脚本已经停止!"
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按键精灵可以实行,多个窗口运行。
追问
你在说废话吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询