源碼
文章開頭先上成品(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查看。
安裝后,就會得到打包后的應用程序:
准備工作
此程序需要用到的兩個模塊——pymouse和keyboard中,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行中的windows為pymouse.windows:
這里用的編輯器是notepads,錄制GIF使用的是GifCam
02 安裝pywin32
如果已經安裝pywin32,可以跳過。安裝pywin32是為了使用win32api。
03 安裝pyHook
pyHook無法使用pip安裝,你需要前往www.lfd.uci.edu下載pyhook的whl文件,這也是為什么不能使用3.8版本的原因——pyhook暫時沒有3.8版本:
在文件名中,cp指python版本,win32或win_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_type
與x.name
分別指檢測到的鍵盤事件的類型(按下還是彈起)與按鍵名mouse.click
與mouse.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下載的那個樣子。
效果
程序寫好了,最后來看看效果:
草(一種植物)
害,我我我等下次數學課的時候,再試試吧(數學課可以點贊)。
不過,我肯定是會保證連點器可用的: