移动端控制pc端音乐软件的播放等功能(使用os,pyautogui,psutil三个模块实现)

该文章展示了通过移动端向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 用来判断该图片是否是音乐控制命令,后面的部分用来判断是何命令(后缀自行忽略)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a1迪三火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值