最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中用ctypes模擬點(diǎn)擊的實(shí)例講解

 更新時(shí)間:2020年11月26日 15:05:16   作者:小妮淺淺  
在本篇文章里小編給各位整理了一篇關(guān)于python中用ctypes模擬點(diǎn)擊的實(shí)例講解內(nèi)容,需要的朋友可以參考學(xué)習(xí)下。

在小編學(xué)習(xí)python中的模擬點(diǎn)擊之前,我們想要對某一項(xiàng)操作進(jìn)行自動(dòng)指令的重復(fù),可以選擇大家熟知的按鍵精靈。那么對比python的模擬點(diǎn)擊,小編還是覺得python中使用更加方便。這樣說不能讓有些小伙伴信服,下面小編就以一個(gè)以小游戲?yàn)槔谖覀儗懲阠types模擬點(diǎn)擊后用python運(yùn)行,看看游戲體驗(yàn)效果。

按鍵精靈提供的窗口api性能并不算的上太好。但是將整個(gè)邏輯搬到python上,并提供了自己所寫的api后,速度有了很大的提升。

直接用python調(diào)用,獲取特定點(diǎn)位置上的顏色,非白色就發(fā)送點(diǎn)擊指令。然后循環(huán)等待下一個(gè)黑色塊的到來。同時(shí)設(shè)定定時(shí)時(shí)間,若長時(shí)間依舊是這個(gè)顏色,證明游戲結(jié)束,直接退出。代碼如下:

WindowFunction = ctypes.windll.LoadLibrary("E:\\Python Hack\\DLL\\ScreenFunction.dll")
  DllGetPixel = WindowFunction.GetWindowPixel
  DllGetPixel.argtypes=[ctypes.wintypes.HWND,ctypes.wintypes.c_int,ctypes.wintypes.c_int]
  DllGetPixel.restypes=[ctypes.wintypes.c_uint32]
  DllGetMultiPixel = WindowFunction.GetWindowMultiPixel
  DllGetMultiPixel.argtypes=[ctypes.wintypes.HWND,ctypes.wintypes.c_void_p,ctypes.wintypes.c_void_p]
  DllGetMultiPixel.restypes=[ctypes.wintypes.c_int]
cMulti = (ctypes.wintypes.c_int * 17)(Pos0.x,Pos0.y,Pos1.x,Pos1.y,Pos2.x,Pos2.y,Pos3.x,Pos3.y,
                     Pos0.x,Pos0.y-5,Pos1.x,Pos1.y-5,Pos2.x,Pos2.y-5,Pos3.x,Pos3.y-5,
                     0)
  dwLen = DllGetMultiPixel(wHWND,byref(cMulti),None)
  RGB = (ctypes.wintypes.DWORD * dwLen)()
  quit = False
  while not quit:
    DllGetMultiPixel(wHWND,byref(cMulti),byref(RGB))    
    flag = 0
    if not RGB[0] == 0xfff5f5f5 or not RGB[4] == 0xfff5f5f5:
      EmuCursorClick(rect.left+Pos0.x,rect.top+Pos0.y)
      flag = 1
    elif not RGB[1] == 0xfff5f5f5 or not RGB[5] == 0xfff5f5f5:
      EmuCursorClick(rect.left+Pos1.x,rect.top+Pos1.y)
      flag = 2
    elif not RGB[2] == 0xfff5f5f5 or not RGB[6] == 0xfff5f5f5:
      EmuCursorClick(rect.left+Pos2.x,rect.top+Pos2.y)
      flag = 3
    elif not RGB[3] == 0xfff5f5f5 or not RGB[7] == 0xfff5f5f5:
      EmuCursorClick(rect.left+Pos3.x,rect.top+Pos3.y)
      flag = 4
    cot = 0
    if flag == 0:
      quit=True
    elif flag == 1:
      RGB0 = DllGetPixel(wHWND,Pos0.x,Pos0.y) & 0xffffffff
      while not RGB0 == 0xfff5f5f5:
        time.sleep(0.05)
        cot += 1
        if cot > 20:
          quit=True
          break        
        RGB0 = DllGetPixel(wHWND,Pos0.x,Pos0.y) & 0xffffffff
    elif flag == 2:    
      RGB1 = DllGetPixel(wHWND,Pos1.x,Pos1.y) & 0xffffffff
      while not RGB1 == 0xfff5f5f5:
          break
        RGB1 = DllGetPixel(wHWND,Pos1.x,Pos1.y) & 0xffffffff
    elif flag == 3:
      RGB2 = DllGetPixel(wHWND,Pos2.x,Pos2.y) & 0xffffffff
      while not RGB2 == 0xfff5f5f5:
        RGB2 = DllGetPixel(wHWND,Pos2.x,Pos2.y) & 0xffffffff
    elif flag == 4:
      RGB3 = DllGetPixel(wHWND,Pos3.x,Pos3.y) & 0xffffffff
      while not RGB3 == 0xfff5f5f5:
        RGB3 = DllGetPixel(wHWND,Pos3.x,Pos3.y) & 0xffffffff  
  print 'end'

ctypes 教程

注意:在本教程中的示例代碼使用 doctest 進(jìn)行過測試,保證其正確運(yùn)行。由于有些代碼在Linux,Windows或Mac OS X下的表現(xiàn)不同,這些代碼會(huì)在 doctest 中包含相關(guān)的指令注解。

