本教程为新手学习python教程
废话少说,下面开始python教程
我们先用tkinter搭建好脚本的基本界面
"""
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?
学习Python中有不明白推荐加入交流群号:928946953
群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!
还有大牛解答!
"""
import tkinter as tk#[size=3]首先导入tkinter,需要事先用pip安装进python里(方法自行百度)[/size]
def init_window():
global cs,wd
wd = tk.Tk()
cs = tk.Canvas(wd,
width = 800,
height = 500,
bg = 'white')
wd.minsize(800, 500) # 最小尺寸
wd.maxsize(800, 500)#最大尺寸,使最大化失效
wd.title('DDTHelper')
pic = tk.PhotoImage(file="pic.png")#设置背景图片,最好是800*500和png格式的
cs.create_image(400,250,image = pic)
cs.pack()
bt = tk.Button(wd,
text='初始化',
bg=('white'),
font=('微软雅黑',20),
width=155,
height=48,
command=BT_onCreat)
bt.pack()
cs.create_window(530,70,
width=155,
height=48,
window=bt)
wd.mainloop()
def BT_onCreat():
print("初始化。。。")
#入口,这行代码需要一直都待在脚本的最底下
#设置字典
hwnd_title = dict()
init_window()
(不过在图片上叠加控件其实有更好的方案,使控件的背景为透明的,但是那篇文章的代码运行不来)
运行效果
现在我们为点击 初始化 按钮添加一些事项
让他在被点击的时候识别当前的游戏窗口
(因为我用的是36jb大厅登录的游戏,抓取句柄的时候可以根据他的title来区别游戏窗口)
这里我偷了个懒,利用该登录器游戏窗口的title来获取
更改上面的导入库和 BT_onCreat()方法
import win32com.client as wc,win32gui as wg,threading as xc,time,tkinter as tk,win32api as wa,win32con as wn#需要事先用pip安装pywin32插件进python里(方法自行百度)
def init_window():
global cs,wd
wd = tk.Tk()
cs = tk.Canvas(wd,
width = 800,
height = 500,
bg = 'white')
wd.minsize(800, 500) # 最小尺寸
wd.maxsize(800, 500)#最大尺寸,使最大化失效
wd.title('DDTHelper')
pic = tk.PhotoImage(file="pic.png")#设置背景图片,最好是800*500和png格式的
cs.create_image(400,250,image = pic)
cs.pack()
bt = tk.Button(wd,
text='初始化',
bg=('white'),
font=('微软雅黑',20),
width=155,
height=48,
command=BT_onCreat)
bt.pack()
cs.create_window(530,70,
width=155,
height=48,
window=bt)
wd.mainloop()
def BT_onCreat():
global is_run,Znum,t1,t2,t3
Znum = 0#当前已经登陆的游戏账号数量
wg.EnumWindows(get_all_hwnd, 0)
for h,t in hwnd_title.items():
if "4399" in t:#根据title里包含的 4399 来提取游戏窗口
hwnd = t.split("|")[3]
name = t.split("|")[2]
print("账号:" + name + "句柄:" + hwnd)
Znum = Znum + 1
hwnd = int(hwnd)#将句柄转化为int,因为句柄是从标题获取的string,导致了类型错误,我就是被这个坑了好久。。
if Znum==1:#为每一个游戏界面创建一个单独的操作线程,为了方便用global传递,没有用exec。
t1 = xc.Thread(target=Con,args=(hwnd,name,Znum))
elif Znum==2:
t2 = xc.Thread(target=Con,args=(hwnd,name,Znum))
elif Znum==3:
t3 = xc.Thread(target=Con,args=(hwnd,name,Znum))
init_control(Znum,name)
#下面再添加几个方法进去
#获取句柄用的
def get_all_hwnd(hwnd,mouse):
if wg.IsWindow(hwnd) and wg.IsWindowEnabled(hwnd) and wg.IsWindowVisible(hwnd):
hwnd_title.update({hwnd:wg.GetWindowText(hwnd)})
#为每一个线程创建一个对应的控件来控制线程的运行
def init_control(Znum,name):
global cs,wd,v1,v2,v3,tx1,t2,tx2,t3,tx3,txn1,txn2,txn3
if Znum==1:
v1=tk.IntVar()
tx1=tk.StringVar()
txn1=tk.StringVar()
elif Znum==2:
v2=tk.IntVar()
tx2=tk.StringVar()
txn2=tk.StringVar()
elif Znum==3:
v3=tk.IntVar()
tx3=tk.StringVar()
txn3=tk.StringVar()
exec('tx{}.set("未运行")'.format(Znum))
exec('lb{} = tk.Label(wd,text="{}",bg=("#ffffff"),font=("微软雅黑",20))'.format(Znum,name))
exec('lbn{} = tk.Label(wd,textvariable=txn{},bg=("#ffffff"),font=("微软雅黑",10))'.format(Znum,Znum))
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))
exec('cb{}.pack()'.format(Znum))
exec('lb{}.pack()'.format(Znum))
exec('lbn{}.pack()'.format(Znum))
Ytmp=Znum*100
Ytmp=Ytmp+70
exec('cs.create_window(6