Python脚本速成

24_绑定窗口

# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from sc import * # 从 sc文件导入所有的函数等


class GeneratedUI:
    """生成的Tkinter界面"""

    def __init__(self, master=None):
        # 创建主窗口
        self.master = master if master else tk.Tk()
        self.master.title("绑定窗口 解绑窗口") # 窗口标题
        self.master.geometry("500x350+700+100") # 设置 窗口大小、窗口位置
        self.master.configure(bg='white')

        # 2. 核心:固定窗口大小(宽不可调,高不可调)
        # resizable(width=False, height=False)
        self.master.resizable(False, False) # 固定窗口大小

        # 创建界面组件
        self.组件布局()

        # 全局变量
        self.已绑定 = False


        # 设置 按钮图标

        icon = tk.PhotoImage(file="./图片/句柄.png")

        self.master.nametowidget('按钮_取句柄').config(image=icon,compound="center")

        self.master.nametowidget('按钮_取句柄').image = icon



        # 关闭窗口事件 核心:绑定关闭窗口事件
        self.master.protocol("WM_DELETE_WINDOW", self.关窗窗口)

        self.注册大漠()

        # 按钮按住、弹起

        self.master.nametowidget('按钮_取句柄').bind("<ButtonPress-1>", self.取句柄_按住)
        self.master.nametowidget('按钮_取句柄').bind("<ButtonRelease-1>", self.取句柄_弹起)

        # 自动获取窗口句柄 按钮事件
        self.master.nametowidget('按钮_取窗口句柄').config(command=self.取窗口句柄)

        # 绑定窗口 按钮事件
        self.master.nametowidget('按钮_绑定窗口').config(command=self.绑定窗口)
        # 解绑窗口 按钮事件
        self.master.nametowidget('按钮_解绑窗口').config(command=self.解绑窗口)
        # 测试功能 按钮事件
        self.master.nametowidget('按钮_测试功能').config(command=self.测试功能)


    def 测试功能(self):

        if self.已绑定 == False: # 没有绑定窗口
            弹窗提醒("温馨提示:请先绑定窗口句柄!")
            return # 如果不绑定窗口,就不让代码往下执行

        self.日志("开始测试功能!")

        当前x,当前y = 取人物当前坐标(dms[0],5,580,146,598,"fdfdfd-050505",1,0) # 手动

        if 当前x != -1 and 当前y != -1:
            self.日志(f'当前坐标【手动字库】:{当前x},{当前y}')
        else:
            self.日志(f'当前坐标【手动字库】,获取失败!')

        当前x,当前y = 取人物当前坐标(dms[0], 5, 580, 146, 598, "fdfdfd-050505", 1, 0)  # 系统
        if 当前x != -1 and 当前y != -1:
            self.日志(f'当前坐标【系统字库】:{当前x},{当前y}')
        else:
            self.日志(f'当前坐标【系统字库】,获取失败!')

    def 绑定窗口(self):
        self.日志("开始绑定窗口!")

        窗口句柄 = self.master.nametowidget('输入框_窗口句柄').get().strip() # strip 表示删除首、尾空

        if not 窗口句柄:
            弹窗提醒("警告:请先获取窗口句柄!")
            return

        返回_绑定 = 后台_绑定窗口(dms[0], int(窗口句柄), 'gdi', 'dx2', 'dx', 0)
        if 返回_绑定 == 1:
            self.已绑定 = True
            self.日志("绑定窗口成功!")
            print("绑定窗口成功!")
        else:
            self.已绑定 = False
            self.日志("绑定窗口失败!")
            print("绑定窗口失败!")


    def 解绑窗口(self):
        self.日志("解绑窗口!")
        返回_解绑 = 后台_解绑窗口(dms[0])

        if 返回_解绑 ==1:
            self.日志("解绑窗口成功!")
        else:
            self.日志("解绑窗口失败!")

        self.已绑定 = False

    def 取窗口句柄(self):
        窗口句柄 = 窗口_枚举句柄(dms[0], 0, '老战友', '', 57)
        句柄_列表 = 窗口句柄.split(",")
        序号 = 0
        for 句柄 in 句柄_列表: # 把所有句柄,提取出来
            序号 +=1
            self.日志(f'({序号}):{句柄}')

            if 序号 ==1:
                self.master.nametowidget("输入框_窗口句柄").insert(0,str(句柄))

    def 取句柄_按住(self,event):
        event.widget.config(relief="sunken")
        self.日志("开始取句柄!")

        self.master.nametowidget('输入框_窗口句柄').delete(0, tk.END)  # 删除所有内容(从开始到结束)

    def 取句柄_弹起(self,event):
        event.widget.config(relief="raised")

        窗口句柄 = 窗口_取鼠标指向句柄(dms[0])

        if 窗口句柄:
            self.日志(f"获取到的窗口句柄: {窗口句柄}")

            self.master.nametowidget('输入框_窗口句柄').insert(0, str(窗口句柄))  # 在开头插入


        else:
            self.日志(f"获取窗口句柄失败!")

    def 日志(self,text):
        self.master.nametowidget('文本框_日志').insert(tk.END, f"{text}\n")  # 追加文本到(写到末尾) → 文本框_日志

        # 核心:获取最后一行的索引,拆分出行号 'end-1c' 表示最后一个字符的位置(排除Text默认的结束符)
        last_index = self.master.nametowidget('文本框_日志').index('end-1c')
        # 按 '.' 拆分,取第一个部分(行号)并转为整数
        总行数 = int(last_index.split('.')[0])

        if 总行数 ==3000:
            self.master.nametowidget('文本框_日志').delete('1.0',tk.END) # 清空所有

    def 注册大漠(self):

        # with open('./注册码.txt', 'r', encoding='utf8') as f:
        #     注册码信息 = f.read() # 读取文件内的所有内容
        #
        #     if 注册码信息: # 不为空
        #         返回_列表 = 注册码信息.split("\n") # 通过换行符分割
        #
        #         if len(返回_列表)>=2:
        #
        #             注册码 = 返回_列表[0] # 第一个
        #             附加码 = 返回_列表[1]  # 第二个

        注册码,附加码 = 取注册码()

        if 注册码 and 附加码:
            大漠初始化(注册码,附加码)

            if len(dms)>0: # 不为空 表示 大漠初始化成功,也就是成功创建了大漠对象
                self.master.nametowidget('文本框_日志').insert(tk.END, "注册大漠VIP成功!\n")  # 追加文本到(写到末尾) → 文本框_日志

                返回_手动 = 文字_置字库(dms[0], 0, "./数字_手动字库.txt") # 手动
                if 返回_手动 ==1:
                    self.日志("设置【手动字库】成功!")
                else:
                    self.日志("设置【手动字库】失败!")

                返回_系统 = 文字_置字库(dms[0], 1, "./数字_系统字库.txt") # 系统

                if 返回_系统 == 1:
                    self.日志("设置【系统字库】成功!")
                else:
                    self.日志("设置【系统字库】失败!")


            else:
                self.master.nametowidget('文本框_日志').insert(tk.END, "注册大漠VIP失败!\n")  # 追加文本到(写到末尾) → 文本框_日志

        else:
            弹窗提醒("未读取到注册码信息!")
            return

    def 关窗窗口(self):

        print("开始关闭窗口")

        if len(dms)>0: # 判断 大漠【dms】是否初始化成功
            后台_解绑窗口(dms[0])

        self.master.destroy() # 销毁窗口

        print("结束关闭窗口")

    def 组件布局(self):
        """创建所有界面组件"""

        # 文本框: 文本框_8e35b19a -> text_1
        self.text_1 = tk.Text(
            self.master,
            bg="white",
            fg="black",
            font=['微软雅黑', 10],
            name="文本框_日志"
        )
        self.text_1.place(
            x=17.0,
            y=105.0,
            width=463.0,
            height=223.0
        )

        # 按钮: 按钮_84940ab4 -> btn_1
        self.btn_1 = tk.Button(
            self.master,
            text="",
            bg="#4CAF50",
            fg="white",
            font=['微软雅黑', 10],
            name="按钮_取句柄"
        )
        self.btn_1.place(
            x=16.0,
            y=14,
            width=25,
            height=25
        )

        # 输入框: 输入框_8200ce36 -> entry_1
        self.entry_1 = tk.Entry(
            self.master,
            bg="white",
            fg="black",
            font=['微软雅黑', 10],
            name="输入框_窗口句柄"
        )
        self.entry_1.place(
            x=45.0,
            y=14,
            width=80,
            height=25
        )

        # 按钮: 按钮_04e4bf14 -> btn_2
        self.btn_2 = tk.Button(
            self.master,
            text="取窗口句柄",
            bg="#4CAF50",
            fg="white",
            font=['微软雅黑', 10],
            name="按钮_取窗口句柄"
        )
        self.btn_2.place(
            x=130.0,
            y=14,
            width=82,
            height=25
        )

        # 按钮: 按钮_a7fcc7df -> btn_3
        self.btn_3 = tk.Button(
            self.master,
            text="绑定窗口",
            bg="#4CAF50",
            fg="white",
            font=['微软雅黑', 10],
            name="按钮_绑定窗口"
        )
        self.btn_3.place(
            x=222.0,
            y=14,
            width=100,
            height=25
        )

        # 按钮: 按钮_3dcb43a9 -> btn_4
        self.btn_4 = tk.Button(
            self.master,
            text="解绑窗口",
            bg="#4CAF50",
            fg="white",
            font=['微软雅黑', 10],
            name="按钮_解绑窗口"
        )
        self.btn_4.place(
            x=332.0,
            y=14,
            width=100,
            height=25
        )

        # 按钮: 按钮_347219cb -> btn_5
        self.btn_5 = tk.Button(
            self.master,
            text="测试功能",
            bg="#4CAF50",
            fg="white",
            font=('微软雅黑', 10),
            name="按钮_测试功能"
        )
        self.btn_5.place(
            x=20.0,
            y=58.0,
            width=68,
            height=25
        )


def main():
    """主函数"""
    root = tk.Tk()
    app = GeneratedUI(root)
    root.mainloop()

if __name__ == "__main__":
    main()