(未成功)用 Python 在LOL中 實現 可開關的按鍵連點


(未成功)用 Python 在LOL中 實現 可開關的按鍵連點

前言:

之所以想搞個這功能,主要是想玩一個無限插眼的BUG

地址:塞恩死亡真眼:無限插眼不耗層數,點亮墳頭!(被動/死亡狀態BUG)

1 采用 pywin32 庫實現按鍵點擊操作,pynput 庫實現監聽按鍵開關操作

一共 import 了 6 個庫

  • win32api :實現點擊操作

  • win32con : 跟上面那個一起的

  • ctypes : 獲取按鍵虛擬碼和掃描碼,為了能在游戲中實現按鍵功能

  • threading : 多線程

  • time : 設置按鍵延時

  • pynput : 監聽按鍵,實現可開關功能

  • os : 暫停運行

    具體代碼如下:

代碼按着這個改的:利用python實現鍵盤連點器

``

from pynput.keyboard import Key, Listener
import os
import win32api
import win32con
import ctypes
import threading
import time

listening = 0 # 用來判斷是否開始連按

# press這兩個函數是與 listener 結合使用,傳遞按鍵名的
def on_presskey (key): # 監聽按下
    global listening
    
    if str(key)=="'"+'q'+"'" and listening == 0: # 判斷是否為對應按鍵
        listening = 1
        print('監聽到按下1')

def on_releasekey(key): # 監聽彈起
    global listening
    
    if str(key)=="'"+'q'+"'":
        listening = 0
        print('監聽到釋放1')

def press_key(): # 實現按鍵操作
    global listening
    
    while True:
        if listening == 1: # 當判斷條件成立時,開始連按
            MapVirtualKey = ctypes.windll.user32.MapVirtualKeyA # 定義個變量替代后面那個,免得太長
            win32api.keybd_event(0x51, MapVirtualKey(0x51,0), 0, 0) # 用win32api里的 keybd_event 來實現按鍵點擊,0x51是 Q 的虛擬碼
            time.sleep(0.0001) # 設置延時 0.0001s (但具體是不是0.0001s我也感覺不到,反正隨便調的)
            win32api.keybd_event(0x51, MapVirtualKey(0x51,0), win32con.KEYEVENTF_KEYUP, 0) # 同上,但加了個 KEYEVENTF_KEYUP,表示按鍵彈起



t1 = Listener(on_press=on_presskey,on_release=on_releasekey) # 設置 監聽 線程
t2 = threading.Thread(target=press_key,name='sendThreadkey') # 設置 點擊 線程

t1.start() # 開始運行
t2.start()

os.system("pause")

於是我歡快地打開游戲開始測試

沒一點用!

我猜測是按鍵模擬失效,經查證發現,win32 采用的是系統級模擬,而要想實現D3D游戲內操作需要驅動級模擬,所以,這個方法廢了

接下來采用 keyboard 庫來實現驅動級模擬操作

2 采用 keyboard 庫實現操作

直接上代碼

``

import keyboard
import threading
import time

flag = 0 # 判斷什么時候開始按鍵
time1 = 0.001 # 延時

def on_presskey (name): # 監聽
    global flag
    a = keyboard.KeyboardEvent('down',0,'F2') # 獲取 F2(監聽按鍵)的按鍵數據
    
    if name != a: # 判斷監聽得到的按鍵數據跟 F2對應的按鍵數據 是否相等
        flag = 0
        print('沒按對呢')
    if name == a:
        flag = 1

def press(): # 開始按鍵
    global flag,time1
    while True:
        if flag == 1:
            keyboard.send('2') # 就簡單一行,實現模擬按鍵
            time.sleep(time1) # 延時,去了這個將會一直按鍵下去,哪怕你松開也是一樣
            print('輸出2')


keyboard.hook(on_presskey, ) # 主線程一直監聽

t2 = threading.Thread(target=press,name='sendKey') # 次線程開始連按

t2.start()

測試效果不錯,在文本編輯器上完美實現連按,按下就開始,不按就停

游戲里依然無效????

結語

啊 我放棄了,目前分析來看,是lol自己帶的有保護,具體怎么過並沒搜到解決方法。

但這次嘗試還是學到了不少關於api的東西哈哈

結果最后還是回去用按鍵精靈了(哭)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM