循环发送消息器

完整代码

import tkinter
import win32con
import win32gui
# 都用函数吧
def FindWindow(chatroom):
    win = win32gui.FindWindow(None, chatroom)
    return win
def get_child_windows(parent):        
    '''     
    获得parent的所有子窗口句柄
     返回子窗口句柄列表
     '''     
    if not parent:         
        return      
    hwndChildList = []     
    win32gui.EnumChildWindows(parent, lambda hwnd, param: param.append(hwnd),  hwndChildList)
    # lambda匿名函数双参数的应用          
    return hwndChildList       
win = FindWindow('xxx') # 可根据指定的聊天器窗口名来选择(可更改)
list_child = get_child_windows(win)
# print(list_child,len(list_child))
dict_Edit = {}
for i in list_child:
    clsname = win32gui.GetClassName(i)
    if clsname == 'Edit':
        dict_Edit['Edit'] =i
# 分装一次调用发送的接口
# 默认发送的消息
# 如何默认指定信息,输入信息之后就更改,加个字段,加个判断
# a = 'xxx'

def send_message(i,message='大家好好打\n\t我是个新手不太会'): # 一个clsname,一个句柄
    if len(entry.get()) != 0: # entry.get()对于函数调用来说是前面
        message = entry.get()
    try:
        win32gui.SendMessage(i, win32con.WM_SETTEXT, None, message) # SendMessagen无法发送笑脸等符号
        win32gui.PostMessage(i, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
        win32gui.PostMessage(i, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
        print('发送消息成功')
    except Exception as e:
        print('报错异常是:{}'.format(e)) 


# 循环发函数
def loop(toggle=False): # 只可以一个参数么
    global tracking_var
    if toggle:
        if tracking_var:
            tracking_var = False
        else:
            tracking_var = True
    if tracking_var:
        send_message(dict_Edit['Edit'])
        win.after(1000, loop)

# 创建按钮

win = tkinter.Tk()
win.title('闲话少说')
win.attributes('-topmost', True)
entry = tkinter.Entry(win) 
entry.pack(side='left')

print('这个是空么:'+entry.get(),len(entry.get()),type(entry.get())) # 好像之后循环就没有跳转上来了
button1=tkinter.Button(win,text='单发',command=lambda :send_message(dict_Edit['Edit']))
button1.pack(side='left')
tracking_var = False
button3=tkinter.Button(win,text='循环发',command=lambda:loop(toggle=True))
button3.pack(side='left')
button2=tkinter.Button(win,text="退出",command=win.quit )#退出
button2.pack(side='left')
win.mainloop()

参考文章

python和pywin32实现窗口查找、遍历和点击
如何将Tkinter窗口置于其他窗口的前面
python设置窗口位置_python中tkinter窗口位置
python TKinter.Entry获取文本框内容
Python win32gui Module

posted @ 2022-03-27 20:04  索匣  阅读(61)  评论(0编辑  收藏  举报