pywin32模块测试

左手的ㄟ右手 2022-03-10 04:36 327阅读 0赞
  • EnumWindows 遍历所有窗口

    BOOL EnumWindows(
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
    );
    lpEnumFunc 应用程序定义的回调函数
    lParam 传递给回调函数的应用程序定义的值

示例:

  1. from win32gui import *
  2. windows = []
  3. def get_windows(hwnd,param):
  4. if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd): # 用来过滤
  5. windows.append(GetWindowText(hwnd)) # 获得窗口标题
  6. EnumWindows(get_windows, 0)
  7. for i in windows:
  8. print(i)
  • EnumChildWindows 遍历子窗口(包括控件)

    BOOL EnumChildWindows(
    HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
    );
    hWndParent 父窗口句柄
    lpEnumFunc 应用程序定义的回调函数
    lParam 传给回调函数的应用程序定义的值

示例

  1. from win32gui import *
  2. hwnd = FindWindow(None,'编辑服务器') # 查找'编辑服务器'这个窗口
  3. widgets=[] #存放子窗口控件相关信息
  4. def get_child_windows(child_window,param):
  5. widget={
  6. 'handle':child_window ,
  7. 'class':GetClassName(child_window), #得到的HWND获取对应Window的Class属性
  8. 'title':GetWindowText(child_window), #得到的HWND获取对应Window的标题名
  9. 'pos':GetWindowRect(child_window)
  10. }
  11. widgets.append(widget)
  12. EnumChildWindows(hwnd,get_child_windows,None) # 如果没有指定父窗口,则会遍历所有子窗口
  13. for i in widgets:
  14. print(i)
  • 鼠标点击

    SetCursorPos # 设置鼠标位置,参数坐标是个元组

    点击鼠标

    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

示例

  1. def click_widget(widget_title):
  2. for i in widgets:
  3. if i['title'].find(widget_title) > 0:
  4. win32api.SetCursorPos((i['pos'][0] + 5, i['pos'][1] + 5))
  5. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  6. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  7. click_widget('A')
  • 写入文本信息

    win32api.SendMessage(‘控件句柄’, win32con.WM_SETTEXT, None,’字符串‘)

示例程序

  1. from win32gui import *
  2. import win32con
  3. import win32api
  4. import time
  5. class monitor:
  6. def __init__(self,hwnd,vpn_info):
  7. self.widgets = [] # 存放子窗口控件相关信息
  8. self.edit=[] # 文本输入框控件相关信息
  9. self.info = info # 存放VPN连接相关信息
  10. self.hwnd = hwnd # VPN软件句柄
  11. # 遍历子窗口
  12. def get_child_windows(self,child_window, param):
  13. widget = {
  14. 'handle': child_window,
  15. 'class': GetClassName(child_window), # 得到的HWND获取对应Window的Class属性
  16. 'title': GetWindowText(child_window), # 得到的HWND获取对应Window的标题名
  17. 'pos': GetWindowRect(child_window)
  18. }
  19. self.widgets.append(widget)
  20. # 点击指定控件
  21. def click_widget(self,widget_title):
  22. for i in self.widgets:
  23. if i['title'].find(widget_title) > 0:
  24. win32api.SetCursorPos((i['pos'][0] + 5, i['pos'][1] + 5))
  25. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  26. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  27. # 获取编辑类控件
  28. def get_class_edit(self):
  29. for i in self.widgets:
  30. if i['class'] == 'WindowsForms10.EDIT.app.0.12ab327_r9_ad1':
  31. self.edit.append(i)
  32. # 自动填充信息
  33. def auto_insert(self):
  34. i = 0
  35. for key, value in self.info.items():
  36. win32api.SendMessage(self.edit[i]['handle'], win32con.WM_SETTEXT, None, value)
  37. i = i + 1
  38. # 主程序
  39. def run(self):
  40. EnumChildWindows(self.hwnd, self.get_child_windows, None)
  41. self.get_class_edit()
  42. self.click_widget('A')
  43. time.sleep(1)
  44. self.auto_insert()
  45. time.sleep(1)
  46. self.click_widget('D')
  47. # 自动填充的内容
  48. info={
  49. 'agent_port':'1080',
  50. 'comment': '自动化脚本',
  51. 'ip':'138.128.212.67',
  52. 'port':'9555',
  53. 'password':'123456'
  54. }
  55. def main():
  56. hwnd = FindWindow(None, '编辑服务器')
  57. if hwnd == 0 :
  58. print('找不到窗口')
  59. exit()
  60. SetWindowPos(hwnd, win32con.HWND_TOPMOST, 600, 300, 600, 600, win32con.SWP_NOSIZE)
  61. SS=monitor(hwnd,info)
  62. SS.run()
  63. if __name__ == '__main__':
  64. main()

参考链接

  • https://blog.csdn.net/loonger_leon/article/details/5737683
  • https://blog.csdn.net/qq_34489091/article/details/80244118
  • https://blog.csdn.net/qq_16234613/article/details/79155632

发表评论

表情:
评论列表 (有 0 条评论,327人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python-pywin32

    python可以直接操控win32程序,也就是原生的C,C++程序,比如mfc写的程序。但是不能操作qt这种自绘的组件。         环境搭建         py