教你写页游自动化Python脚本 1.界面篇(模仿某键精灵)[Python3]

 自学py写的第一个脚本
本教程为新手向废话少说,下面开始教程
我们先用tkinter搭建好脚本的基本界面
首先导入tkinter,需要事先用pip安装进python里(方法自行百度)
  1. import tkinter as tk
  2. #入口,这行代码需要一直都待在脚本的最底下
  3. #设置字典
  4. hwnd_title = dict()
  5. init_window()
  6. def init_window():
  7. global cs,wd
  8. wd = tk.Tk()
  9. cs = tk.Canvas(wd,
  10. width = 800,
  11. height = 500,
  12. bg = 'white')
  13. wd.minsize(800, 500) # 最小尺寸
  14. wd.maxsize(800, 500)#最大尺寸,使最大化失效
  15. wd.title('DDTHelper')
  16. #设置背景图片,最好是800*500和png格式的
  17. pic = tk.PhotoImage(file="pic.png")
  18. cs.create_image(400,250,image = pic)
  19. cs.pack()
  20. bt = tk.Button(wd,
  21. text='初始化',
  22. bg=('white'),
  23. font=('微软雅黑',20),
  24. width=155,
  25. height=48,
  26. command=BT_onCreat)
  27. bt.pack()
  28. cs.create_window(530,70,
  29. width=155,
  30. height=48,
  31. window=bt)
  32. wd.mainloop()
  33. def BT_onCreat():
  34. print("初始化。。。")

 (不过在图片上叠加控件其实有更好的方案,使控件的背景为透明的,但是那篇文章的代码运行不来)
运行效果

教你写页游自动化Python脚本 1.界面篇(模仿某键精灵)[Python3]-度崩网-几度崩溃

现在我们为点击  初始化  按钮添加一些事项
让他在被点击的时候识别当前的游戏窗口
(因为我用的是36jb大厅登录的游戏,抓取句柄的时候可以根据他的title来区别游戏窗口)
这里我偷了个懒,利用该登录器游戏窗口的title来获取

教你写页游自动化Python脚本 1.界面篇(模仿某键精灵)[Python3]-度崩网-几度崩溃

更改上面的导入库

  1. import win32com.client as wc,win32gui as wg,threading as xc,time,tkinter as tk,win32api as wa,win32con as wn
 更改上面的 BT_onCreat()方法
  1. def BT_onCreat():
  2. global is_run,Znum,t1,t2,t3
  3. Znum = 0#当前已经登陆的游戏账号数量
  4. wg.EnumWindows(get_all_hwnd, 0)
  5. #根据title里包含的 4399 来提取游戏窗口
  6. for h,t in hwnd_title.items():
  7. if "4399" in t:
  8. hwnd = t.split("|")[3]
  9. name = t.split("|")[2]
  10. print("账号:" + name + "句柄:" + hwnd)
  11. Znum = Znum + 1
  12. hwnd = int(hwnd)#将句柄转化为int,因为句柄是从标题获取的string,导致了类型错误,我就是被这个坑了好久。。
  13. if Znum==1:#为每一个游戏界面创建一个单独的操作线程,为了方便用global传递,没有用exec
  14. t1 = xc.Thread(target=Con,args=(hwnd,name,Znum))
  15. elif Znum==2:
  16. t2 = xc.Thread(target=Con,args=(hwnd,name,Znum))
  17. elif Znum==3:
  18. t3 = xc.Thread(target=Con,args=(hwnd,name,Znum))
  19. init_control(Znum,name)
