#Requires AutoHotkey v2.0 ; ---------------------按下Home开始登录洛奇账号------------------------- Home::{ ; ------------这部份是一个声明变量和定义变量以及给变量赋一个初始值的地方---- ; 声明本地变量并赋初始值 local PID := 0 local field1 := "" local field2 := "" ; 定义一个空数组 local PIDArray := [] ; 弹出一个输入框,让用户输入选择读取哪个文件,输入并将输入的值赋给 var2 var2 := InputBox("请选择要登录的批量账号:`n`n大号请输入:dh `n小号请输入:xh `n单独选号登录:输入任意键进入选号列表", "选择批量账号窗口", "") if var2.Result = "Cancel" { MsgBox "你刚刚选择了退出'" var2.Value "' 就是你点击了取消,代码退出。" return } ; 把输入的对象转换为字符串 var2 := var2.Value ; 判断如果输入的是dh或xh就将对应的文件拷贝一份并命名为id.txt,如果输入的是数字就清空id.txt文件,否则暂停代码 switch var2 { case "dh", "xh": ; 将 var2.txt 拷贝一份并命名为id.txt FileCopy "d:\lqtp\lqzh\" var2 ".txt", "d:\lqtp\lqzh\id.txt", 1 default: ; 调用自选账号函数,进入自选号界面 sidd() } ; ----------上面我们已经获得需要登录的id.txt了,下面开始登录过程,先启动对应数量的客户端------------- ; 删除原来的句柄 gb.txt 文件 ; FileDelete("D:\lqtp\lqzh\gb.txt") ; 打开ID.TXT文件 content := FileRead("D:\lqtp\lqzh\ID.txt") ; 去掉首尾空白 content := Trim(content, "`r`n") ; 按行分割内容 lines := StrSplit(content, "`n", "`r") ; 获取行数 lineCount := lines.Length ; 遍历每一行,有多少行就运行多少次 for index, line in lines { ; 获取当前行的内容 line := lines[index] ; 按照逗号分割成两个变量 fields := StrSplit(line, ",") field1 := fields[1] field2 := fields[2] ; 对密码字段里的特殊字符做处理 field2 := StrReplace(field2, "#", "{#}") ; 启动 洛奇的快捷方式,并把登录器窗口PID存到一个变量里 Run("D:\USERS\desktop\洛奇.lnk", "", "", &TCPID) ; 等待登录器启动完成,并获得进程的PID WinWaitActive("ahk_pid " TCPID) ; 等待登录器检查更新,大概6秒 sleep 6500 ; 激活登录器窗口到前台 WinActivate (WinTitle := "ahk_pid " TCPID) ; 移动鼠标到登录器窗口用户名位置 MouseMove 772, 164 ; 等待500毫秒 sleep 500 ; 点击用户名输入窗口 MouseClick "left" ; 等待500毫秒 sleep 500 ; 发送 field1 的值到登录窗口,就是账号 SendInput(field1) ; 等待 300 毫秒 Sleep 300 ; 发送 Tab 键 到登录窗口,光标向下跳 SendInput("{Tab}") ; 等待 300 毫秒 Sleep 300 ; 发送 field2 的值到登录窗口,就是密码 SendInput(field2) ; 显示一个暂停窗口,等待用户手动滑块验证完成 MsgBox "请手动验证滑块,完成点确定继续", "代码暂停……" ; 等待500毫秒 Sleep 500 ; 激活登录器窗口到前台 WinActivate (WinTitle := "ahk_pid " TCPID) ; 移动鼠标到登录器窗口用户名位置 MouseMove 784, 320 ; 等待500毫秒 sleep 500 ; 点击登录按钮 MouseClick "left" ; 等待游戏登录42秒 sleep 42000 ; 发送 回车 键 到登录窗口 SendInput("{Enter}") ; 等待游戏登录5秒 sleep 5000 ; 获取当前正激活的窗口的进程ID LastPID := WinGetPID("A") ; 通过PID获得这个窗口的唯一识别号 hwnd hwnd := WinExist("ahk_pid " LastPID) ; 把句柄转换成字符串 PIDStr := String(Number(LastPID)) ; 将句柄字符串存到文件中 FileAppend(PIDStr "`n", "D:\lqtp\lqzh\gb.txt") ; 在数组的当前元素末尾追加一个逗号和句柄字符串,并把结果存回数组中 lines[A_Index] .= "," PIDStr ; 等待数组添加完成 Sleep 800 ; 最小化窗口 WinMinimize("ahk_id " hwnd) ; 等待最小化完成 Sleep 1000 ;强行结束登录器程序 ProcessClose TCPID } ; 删除原来的 id.txt 文件 FileDelete("D:\lqtp\lqzh\ID.txt") ; 循环 lineCount 次 loop (lineCount) { ; 把数组的当前元素写入到新的 id.txt 文件中 FileAppend(lines[A_Index] . "`n", "D:\lqtp\lqzh\ID.txt") } ; 等待1秒让id.txt文件完全写入 Sleep 1000 MsgBox "所有代码已经运行完毕,请检查是否登录成功。" return } ; 定义自选账号列表部份为函数------------------------------------------- sidd() { ; 现在开始进入选择账号的阶段。选择账号之前先清空id.txt文件以保证每次选择都是最新的。 FileDelete("D:\lqtp\lqzh\id.txt") ; 读取 allid.txt 文件中的内容 allid := FileRead("D:\lqtp\lqzh\allid.txt") ; 将文件内容分割成一个数组 allidArray := StrSplit(allid, "`n") ; 定义一个字符串,用来存储 InputBox 中要显示的文本 inputText := "选择需要登录的账号,多个号以`.`来分隔,例如:[1.3.5]:`n`n" ; 循环遍历 allidArray 数组,将每个账号添加到 inputText 字符串中 For index, value in allidArray { ; 将账号和密码分割成一个数组 idpwArray := StrSplit(value, ",") ; 取出账号 id := idpwArray[1] ; 将账号添加到 inputText 字符串中 inputText .= index . "-" . id . " " ; 每 5 个账号换一行 if (Mod(index, 5) = 0) { inputText .= "`n`n" } } ; 使用 InputBox 来让用户输入一个或多个数字,代表要登录的账号,用逗号分隔 ip := InputBox(inputText, "账号列表", "W500 H300").Value ; 把用户输入的数字分割成一个数组 ipArray := StrSplit(ip, ".") ; 循环遍历用户输入的数字,根据数字,把对应的账号和密码写入到 id.txt 文件中 For index, value in ipArray { FileAppend(allidArray[value] . "`n", "D:\lqtp\lqzh\id.txt") } }