该文章展示了通过移动端向pc端发送命令消息, python获取消息命令并做出相应操作, 实现了对音乐软件的 播放/暂停、切歌、音量加减、添加喜欢的操作。具体内容看代码及其注释。
【开发该软件的操作系统】:windows10
【软件开发环境/开发工具】:PyCharm 2021.3 X64
【解释器版本】:Python 3.10
【编程语言】:Python
【开发目的】: 供初学者参考学习, 增加学习兴趣
【开发者】:20届牛马毕业生_迪焱
———————————————————————————————————————————
import os
import pyautogui
import psutil
def judgeprocess(processname='cloudmusic.exe'): # 定义函数判断程序是否运行, 默认判断网易云音乐是否运行
pl = psutil.pids() # 用psutil模块中的pids()方法获取电脑已运行程序的pid列表
print(type(pl))
for pid in pl: # for循环遍历pl列表(上述获得的已运行程序的pid列表)
if psutil.Process(pid).name() == processname: # 判断: 将pid对应的name和cloudmusic.exe对比, 若相等, 则说明网易云音乐已运行
return pid # if成立, 返回对应的pid
else: # for循环遍历结束, 进入else条件
return None # for循环遍历结束, 说明对应程序没有运行, 此时返回None
process = judgeprocess() # 调用judgeprocess()函数, 查看网易云音乐是否运行, 并把返回结果赋值给process
while not process: # 当process值为空时, 说明网易云音乐没有运行, 进入while循环(非空即为真)
print("网易云音乐未启动, 将再次尝试启动网易云音乐") # 向控制台输出提示
pyautogui.sleep(1) # 暂停1秒, 再进行后面的代码
pyautogui.hotkey('ctrl', 'alt', 'y') # 利用快捷键启动网易云音乐(快捷键需要提前设置好)
pyautogui.sleep(2) # 暂停2秒
process = judgeprocess() # 再次调用judgeprocess()函数, 查看网易云音乐是否运行
if process: # 判断变量 process 的值是否为空, 不为空时, 说明网易云音乐已经运行并进入if条件; 为空时, 会再次进行该while循环, 启动网易云音乐
print('网易云音乐已启动') # 向控制台输出提示
break # 结束while循环
else: # while循环结束, 且没有不是因为break结束时, 进行else条件(人话: 网易云音乐已运行, 跳过while循环, 进入else)
print('网易云音乐已启动') # 向控制台输出提示
pyautogui.sleep(1) # 暂停1秒
while True: # 该while是为了循环读取文件, 对网易云音乐进行控制
list_qq = os.listdir(r'E:\qq记录\MobileFile') # 利用os模块的listdir()方法, 读取手机QQ向电脑QQ发送的信息
list_png = [] # 定义一个空列表
for file in list_qq: # for遍历上面得到的信息
if 'music_ctrl_' in file: # if判断上面的信息里是否有音乐控制命令(控制命令提前设置好)
list_png.append(file) # 将该命令添加到list_png的列表中
while list_png: # 当list_png列表中有控制命令时, 进入while循环
print(list_png) # 向控制台输出控制命令(给用户的提示)
control = list_png[0] # 取出list_png列表中的第一个控制命令
if 'next' in control: # 判断控制命令是否是 next(下一首)
print('next') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'right') # 利用快捷键实现 next(下一首) 操作
elif 'previous' in control: # 判断控制命令是否是 previous(上一首)
print('previous') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'left') # 利用快捷键实现 previous(上一首) 操作
elif 'like' in control: # 判断控制命令是否是 like(喜欢)
print('like') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'l') # 利用快捷键实现 like(喜欢) 操作
elif 'Volume-' in control: # 判断控制命令是否是 Volume-(音量减小)
print('Volume-') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'down') # 利用快捷键实现 Volume-(音量减小) 操作
elif 'Volume+' in control: # 判断控制命令是否是 Volume+(音量增加)
print('Volume+') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'up') # 利用快捷键实现 Volume+(音量增加) 操作
elif 'play' in control: # 判断控制命令是否是 play(播放/暂停)
print('play') # 再次向控制台输出提示
pyautogui.hotkey('ctrl', 'alt', 'p') # 利用快捷键实现 play(播放/暂停) 操作
if os.path.exists(rf'E:\qq记录\MobileFile\{control}'): # 判断控制命令的文件是否存在, 若存在进入if条件
os.remove(rf'E:\qq记录\MobileFile\{control}') # 将对应的控制命令文件删除
list_png.remove(control) # 将对应的控制命令文件从list_png列表中删除
pyautogui.sleep(2) # 暂停2秒
pyautogui.countdown(5) # 暂停5秒
最后, 我用的是QQ向电脑发送图片信息,然后用python代码去获取命令, 为什么是发送图片呢?
因为这是我发现这是python获取移动端发来命令最便捷的方式, 只要对命令消息的格式进行规范即可, 如果是文字信息, 会被加密, python获取信息时就不是很方便。
上述的操作都是基于图片名称进行的, 所以图片是什么不重要, 但是图片的命名一定要规范。
再多说一句, 可以用pyinstaller模块将该代码生成.exe程序, 这样运行该代码时,就不用启动pycharm了。(具体怎么操作自行百度)
最后的最后, 放出我用的图片命令。 名称中的 music_ctrl 用来判断该图片是否是音乐控制命令,后面的部分用来判断是何命令(后缀自行忽略)。