再添加几个方法进去
获取句柄用的
  1. def get_all_hwnd(hwnd,mouse):
  2. if wg.IsWindow(hwnd) and wg.IsWindowEnabled(hwnd) and wg.IsWindowVisible(hwnd):
  3. hwnd_title.update({hwnd:wg.GetWindowText(hwnd)})
 为每一个线程创建一个对应的控件来控制线程的运行
  1. def init_control(Znum,name):
  2. global cs,wd,v1,v2,v3,tx1,t2,tx2,t3,tx3,txn1,txn2,txn3
  3. if Znum==1:
  4. v1=tk.IntVar()
  5. tx1=tk.StringVar()
  6. txn1=tk.StringVar()
  7. elif Znum==2:
  8. v2=tk.IntVar()
  9. tx2=tk.StringVar()
  10. txn2=tk.StringVar()
  11. elif Znum==3:
  12. v3=tk.IntVar()
  13. tx3=tk.StringVar()
  14. txn3=tk.StringVar()
  15. exec('tx{}.set("未运行")'.format(Znum))
  16. exec('lb{} = tk.Label(wd,text="{}',bg=("#ffffff"),font=("微软雅黑",20))'.format(Znum,name))
  17. exec('lbn{} = tk.Label(wd,textvariable=txn{},bg=("#ffffff"),font=("微软雅黑",10))'.format(Znum,Znum))
  18. exec('cb{} = tk.Checkbutton(wd,textvariable=tx{},bg=("#ffffff"),font=("微软雅黑",10),variable = v{}, height=5,width = 0,command=BT_onRun{})'.format(Znum,Znum,Znum,Znum))
  19. exec('cb{}.pack()'.format(Znum))
  20. exec('lb{}.pack()'.format(Znum))
  21. exec('lbn{}.pack()'.format(Znum))
  22. Ytmp=Znum*100
  23. Ytmp=Ytmp+70
  24. exec('cs.create_window(630,{},width=0,height=0,window=lb{})'.format(Ytmp,Znum))
  25. Ytmp=Ytmp+40
  26. exec('cs.create_window(630,{},width=35,height=25,window=lbn{})'.format(Ytmp,Znum))
  27. exec('cs.create_window(710,{},width=70,height=25,window=cb{})'.format(Ytmp,Znum))
 线程方法
  1. def Con(hwnd,name,xc):
  2. print("启动成功")
  3. 多选框点击事件
  4. def BT_onRun1():
  5. global v1,tx1,t1,ct1
  6. if v1.get()==1:#判断是否被选中
  7. ct1=0
  8. tx1.set('正运行')
  9. t1.start()
  10. else:
  11. ct1=1#用来控制线程终止
  12. tx1.set('未运行')
  13. def BT_onRun2():
  14. global v2,tx2,ct2
  15. if v2.get()==1:#判断是否被选中
  16. ct2=0
  17. tx2.set('正运行')
  18. t2.start()
  19. else:
  20. ct2 = 1
  21. tx2.set('未运行')
  22. def BT_onRun3():
  23. global v3,tx3,ct3
  24. if v3.get()==1:#判断是否被选中
  25. ct3=0
  26. tx3.set('正运行')
  27. t3.start()
  28. else:
  29. ct3=1
  30. tx3.set('未运行')

 运行后,点击初始化的效果

教你写页游自动化Python脚本 1.界面篇(模仿某键精灵)[Python3]-度崩网-几度崩溃

可以看到,当只有一个游戏窗口的时候,脚本就自动识别出了该游戏窗口。(目前最多识别3个,且不能二次点击初始化,否则会报错。听说用exce动态封装线程时可以用dict来接收,而目前二次识别也有了大致方案)并在勾选  未运行  旁边的   框框  时,运行对应的线程。接下来就要到脚本的线程模块了,而有过py基础的人都知道,py的线程是没有stopThread的
但我们将要实现如何控制脚本执行游戏操作的线程,让它收放自如
下篇见

国外源码

Academy v4.2 - PHP在线学习 付费课程系统[国外源码]

2020-10-21 23:14:31

游戏源码

[端游] 神魔传奇单机版服务端 比较新颖的版本画面精致

2021-6-11 7:36:34

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
3 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
  1. 盾给网

    感谢您的投稿,我对标题进行了编辑。分类放到了标题后方,并把【】换成了[]

  2. 盾给网

    还有您设置的阅读权限是评论可见。这里我要明确一下。阅读权限仅对文章中隐藏的内容有效果。并不是对全篇文章的作用。

个人中心
购物车
优惠劵
今日签到
私信列表
搜索