Pywin32库的使用

女爷i 2022-11-18 05:38 370阅读 0赞

pywin32的常用函数

  1. 获取指定窗口句柄:

    1. import win32gui
    2. titlename = "ceshi"
    3. hwnd = win32gui.FindWindow(None, titlename)
  2. 显示获取到的指定窗口

    1. win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
    2. win32gui.SetForegroundWindow(hwnd)

    show函数的参数可以为如下值:
    预定义值 等 效 值
    SW_HIDE 隐藏窗口,大小不变,激活状态不变
    SW_MAXIMIZE 最大化窗口,显示状态不变,激活状态不变
    SW_MINIMIZE 最小化窗口,显示状态不变,激活状态不变
    SW_RESTORE 从最大化或最小化恢复正常大小,显示状态不变,激活状态不变
    SW_SHOW 显示并激活窗口,大小状态不变
    SW_SHOWMAXIMIZED 显示并激活窗口,以最大化显示
    SW_SHOWMINIMIZED 显示并激活窗口,以最小化显示
    SW_SHOWMINNOACTIVE 显示窗口并最小化,激活状态不变
    SW_SHOWNA 显示窗口,大小状态不变,激活状态不变
    SW_SHOWNOACTIVATE 显示并从最大化或最小化恢复正常大小,激活状态不变
    SW_SHOWNORMAL 显示并激活窗口,恢复正常大小(初始化时用这个参数)

  3. 获取窗口位置

    1. pdhk = win32gui.GetWindowRect(hwnd) #left, top, right, bottom

    pdhk是一个数组包含 左上右下边界在屏幕中的位置;

  4. 设置鼠标位置,触发点击事件

    1. win32api.SetCursorPos([pdhk[0] + 53, pdhk[1] + 690])
    2. time.sleep(1)
    3. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)
    4. time.sleep(0.1)
    5. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0,0)
    6. time.sleep(1)

