亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python中用ctypes模擬點擊的實例講解

瀏覽:19日期:2022-07-04 10:45:47

在小編學習python中的模擬點擊之前,我們想要對某一項操作進行自動指令的重復,可以選擇大家熟知的按鍵精靈。那么對比python的模擬點擊,小編還是覺得python中使用更加方便。這樣說不能讓有些小伙伴信服,下面小編就以一個以小游戲為例,在我們寫完ctypes模擬點擊后用python運行,看看游戲體驗效果。

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

直接用python調用,獲取特定點位置上的顏色,非白色就發送點擊指令。然后循環等待下一個黑色塊的到來。同時設定定時時間,若長時間依舊是這個顏色,證明游戲結束,直接退出。代碼如下:

WindowFunction = ctypes.windll.LoadLibrary('E:Python HackDLLScreenFunction.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 += 1if cot > 20: quit=True breakRGB0 = DllGetPixel(wHWND,Pos0.x,Pos0.y) & 0xffffffff elif flag == 2: RGB1 = DllGetPixel(wHWND,Pos1.x,Pos1.y) & 0xffffffff while not RGB1 == 0xfff5f5f5: breakRGB1 = 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 進行過測試,保證其正確運行。由于有些代碼在Linux,Windows或Mac OS X下的表現不同,這些代碼會在 doctest 中包含相關的指令注解。

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

載入動態連接庫ctypes 導出了 cdll 對象,在 Windows 系統中還導出了 windll 和 oledll 對象用于載入動態連接庫。

通過操作這些對象的屬性,你可以載入外部的動態鏈接庫。cdll 載入按標準的 cdecl 調用協議導出的函數,而 windll 導入的庫按 stdcall 調用協議調用其中的函數。 oledll 也按 stdcall 調用協議調用其中的函數,并假定該函數返回的是 Windows HRESULT 錯誤代碼,并當函數調用失敗時,自動根據該代碼甩出一個 OSError 異常。

在 3.3 版更改: 原來在 Windows 下甩出的異常類型 WindowsError 現在是 OSError 的一個別名。

這是一些 Windows 下的例子。注意:msvcrt 是微軟 C 標準庫,包含了大部分 C 標準函數,這些函數都是以 cdecl 調用協議進行調用的。

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

Windows會自動添加通常的 .dll 文件擴展名。

到此這篇關于python中用ctypes模擬點擊的實例講解的文章就介紹到這了,更多相關python中如何用ctypes模擬點擊內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 美国一级大毛片 | 国产精品情侣 | 深夜爽爽福利gif在线观看 | 污香蕉视频在线观看 | 色屁屁在线 | 日韩中文字幕a | 国产网红主播精品福利大秀专区 | 日本人与黑人做爰视频网站 | 日韩免费一级片 | 北岛玲视频在线观看 | 国产日韩精品欧美一区喷水 | 日韩中文字幕在线亚洲一区 | 国产精品欧美一区二区三区不卡 | 一级做a爱过程免费视频时看 | 国产精品亚洲精品青青青 | 日韩精品亚洲一级在线观看 | 丁香综合激情 | 免费黄在线观看 | 床上毛片 | 国产成人精品一区二区仙踪林 | 日本一区二区三区四区无限 | 麻豆视频免费网站 | 国语自产拍在线观看7m | 国产精品无卡无在线播放 | 久久精品国产亚洲麻豆 | 国产一区在线免费观看 | 韩国一级毛片大全女教师 | 黄色亚洲 | 国产精品jizz在线观看网站 | 黄色成年视频 | 亚洲图片一区 | 免费福利小视频 | 二级黄绝大片中国免费视频 | 女人毛片a级大学毛片免费 女人毛片在线 | 激情亚洲婷婷 | 国产第一页在线播放 | 国产精品老女人精品视 | 欧美成人免费xxx大片 | 国产亚洲精品一区二区久久 | 女人被男人狂躁的视频免费 | 自拍亚洲色图 |