「PyMouse」做個連點器給老師點贊


源碼

文章開頭先上成品(Command Line Mouse Clicker):

from pymouse import PyMouse
import time
import keyboard
tutorial = """
使用教程:
此程序開始運行后,首先,你可以輸入連點間隔。
隨后,程序進入連點模式,按住p,程序就會開始連點。
按下Q可以退出連點模式,並重新設置連點間隔。
需要注意的是,實際連點間隔最終取決於系統性能,可能會與設定值有一定差距。
Powered by AbsoCube
"""
print(tutorial)
mouse = PyMouse()


def GetInterval():
    while True:
        inter = input("輸入連點間隔:")
        try:
            inter = float(inter)
        except ValueError:
            print("連點間隔需要是浮點數")
        else:
            print("成功設置連點間隔")
            break
    return inter


press = False
interval = GetInterval()
point = time.time()


def key(x):
    global press, interval, point
    p = keyboard.KeyboardEvent('down', 28, 'p')
    q = keyboard.KeyboardEvent('down', 28, 'q')
    if x.event_type == 'down' and x.name == p.name:
        press = True
    elif x.name == p.name:
        press = False
    if x.event_type == 'down' and x.name == q.name:
        interval = GetInterval()
    if press and time.time()-point >= interval:
        mouse.click(mouse.position()[0], mouse.position()[1], 1)
        point = time.time()


keyboard.hook(key)
keyboard.wait()

並且,這一連點器已經release,前往GitHub查看

安裝后,就會得到打包后的應用程序:

成品

准備工作

此程序需要用到的兩個模塊——pymousekeyboard中,keyboard安裝比較簡單,直接pip即可,但pymouse在pip后還需要做一些工作(否則我也不會單獨拿出來說)。

首先,確保你的Python版本為3.7版本或更低(即不能使用3.8),否則,pymouse無法使用。

01 修改__ init __.py

找到pymouse的源文件,如果你不知道它在哪里,可以重新pip,系統會告訴你:

C:\Users\absoc>pip install pymouse
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: pymouse in c:\users\absoc\appdata\local\programs\python\python37\lib\site-packages (1.0)

那么,你就可以在c:\users\absoc\appdata\local\programs\python\python37\lib\site-packages目錄下找到pymouse文件夾,並在其中找到__ init __.py文件。

接下來,修改92行中的windowspymouse.windows
修改pymouse源文件

這里用的編輯器是notepads,錄制GIF使用的是GifCam

02 安裝pywin32

如果已經安裝pywin32,可以跳過。安裝pywin32是為了使用win32api

03 安裝pyHook

pyHook無法使用pip安裝,你需要前往www.lfd.uci.edu下載pyhook的whl文件,這也是為什么不能使用3.8版本的原因——pyhook暫時沒有3.8版本:

安裝pyHook

在文件名中,cp指python版本,win32win_amd64指32位和64位,要根據系統和python版本進行選擇。

這樣的話,pymouse的使用就沒有什么問題了。

分析源碼

input的模塊不多說,我們只看看這一部分:

def key(x):
    global press, interval, point
    p = keyboard.KeyboardEvent('down', 28, 'p')
    q = keyboard.KeyboardEvent('down', 28, 'q')
    if x.event_type == 'down' and x.name == p.name:
        press = True
    elif x.name == p.name:
        press = False
    if x.event_type == 'down' and x.name == q.name:
        interval = GetInterval()
    if press and time.time()-point >= interval:
        mouse.click(mouse.position()[0], mouse.position()[1], 1)
        point = time.time()


keyboard.hook(key)
keyboard.wait()

這里面:

  • keyboard.KeyboardEvent指鍵盤事件,用於和檢測到的鍵盤事件進行匹配(第一個參數指事件類型,第二個參數指按鍵編號,這個無所謂,如果不知道詳細的按鍵編號,可以隨便填,第三個參數是按鍵名稱)
  • x.event_typex.name分別指檢測到的鍵盤事件的類型(按下還是彈起)與按鍵名
  • mouse.clickmouse.position分別指模擬鼠標點擊和獲取鼠標位置(元組)
  • keyboard.hook指鍵盤監聽,一旦有按鍵按下/彈起,就會觸發傳遞的函數
  • keyboard.wait指等待一個指定按鍵按下,如果沒有參數,就會不斷監聽這句之前的按鍵

其邏輯就是,按下p時,flag press設為True,松開p時,flag press設為False,按下q時,重新設置間隔時間。在flag press為True時,如果與上次點擊的間隔事件超過了設定值,就再次點擊。

關於打包

打包的話,首先使用pyinstaller將源碼打包成可執行文件:

pyinstaller F:\Code\Mouse_Clicker\Clicker.py

當然,你也可以設定其他參數。

然后,使用Smart Install Maker將可執行文件打包成安裝包,就成了你從release下載的那個樣子。

效果

程序寫好了,最后來看看效果:

試圖給老師點贊

草(一種植物)

害,我我我等下次數學課的時候,再試試吧(數學課可以點贊)。

不過,我肯定是會保證連點器可用的:

CPS測試


免責聲明!

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



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