win下一些常用的操作

  1. import win32api
  2. import win32gui
  3. import win32con
  4. import win32print
  5. import time
  6. # 1 获取句柄
  7. # 1.1 通过坐标获取窗口句柄
  8. handle = win32gui.WindowFromPoint(win32api.GetCursorPos()) # (259, 185)
  9. # 1.2 获取最前窗口句柄
  10. handle = win32gui.GetForegroundWindow()
  11. # 1.3 通过类名或查标题找窗口
  12. handle = win32gui.FindWindow('cls_name', "title")
  13. # 1.4 找子窗体
  14. sub_handle = win32gui.FindWindowEx(handle, None, 'Edit', None) # 子窗口类名叫“Edit”
  15. # 句柄操作
  16. title = win32gui.GetWindowText(handle)
  17. cls_name = win32gui.GetClassName(handle)
  18. print({ '类名': cls_name, '标题': title})
  19. # 获取窗口位置
  20. info = win32gui.GetWindowRect(handle)
  21. # 设置为最前窗口
  22. win32gui.SetForegroundWindow(handle)
  23. # 2.按键-看键盘码
  24. # 获取鼠标当前位置的坐标
  25. cursor_pos = win32api.GetCursorPos()
  26. # 将鼠标移动到坐标处
  27. win32api.SetCursorPos((200, 200))
  28. # 回车
  29. win32api.keybd_event(13, 0, win32con.KEYEVENTF_EXTENDEDKEY, 0)
  30. win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
  31. # 左单键击
  32. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  33. # 右键单击
  34. win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
  35. # 鼠标左键按下-放开
  36. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  37. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  38. # 鼠标右键按下-放开
  39. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
  40. win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
  41. # TAB键
  42. win32api.keybd_event(win32con.VK_TAB, 0, 0, 0)
  43. win32api.keybd_event(win32con.VK_TAB, 0, win32con.KEYEVENTF_KEYUP, 0)
  44. # 快捷键Alt+F
  45. win32api.keybd_event(18, 0, 0, 0) # Alt
  46. win32api.keybd_event(70, 0, 0, 0) # F
  47. win32api.keybd_event(70, 0, win32con.KEYEVENTF_KEYUP, 0) # 释放按键
  48. win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)
  49. # 3.Message
  50. win = win32gui.FindWindow('Notepad', None)
  51. tid = win32gui.FindWindowEx(win, None, 'Edit', None)
  52. # 输入文本
  53. win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, '你好hello word!')
  54. # 确定
  55. win32gui.SendMessage(handle, win32con.WM_COMMAND, 1, btnhld)
  56. # 关闭窗口
  57. win32gui.PostMessage(win32gui.FindWindow('Notepad', None), win32con.WM_CLOSE, 0, 0)
  58. # 回车
  59. win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) # 插入一个回车符,post 没有返回值,执行完马上返回
  60. win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
  61. print("%x" % win)
  62. print("%x" % tid)
  63. # 选项框
  64. res = win32api.MessageBox(None, "Hello Pywin32", "pywin32", win32con.MB_YESNOCANCEL)
  65. print(res)
  66. win32api.MessageBox(0, "Hello PYwin32", "MessageBox", win32con.MB_OK | win32con.MB_ICONWARNING) # 加警告标志
  67. # 4.截屏
  68. from PIL import ImageGrab
  69. # 利用PIL截屏
  70. im = ImageGrab.grab()
  71. im.save('aa.jpg')
  72. # 5.文件的读写
  73. import win32file, win32api, win32con
  74. import os
  75. def SimpleFileDemo():
  76. testName = os.path.join(win32api.GetTempPath(), "opt_win_file.txt")
  77. if os.path.exists(testName):
  78. os.unlink(testName) # os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。
  79. # 写
  80. handle = win32file.CreateFile(testName,
  81. win32file.GENERIC_WRITE,
  82. 0,
  83. None,
  84. win32con.CREATE_NEW,
  85. 0,
  86. None)
  87. test_data = "Hello0there".encode("ascii")
  88. win32file.WriteFile(handle, test_data)
  89. handle.Close()
  90. # 读
  91. handle = win32file.CreateFile(testName, win32file.GENERIC_READ, 0, None, win32con.OPEN_EXISTING, 0, None)
  92. rc, data = win32file.ReadFile(handle, 1024)
  93. handle.Close() # 此处也可使用win32file.CloseHandle(handle)来关闭句柄
  94. if data == test_data:
  95. print("Successfully wrote and read a file")
  96. else:
  97. raise Exception("Got different data back???")
  98. os.unlink(testName)
  99. if __name__ == '__main__':
  100. SimpleFileDemo()
  101. # print(win32api.GetTempPath()) # 获取临时文件夹路径
  102. # 6. ShellExecute
  103. win32api.ShellExecute(None, "open", "C:Test.txt", None, None, SW_SHOWNORMAL) # 打开C:Test.txt 文件
  104. win32api.ShellExecute(None, "open", "http:#www.google.com", None, None, SW_SHOWNORMAL) # 打开网页www.google.com
  105. win32api.ShellExecute(None, "explore", "D:C++", None, None, SW_SHOWNORMAL) # 打开目录D:C++
  106. win32api.ShellExecute(None, "print", "C:Test.txt", None, None, SW_HIDE) # 打印文件C:Test.txt
  107. win32api.ShellExecute(None, "open", "mailto:", None, None, SW_SHOWNORMAL) # 打开邮箱
  108. win32api.ShellExecute(None, "open", "calc.exe", None, None, SW_SHOWNORMAL) # 调用计算器
  109. win32api.ShellExecute(None, "open", "NOTEPAD.EXE", None, None, SW_SHOWNORMAL) # 调用记事本
  110. # ShellExecute 不支持定向输出
  111. # 打印--只能打印txt word excel 不能打印图片及pdf
  112. from win32con import SW_HIDE, SW_SHOWNORMAL
  113. for fn in ['2.txt', '3.txt']:
  114. print(fn)
  115. res = win32api.ShellExecute(0, # 指定父窗口句柄
  116. 'print', # 指定动作, 譬如: open、print、edit、explore、find
  117. fn, # 指定要打开的文件或程序
  118. win32print.GetDefaultPrinter(),
  119. # 给要打开的程序指定参数;GetDefaultPrinter  取得默认打印机名称 <type 'str'>,GetDefaultPrinterW  取得默认打印机名称 <type 'unicode'>
  120. "./downloads/", # 目录路径
  121. SW_SHOWNORMAL) # 打开选项,SW_HIDE = 0; {隐藏},SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
  122. print(res) # 返回值大于32表示执行成功,返回值小于32表示执行错误
  123. # 打印 -pdf
  124. def print_pdf(pdf_file_name):
  125. """ 静默打印pdf :param pdf_file_name: :return: """
  126. # GSPRINT_PATH = resource_path + 'GSPRINTgsprint'
  127. GHOSTSCRIPT_PATH = resource_path + 'GHOSTSCRIPTbingswin32c' # gswin32c.exe
  128. currentprinter = config.printerName # "printerName":"FUJI XEROX ApeosPort-VI C3370""
  129. currentprinter = win32print.GetDefaultPrinter()
  130. arg = '-dPrinted '
  131. '-dBATCH '
  132. '-dNOPAUSE '
  133. '-dNOSAFER '
  134. '-dFitPage '
  135. '-dNORANGEPAGESIZE '
  136. '-q '
  137. '-dNumCopies=1 '
  138. '-sDEVICE=mswinpr2 '
  139. '-sOutputFile="spool'
  140. + currentprinter + " " +
  141. pdf_file_name
  142. log.info(arg)
  143. win32api.ShellExecute(
  144. 0,
  145. 'open',
  146. GHOSTSCRIPT_PATH,
  147. arg,
  148. ".",
  149. 0
  150. )
  151. # os.remove(pdf_file_name)

参考文章

  1. python和pywin32实现窗口查找、遍历和点击
  2. win32gui.FindWindow Not finding window
  3. pywin32 获取窗口句柄_pywin32学习
  4. python pywin32 获取窗体edit内容_pywin32

发表评论

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

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

相关阅读

    相关 python-pywin32

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