Public 隐藏窗体线程, 关闭窗体线程, 自动存储线程, 复制装备线程, 粘贴地址线程, 关闭提示线程 As System.Threading.Thread '定义一个新线程
Public Delegate Sub 要办的事(ByRef i As Int32)
Public 窗体透明度 = 1
Public lx As New LX.LX
Public dm As New Dm.dmsoft
Public 复制装备热键ID, 粘贴热键ID
Public 复制信息, 装备信息, 地址信息, 存储字数上限, 自动清空多少字, 自动存储间隔, 窗体隐藏速度
Public 复制次数 = 0
Public 装备地址 = "装备地址"
Public 按键次数 = 0
Public 文本 = ""
Public 线程锁 As Object = New Object '制作一个锁头, 注意 解锁以后其他线程才能进来执行!
Public 重复复制装备判断
Protected Overrides Sub WndProc(ByRef m As Message) '处理WINDOWS消息,触发事件
If m.Msg = 786 Then
If m.WParam.ToInt32 = 复制装备热键ID Then '如果触发的按键ID是对的则会
复制装备线程 = New System.Threading.Thread(AddressOf 复制装备)
复制装备线程.Start()
ElseIf m.WParam.ToInt32 = 粘贴热键ID Then
粘贴地址线程 = New System.Threading.Thread(AddressOf 粘贴地址)
粘贴地址线程.Start()
End If
End If
MyBase.WndProc(m) '这一句万万不能删!!
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lx.启动()
复制装备热键ID = lx.注册热键("Home", Handle, 1)
粘贴热键ID = lx.注册热键("Ins", Handle, 1)
dm.EnableKeypadMsg(0)
物品信息 = "./物品信息.txt"
参数设置 = "./参数设置.ini"
'vb.net 判断物品信息是否存在,IF存在返回1,不存在返回0
If System.IO.File.Exists(物品信息) Then
'存在
Else
'创建TXT物品信息并写入数据,是覆盖全部内容!!
IO.File.WriteAllText(物品信息, "")
End If
If System.IO.File.Exists(参数设置) Then
'存在
Else
'创建TXT物品信息并写入数据,是覆盖全部内容!!
IO.File.WriteAllText(参数设置, "")
End If
If dm.ReadIni("这里可以自定义一些参数", "存储字数上限", 参数设置) <> "" Then
存储字数上限 = Val(dm.ReadIni("这里可以自定义一些参数", "存储字数上限", 参数设置))
Else
存储字数上限 = 50000
dm.WriteIni("这里可以自定义一些参数", "存储字数上限", 存储字数上限, 参数设置)
End If
If dm.ReadIni("这里可以自定义一些参数", "自动清空多少字", 参数设置) <> "" Then
自动清空多少字 = Val(dm.ReadIni("这里可以自定义一些参数", "自动清空多少字", 参数设置))
Else
自动清空多少字 = 1000
dm.WriteIni("这里可以自定义一些参数", "自动清空多少字", 自动清空多少字, 参数设置)
End If
If dm.ReadIni("这里可以自定义一些参数", "自动存储间隔(毫秒)", 参数设置) <> "" Then
自动存储间隔 = Val(dm.ReadIni("这里可以自定义一些参数", "自动存储间隔(毫秒)", 参数设置))
Else
自动存储间隔 = 5000
dm.WriteIni("这里可以自定义一些参数", "自动存储间隔(毫秒)", 自动存储间隔, 参数设置)
End If
If dm.ReadIni("这里可以自定义一些参数", "窗体隐藏速度(越小越慢)", 参数设置) <> "" Then
窗体隐藏速度 = Val(dm.ReadIni("这里可以自定义一些参数", "窗体隐藏速度(越小越慢)", 参数设置))
Else
窗体隐藏速度 = 1
dm.WriteIni("这里可以自定义一些参数", "窗体隐藏速度(越小越慢)", 窗体隐藏速度, 参数设置)
End If
隐藏窗体线程 = New System.Threading.Thread(AddressOf 开头)
隐藏窗体线程.Start() '线程开始,这只是一个线程,无法重复开始!
文本 = My.Computer.FileSystem.ReadAllText(物品信息, System.Text.ASCIIEncoding.Default) '读取物品信息内容
自动存储线程 = New System.Threading.Thread(AddressOf 自动存储)
自动存储线程.Start()
End Sub
Sub 开头()
For i = 0 To 200 Step 1
Threading.Thread.Sleep(50)
Me.Invoke(New 要办的事(AddressOf 隐藏), 1)
Next
End Sub
Sub 隐藏()
窗体透明度 = 窗体透明度 - 窗体隐藏速度 / 100
Me.Opacity = 窗体透明度
If 窗体透明度 <= 0.4 Then
Me.Hide()
隐藏窗体线程.Abort()
End If
End Sub
Sub 判断按键关闭程序()
SyncLock 线程锁
For i = 0 To 5 Step 1
If 按键次数 >= 3 Then
关闭提示线程 = New System.Threading.Thread(AddressOf 关闭提示)
关闭提示线程.Start()
MsgBox("已关闭")
End If
Threading.Thread.Sleep(100)
If i >= 5 Then
按键次数 = 0
Exit For
End If
Next
End SyncLock
End Sub
Private Sub 网页市集助手_Click(sender As Object, e As EventArgs) Handles 网页市集助手.Click
MsgBox("按下 Home 键复制装备信息, " + vbCrLf + "再次按下时 复制网页地址, 或者按下Ins(全称Insert)粘贴对应装备的网页地址, " + vbCrLf + "快速按 4 次 Home 键关闭程序")
End Sub
Sub 关闭提示()
Threading.Thread.Sleep(500)
End
Me.Close()
End Sub
''' <summary>
''' 写入信息(内容, 0是装备1是地址)
''' </summary>
''' <param name="a"></param>
''' <param name="b"></param>
Sub 写入信息(a, b)
If b = 0 Then
装备信息 = a
If InStr(1, 文本, a) = 0 Then
文本 = 文本 + vbCrLf + a + "="
Else
'有装备信息,什么都不做
End If
ElseIf b = 1 Then
If InStr(1, 文本, 装备信息) = 0 Then
MsgBox("装备信息不存在")
Exit Sub
Else
文本 = Replace(文本, 装备信息 + "=", 装备信息 + "=" + 地址信息 + vbCrLf + vbCrLf)
End If
End If
End Sub
''' <summary>
''' 读取地址(装备信息)
''' </summary>
''' <param name="a"></param>
Sub 读取地址(a)
If InStr(1, 文本, a) = 0 Then
MsgBox("装备不存在")
Else
Try
'正常执行的语句....
Dim 装备前位置 = InStr(1, 文本, a)
Dim 等号位置 = InStr(装备前位置, 文本, "=")
Dim 回车位置 = InStr(等号位置, 文本, vbCrLf)
Dim 地址长度 = 回车位置 - 等号位置 - 1
If 地址长度 <= 3 Then
MsgBox("装备地址信息不存在")
复制次数 = 0
粘贴地址线程.Abort()
Exit Sub
End If
地址信息 = Mid(文本, 等号位置 + 1, 地址长度)
Catch
'如果上面出现错误,这里立即执行。
MsgBox("装备地址信息不存在")
复制次数 = 0
粘贴地址线程.Abort()
Exit Sub
End Try
End If
End Sub
Sub 自动存储()
For i = 0 To 1 Step 0
Threading.Thread.Sleep(自动存储间隔)
If Len(文本) >= 存储字数上限 Then
Dim 要清空的 = Mid(文本, 0, 自动清空多少字)
文本 = Replace(文本, 要清空的, "")
End If
My.Computer.FileSystem.WriteAllText(物品信息, 文本, False, System.Text.Encoding.Default) 'true为追加 flase 为覆盖
Next
End Sub
Sub 复制装备()
按键次数 += 1
关闭窗体线程 = New System.Threading.Thread(AddressOf 判断按键关闭程序)
关闭窗体线程.Start()
复制次数 += 1
If 复制次数 = 1 Then
dm.KeyDownChar("ctrl")
dm.KeyDownChar("c")
Threading.Thread.Sleep(20)
dm.KeyUpChar("ctrl")
dm.KeyUpChar("c")
Me.Invoke(New 要办的事(AddressOf 复制), 1)
Threading.Thread.Sleep(50)
重复复制装备判断 = 装备信息
If Len(装备信息) <= 70 Then
复制次数 = 0
MsgBox("请先复制物品信息")
Exit Sub
End If
Call 写入信息(装备信息, 0)
ElseIf 复制次数 = 2 Then
dm.LeftClick()
dm.KeyDownChar("ctrl")
dm.KeyDownChar("a")
Threading.Thread.Sleep(20)
dm.KeyUpChar("ctrl")
dm.KeyUpChar("a")
Threading.Thread.Sleep(50)
dm.KeyDownChar("ctrl")
dm.KeyDownChar("c")
Threading.Thread.Sleep(20)
dm.KeyUpChar("ctrl")
dm.KeyUpChar("c")
Threading.Thread.Sleep(50)
dm.KeyPressChar("esc")
Me.Invoke(New 要办的事(AddressOf 复制), 1)
Threading.Thread.Sleep(50)
If 地址信息 = 重复复制装备判断 Then
'MsgBox(装备信息)
复制次数 = 1
Exit Sub
End If
Call 写入信息(地址信息, 1)
复制次数 = 0
End If
End Sub
Sub 粘贴地址()
Call 读取地址(装备信息)
Me.Invoke(New 要办的事(AddressOf 粘贴), 1)
Threading.Thread.Sleep(50)
Sub 复制()
If 复制次数 = 1 Then
装备信息 = Clipboard.GetText()
ElseIf 复制次数 = 2 Then
地址信息 = Clipboard.GetText()
End If
End Sub
Sub 粘贴()
Clipboard.SetText(地址信息) ' 拷贝数据到粘贴板
End Sub