注意:部分示例代碼引用了 ctypes c_int 類型。在 sizeof(long) == sizeof(int) 的平臺(tái)上此類型是 c_long 的一個(gè)別名。所以,在程序輸出 c_long 而不是你期望的 c_int 時(shí)不必感到迷惑 --- 它們實(shí)際上是同一種類型。

載入動(dòng)態(tài)連接庫
ctypes 導(dǎo)出了 cdll 對象,在 Windows 系統(tǒng)中還導(dǎo)出了 windll 和 oledll 對象用于載入動(dòng)態(tài)連接庫。

通過操作這些對象的屬性,你可以載入外部的動(dòng)態(tài)鏈接庫。cdll 載入按標(biāo)準(zhǔn)的 cdecl 調(diào)用協(xié)議導(dǎo)出的函數(shù),而 windll 導(dǎo)入的庫按 stdcall 調(diào)用協(xié)議調(diào)用其中的函數(shù)。 oledll 也按 stdcall 調(diào)用協(xié)議調(diào)用其中的函數(shù),并假定該函數(shù)返回的是 Windows HRESULT 錯(cuò)誤代碼,并當(dāng)函數(shù)調(diào)用失敗時(shí),自動(dòng)根據(jù)該代碼甩出一個(gè) OSError 異常。

在 3.3 版更改: 原來在 Windows 下甩出的異常類型 WindowsError 現(xiàn)在是 OSError 的一個(gè)別名。

這是一些 Windows 下的例子。注意:msvcrt 是微軟 C 標(biāo)準(zhǔn)庫,包含了大部分 C 標(biāo)準(zhǔn)函數(shù),這些函數(shù)都是以 cdecl 調(diào)用協(xié)議進(jìn)行調(diào)用的。

>>> from ctypes import *
>>> print(windll.kernel32) 
<WinDLL 'kernel32', handle ... at ...>
>>> print(cdll.msvcrt)   
<CDLL 'msvcrt', handle ... at ...>
>>> libc = cdll.msvcrt   
>>>

Windows會(huì)自動(dòng)添加通常的 .dll 文件擴(kuò)展名。

到此這篇關(guān)于python中用ctypes模擬點(diǎn)擊的實(shí)例講解的文章就介紹到這了,更多相關(guān)python中如何用ctypes模擬點(diǎn)擊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • anaconda?navigator打不開問題的解決方法

    anaconda?navigator打不開問題的解決方法

    在使用python的發(fā)行版anaconda時(shí),常常需要根據(jù)自己的項(xiàng)目安裝新的庫,下面這篇文章主要給大家介紹了關(guān)于anaconda?navigator打不開問題的解決方法,需要的朋友可以參考下
    2022-12-12
  • python使用celery實(shí)現(xiàn)異步任務(wù)執(zhí)行的例子

    python使用celery實(shí)現(xiàn)異步任務(wù)執(zhí)行的例子

    今天小編就為大家分享一篇python使用celery實(shí)現(xiàn)異步任務(wù)執(zhí)行的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁功能的例子

    Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁功能的例子

    今天小編就為大家分享一篇Python Django實(shí)現(xiàn)layui風(fēng)格+django分頁功能的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn)

    本文主要介紹了Python?生成多行重復(fù)數(shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python3中小括號(hào)()、中括號(hào)[]、花括號(hào){}的區(qū)別詳解

    Python3中小括號(hào)()、中括號(hào)[]、花括號(hào){}的區(qū)別詳解

    這篇文章主要介紹了Python3中小括號(hào)()、中括號(hào)[]、花括號(hào){}的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解Python 關(guān)聯(lián)規(guī)則分析

    詳解Python 關(guān)聯(lián)規(guī)則分析

    這篇文章主要介紹了Python 關(guān)聯(lián)規(guī)則分析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python 比較文本相似性的方法(difflib,Levenshtein)

    Python 比較文本相似性的方法(difflib,Levenshtein)

    今天小編就為大家分享一篇Python 比較文本相似性的方法(difflib,Levenshtein),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python使用Numpy模塊讀取文件并繪制圖片

    Python使用Numpy模塊讀取文件并繪制圖片

    這篇文章主要介紹了Python使用Numpy模塊讀取文件并繪制圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python實(shí)現(xiàn)銀行賬戶系統(tǒng)

    python實(shí)現(xiàn)銀行賬戶系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)銀行賬戶系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • python中sys.argv函數(shù)精簡概括

    python中sys.argv函數(shù)精簡概括

    本篇文章給大家分享了關(guān)于python中sys.argv函數(shù)的相關(guān)知識(shí)點(diǎn),有興趣的朋友可以參考學(xué)習(xí)下。
    2018-07-07

最新評論

三明市| 安西县| 云梦县| 扶绥县| 岳普湖县| 灌阳县| 登封市| 本溪市| 阿坝县| 肥城市| 喀喇沁旗| 盐山县| 西贡区| 常德市| 灵石县| 丹阳市| 团风县| 施秉县| 安国市| 元氏县| 金平| 嫩江县| 洛宁县| 柘荣县| 石阡县| 仙游县| 新丰县| 象州县| 济南市| 普宁市| 分宜县| 海伦市| 阿克陶县| 奉节县| 安远县| 克什克腾旗| 大洼县| 防城港市| 湘潭县| 墨脱县| 江门市|