python win 32 간단 한 조작 방법
처음에는 친구 에 게 왕 신 을 조작 하 는 버튼 요정 의 스 크 립 트 를 만들어 주 었 습 니 다.다 쓴 후에 여러 가지 불안정 이 있 었 습 니 다.나중에 python 이 win 32 와 관련 된 api 를 조작 할 수 있 는 것 을 보 았 습 니 다.마침 그 동안 python 을 배우 고 있 었 습 니 다.연습 할 때 가 된 것 같 습 니 다~~~
다운로드 하 다.
Python 버 전과 자릿수 에 주의해 야 합 니 다.그렇지 않 으 면 설치 에 실패 할 것 입 니 다.
위 주소 로 직접 가서 적당 한 버 전 을 찾 아 설치 하 십시오.다른 도구 가 포함 되 어 있 습 니 다.
다운로드 한 것 은 이미 실행 가능 한 파일 이 므 로 직접 실행 하면 됩 니 다.
https://sourceforge.net/projects/pywin32/VC 또는 VS 도구 에 SPY++를 가 져 오 면 핸들 정 보 를 얻 을 수 있 습 니 다.이것 은 없습니다.다음 을 보십시오.
맞아요.바로 버튼 요정 이에 요.
쓰다
검색 핸들
#             ,
hwnd = win32gui.FindWindow("Tfrm_YzzPlayer","        ")
#           ,              ,        ,   None
hwnd = win32gui.FindWindow(hwnd,None,"sub_class","sub_title")
#              ,       ,          ,     ,   ,       ,         ,           ,            ,      ;            ,             ,        
win32gui.MoveWindow(hwnd,20,20,405,756,True)
#          ,     
win32gui.SetForegroundWindow(hwnd)
#      
win32gui.SetBkMode(hwnd, win32con.TRANSPARENT)
#                  win32gui  win32api  ,       ,      ,       PostMessage SendMessage    ,          SendMessage    ,          , PostMessage      ,    ,          
#        :       ,      (        ),   (        win32con   ,          ,     ASII   , A 65   ),         (       win32api.MAKELONG(x,y)             ;
#       ,         
#                       ,      Enter ,        ,         KEYDOAWN  KEYUP ,      ,                  
# win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
# win32gui.SendMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32api.SendMessage(hwd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)
win32api.PostMessage(hwd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)입력 상자 의 핸들 을 찾 아 키 종 류 를 SETTEXT 로 설정 하 는 두 가지 방법 이 있 습 니 다.
또 다른 방식 은 입력 해 야 할 내용 을 스티커 판 에 넣 고 직접 붙 여 넣 으 면 된다.
#          ,             ,                ,             
win32gui.SendMessage(tid, win32con.WM_SETTEXT,None,‘hello')
#    ,                  ,  ctrl + v  ,                ,             
#       ,      ,               
def getText():
#      
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d
def setText(aString):
#      
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_TEXT, aString.encode(encoding='gbk'))
w.CloseClipboard()다음 코드 기능 은 한 텍스트 에서 모든 줄 의 기록 을 읽 은 다음 안 드 로 이 드 시 뮬 레이 터 의 왕 편지 에서 연락 처 를 조회 하여 지정 한 내용 의 메 시 지 를 보 내 는 것 입 니 다.
# coding: utf-8
import win32gui, win32api, win32con
import time
import win32clipboard as w
import logging
def click_position(hwd, x_position, y_position, sleep):
  """
            
  :param hwd: 
  :param x_position: 
  :param y_position: 
  :param sleep: 
  :return: 
  """
  #    16        32      
  long_position = win32api.MAKELONG(x_position, y_position)
  # win32api.SendMessage(hwnd, win32con.MOUSEEVENTF_LEFTDOWN, win32con.MOUSEEVENTF_LEFTUP, long_position)
  #     
  win32api.SendMessage(hwd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)
  win32api.SendMessage(hwd, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)
  time.sleep(int(sleep))
def getText():
  #      
  w.OpenClipboard()
  d = w.GetClipboardData(win32con.CF_TEXT)
  w.CloseClipboard()
  return d
def setText(aString):
  #      
  w.OpenClipboard()
  w.EmptyClipboard()
  w.SetClipboardData(win32con.CF_TEXT, aString.encode(encoding='gbk'))
  w.CloseClipboard()
def input_content(hwd, content, sleep, is_enter):
  """
              
  :param hwd: 
  :param content: 
  :param sleep: 
  :param is_enter         enter ,   enter      
  :return: 
  """
  setText(content)
  time.sleep(0.3)
  click_keys(hwd, win32con.VK_CONTROL, 86)
  if is_enter:
    time.sleep(1)
    click_keys(hwd, win32con.VK_RETURN)
  time.sleep(sleep)
def click_keys(hwd, *args):
  """
        
  :param hwd: 
  :param args: 
  :return: 
  """
  for arg in args:
    win32api.SendMessage(hwd, win32con.WM_KEYDOWN, arg, 0)
  for arg in args:
    win32api.SendMessage(hwd, win32con.WM_KEYUP, arg, 0)
def wangwang_operation(hwd, salesname, content1, content2):
  """
         
  :param hwd:   
  :param salesname: 
  :param content1:    
  :param content2:    
  :return: 
  """
  #        
  click_position(hwd, 200, 685, 2)
  #       
  click_position(hwd, 372, 44, 3)
  #     
  input_content(hwd, salesname, 3, False)
  #     
  click_position(hwd, 345, 117, 5)
  #       
  click_position(hwd, 350, 700, 3)
  #      
  input_content(hwd, content1, 1, False)
  click_keys(hwd, win32con.VK_CONTROL, win32con.VK_RETURN)
  time.sleep(1)
  input_content(hwd, content2, 1, False)
  click_keys(hwd, win32con.VK_CONTROL, win32con.VK_RETURN)
  time.sleep(1)
  #       
  click_position(hwd, 20, 45, 1)
  time.sleep(1)
  click_position(hwd, 20, 45, 1)
def wangwang_operation_by_file(hwd, file, content1, content2):
  with open(file, 'r') as f:
    line = f.readline()
    while len(line) >= 1:
      try:
        line = line.replace('\r', '').replace('
', '')
        print("       %s   ....................................." % line)
        wangwang_operation(hwd, line, content1, content2)
        line = f.readline()
      except BaseException as e:
        print("   %s     ............." % line)
        logging.exception(e)
if __name__ == "__main__":
  #     
  hwnd = win32gui.FindWindow("Tfrm_YzzPlayer", "        ")
  if int(hwnd) <= 0:
    print("       ,    ................")
    exit(0)
  print("        : %s " % hwnd)
  win32gui.MoveWindow(hwnd, 20, 20, 405, 756, True)
  time.sleep(2)
  #           
  # print(win32gui.ScreenToClient(hwnd, (1446, 722)))
  #      
  # win32gui.SetForegroundWindow(hwnd)
  #      
  win32gui.SetBkMode(hwnd, win32con.TRANSPARENT)
  time.sleep(2)
  #             :               
  wangwang_operation_by_file(hwnd, "D:/2.txt", "  ", "     ")이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.