亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python win32 簡單操作方法

 更新時間:2017年05月25日 10:41:23   投稿:jingxian  
下面小編就為大家?guī)硪黄猵ython win32 簡單操作方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

源由

剛開始是幫朋友做一個按鍵精靈操作旺信的腳本,寫完后各種不穩(wěn)定;后來看到python可以操作win32相關(guān)的api,恰好這一段時間正在學習python,感覺練手的時候到了~~~

下載

要注意Python版本及位數(shù),否則會安裝失敗

直接到上面的地址去找合適的版本下載安裝,已包含其它的工具

下載的已經(jīng)是可執(zhí)行文件,直接執(zhí)行即可

https://sourceforge.net/projects/pywin32/

獲取句柄的方式

VC或VS工具里面自帶SPY++,可以獲取句柄信息, 這個你沒有,請看下條

沒錯,就是按鍵精靈(不是做廣告哈,第一次查找句柄信息的時候就是用這貨),功能簡單易用

使用

查詢句柄

# 根據(jù)類名及標題名查詢句柄,
hwnd = win32gui.FindWindow("Tfrm_YzzPlayer","葉子豬手游模擬器")
# 查找指定句柄的子句柄,后兩個參數(shù)為子類的類名與標題,如果沒有或不確定,可以寫None
hwnd = win32gui.FindWindow(hwnd,None,"sub_class","sub_title")

修改窗口大小

# 沒有直接修改窗口大小的方式,但可以曲線救國,幾個參數(shù)分別表示句柄,起始點坐標,寬高度,是否重繪界面 ,如果想改變窗口大小,就必須指定起始點的坐標,沒果對起始點坐標沒有要求,隨便寫就可以;如果還想要放在原先的位置,就需要先獲取之前的邊框位置,再調(diào)用該方法即可
win32gui.MoveWindow(hwnd,20,20,405,756,True)

前臺后臺

# 指定句柄設置為前臺,也就是激活
win32gui.SetForegroundWindow(hwnd)
# 設置為后臺
win32gui.SetBkMode(hwnd, win32con.TRANSPARENT)

按鍵

# 在這里兩幾種方式可以選擇 可以使用win32gui包和win32api的包,目前未深入了解,感覺是一樣的,每一個里面還有PostMessage與SendMessage兩都可選,依據(jù)其他文檔的說法是SendMessage是同步的,在成功執(zhí)行后才會返回,而PostMessage是異步執(zhí)行的,直接返回,只是把內(nèi)容加在隊列里
# 幾個參數(shù)分別為: 操作的句柄 , 按鍵的類型(是按下或者是彈起), 鍵碼(大部分的功能鍵在win32con包中都,對于常用的數(shù)字或字母,直接去查找ASII碼即可,如A 65 等等),相對于句柄中的位置(在這里需要使用win32api.MAKELONG(x,y)將兩個地址轉(zhuǎn)換為一個長地址;
# 在這種情況下,可以做到后臺的操作
# 需要注意的是每一個按鍵要有按下與彈起兩個過程,比果我們要按Enter鍵,就需要有兩句代碼,第二個參數(shù)分別為 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)

發(fā)送消息

在這里有兩種方式,一種是找到輸入框的句柄,將鍵類型設置為SETTEXT

另外一種方式為將需要輸入的內(nèi)容放到粘貼板中,直接粘貼即可

# 方式一為網(wǎng)絡上說明,自己在測試的時候一直不成功,因為我是操作安卓模擬器里面的軟件,查找不到輸入框的句柄的原因
win32gui.SendMessage(tid, win32con.WM_SETTEXT,None,‘hello')
# 方式二,測試通過 其實就是把內(nèi)容放到剪貼板中,直接ctrl + v即可,感覺適用于找不到輸入框的具體句柄,但焦點已經(jīng)在輸入框中的情況
# 定義兩個方法,來讀寫剪貼板,注意要和目標系統(tǒng)的編碼方式相同
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()

代碼示例

下面的代碼功能是:從一個文本讀取每一行記錄,然后到安卓模擬器中的旺信中查詢聯(lián)系人,發(fā)送指定內(nèi)容的消息。

# 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):
  """
  從站貼板中查找輸入的內(nèi)容
  :param hwd: 
  :param content: 
  :param sleep: 
  :param is_enter 是否要在最后輸入enter鍵,內(nèi)容與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: 發(fā)送一
  :param content2: 發(fā)送二
  :return: 
  """
  # 下方聯(lián)系人標簽
  click_position(hwd, 200, 685, 2)
  # 新增好友按鈕
  click_position(hwd, 372, 44, 3)
  # 搜索好友
  input_content(hwd, salesname, 3, False)
  # 點擊搜索
  click_position(hwd, 345, 117, 5)
  # 點擊發(fā)送消息
  click_position(hwd, 350, 700, 3)
  # 發(fā)送消息一
  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)
  # 返回原始狀態(tài)
  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('\n', '')
        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)
  # 下列的后三個參數(shù)分別表示: 文件路徑 打招呼句子 廣告語
  wangwang_operation_by_file(hwnd, "D:/2.txt", "你好", "測試廣告語")

以上這篇python win32 簡單操作方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python庫Theano深度神經(jīng)網(wǎng)絡的設計訓練深入探究

    Python庫Theano深度神經(jīng)網(wǎng)絡的設計訓練深入探究

    Theano是一個用于深度學習的Python庫,它提供了高效的數(shù)值計算和自動微分功能,使得深度神經(jīng)網(wǎng)絡的設計和訓練變得更加容易,本文將深入探討Theano的功能和用法,并提供豐富的示例代碼,幫助大家入門深度學習
    2024-01-01
  • Python實現(xiàn)數(shù)據(jù)可視化案例分析

    Python實現(xiàn)數(shù)據(jù)可視化案例分析

    這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)可視化案例分析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Python基礎入門之if判斷語句

    Python基礎入門之if判斷語句

    Python條件語句是通過一條或多條語句的執(zhí)行結(jié)果(True或者False)來決定執(zhí)行的代碼塊,下面這篇文章主要給大家介紹了關(guān)于Python基礎入門之if判斷語句的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法

    pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法

    這篇文章主要介紹了pytorch 把MNIST數(shù)據(jù)集轉(zhuǎn)換成圖片和txt的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Python使用正則實現(xiàn)計算字符串算式

    Python使用正則實現(xiàn)計算字符串算式

    這篇文章主要介紹了Python使用正則實現(xiàn)計算字符串算式的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Python:type、object、class與內(nèi)置類型實例

    Python:type、object、class與內(nèi)置類型實例

    今天小編就為大家分享一篇Python:type、object、class與內(nèi)置類型實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python實現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法

    Python實現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法

    這篇文章主要介紹了Python實現(xiàn)自定義順序、排列寫入數(shù)據(jù)到Excel的方法,涉及Python針對Excel文件的數(shù)據(jù)處理及讀寫相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Django單元測試工具test client使用詳解

    Django單元測試工具test client使用詳解

    這篇文章主要介紹了Django單元測試工具test client使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python批量裁剪圖片的思路詳解

    Python批量裁剪圖片的思路詳解

    這篇文章主要介紹了Python批量裁剪圖片的程序代碼,是批量裁剪某一文件夾下的所有圖片,并指定裁剪寬高,本文給大家分享實現(xiàn)思路,需要的朋友可以參考下
    2022-07-07
  • Python的垃圾回收機制詳解

    Python的垃圾回收機制詳解

    這篇文章主要介紹了Python的垃圾回收機制詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08

最新評論