【个人云盘连接助手】解决多个用户账号无法同时映射到本地磁盘问题

news2024/11/23 21:09:31

问题

家里买了个联想个人云盘,但是使用SAMBA映射到windows本地磁盘时,每次只能连接到一个账户上,于是想着写个小工具,方便切换多个用户账户,自动映射到本地磁盘

开发简介

开发语言:python
主要实现功能:

  • 通过配置文件配置要连接的账户信息
  • 选择不同账户时能够自动连接上并映射到本地磁盘

相关界面

主界面:
在这里插入图片描述
配置文件:
在这里插入图片描述

主要源码

net_store_switch.py

import os
import sys
# 导入QT,其中包含一些常量,例如颜色等
from functools import partial

from PyQt5 import QtCore, QtWidgets
# 使用调色板等
from PyQt5.QtGui import QIcon
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow

import NetStoreSwitchWindow
import tools.system_tool as system_tool
from tools import file_tool


# pyinstaller -F -i favicon.ico -w net_store_switch.py -n 联想个人云盘连接助手
class MainWindow(QMainWindow, NetStoreSwitchWindow.Ui_Dialog):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        start_top = -10
        for index, user_info in enumerate(user_list):
            start_top += 50
            user = user_info['user']
            password = user_info['password']
            name = user_info['name']
            globals()[f'pushButton{index}'] = QtWidgets.QPushButton(self)
            globals()[f'pushButton{index}'].setGeometry(QtCore.QRect(20, start_top, 261, 41))
            globals()[f'pushButton{index}'].setObjectName(f'pushButton{index}')
            globals()[f'pushButton{index}'].setText(f'映射[{name}]的云盘到[{disk_flag}]盘')
            globals()[f'pushButton{index}'].clicked.connect(partial(self.button_clicked, user_info))
        start_top += 10
        self.setMinimumSize(QtCore.QSize(303, 46 + start_top))
        self.setMaximumSize(QtCore.QSize(303, 46 + start_top))

        self.setWindowIcon(QIcon('favicon.ico'))
        self.setWindowTitle(title)
        self.statusLabel.setText(self.get_status())

    def button_clicked(self, user_info):
        sender = self.sender()
        print(sender.text())
        print(user_info)
        user = user_info['user']
        password = user_info['password']
        name = user_info['name']
        system_tool.command('net use * /delete /y')
        system_tool.command(rf'net use {disk_flag} \\{ip_address}\{user} /user:{user} ' + password + " /persistent:yes")
        os.system('start explorer')
        self.statusLabel.setText(f'已连接到[{name}]个人云盘')

    def get_status(self):
        status = "当前未连接到个人云盘"
        result = system_tool.command('net use')
        if system_tool.is_ok(result):
            data = result["data"]
            for user_info in user_list:
                user = user_info['user']
                name = user_info['name']

                if data.find(user) >= 0:
                    status = f"已连接到[{name}]个人云盘"
                    break
        return status


if __name__ == '__main__':
    config_file_path = file_tool.root_dir('configs.json')
    configs = file_tool.read_configs(config_file_path)
    print(configs)
    title = configs['title']
    ip_address = configs['ip_address']
    disk_flag = configs['disk_flag']
    user_list = configs['user_list']
    app = QApplication(sys.argv)
    # 创建一个主窗口
    mainWin = MainWindow()
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

NetStoreSwitchWindow.py


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(303, 246)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
        Dialog.setSizePolicy(sizePolicy)
        Dialog.setMinimumSize(QtCore.QSize(303, 246))
        Dialog.setMaximumSize(QtCore.QSize(303, 246))
        self.statusLabel = QtWidgets.QLabel(Dialog)
        self.statusLabel.setGeometry(QtCore.QRect(30, 10, 241, 16))
        self.statusLabel.setObjectName("statusLabel")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "联想个人云盘助手"))
        self.statusLabel.setText(_translate("Dialog", "当前未连接到联想个人云盘"))

工具下载

https://download.csdn.net/download/guangdeshishe/89436365

解压后参考样例配置configs.json文件即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jeecg在线表单开发模式保存表时报The jdbcUrl is Null, Cannot read database type

报错信息如图 原因分析 使用jeecg框架 数据库使用的是DM数据库,在JeecgSystemApplication中,使用了注解过滤DruidDataSourceAutoConfigure,配置文件使用的是多数据源的方式 会出现这种情况 源码分析 getOnlineDataBaseConfig方法的dataBa…

一些硬件知识(十)

MOS管当开关控制时,一般用PMOS做上管,NMOS做下管 细说MOS管知识-MOS管高端驱动与低端驱动解析和原理及区别_高端功率 mos 管是什么意思-CSDN博客 PMOS管: PMOS管的源极(Source)通常连接到正电源(Vcc&#…

怎么找抖音视频素材?在哪里找爆款热门的素材呢?

在短视频时代,拍摄和分享短视频已经成为一种潮流。但是,许多人都会面临一个问题,那就是——视频素材从哪里来?今天,我将为大家介绍几个优质的网站,让你的视频素材不再愁。 蛙学府:https://www.…

Matlab|基于V图的配电网电动汽车充电站选址定容-可视化

1主要内容 基于粒子群算法的电动汽车充电站和光伏最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站和分布式光伏的选址定容问题,提出了能够计及地理因素和服…

[大模型]ChatTTS Windows安装(CPU)

简介 ChatTTS是专为对话场景设计的语音生成模型,配合生成式大大语言模型,现在人人都可以拥有一个自己的贾维斯。 本文主要运行在windows环境下,目前只能cpu运行 cuda在windows上运行暂时会报错(截止2024-6-16),目前博主暂无解决方…

芯片验证分享7 —— 代码审查1

大家好,我是谷公子,前几节课给大家分享了如何设计激励,今天我们来如何进行代码审查。 之前讨论的是基于计算机的验证技术,现在讨论非基于计算机的验证过程(即“人工验证”,或代码审查)。代码审查在查找错误方面非常有…

从零到爆款:用ChatGPT写出让人停不下来的短视频文案

一、前言 在自媒体的浪潮中,精彩的短视频文案对内容传播至关重要。众多辅助工具之中,凭借强大的语言处理能力和广泛的应用场景,ChatGPT成为了内容创作者的重要助力。接下来,我将介绍如何借助ChatGPT编写引人入胜的短视频文案&…

HarmongOS打包[保姆级]

创建应用 首先进入 华为开发者联盟-HarmonyOS开发者官网 然后进行登录。 登录成功后,鼠标悬停在在登录右上角那个位置后再点击管理中心,进入下面这个界面。 再点击:应用服务–>应用发布–>新建–>完善信息 构建和生成私钥和证书请求…

尚品汇-(二)

本地域名解析器:当我们在浏览器输入域名的时候,它首先找的不是远程的DNS,而是去本地的host中去找这个域名有没有对应的,如果有对应的,那么就根据对应的ip进行访问 一:环境安装 1.安装JAVA 运行环境 第一…

PyCharm添加库

在这里插入图片描述 pip install python-docx openpyxl

模拟电子技术基础(二)--PN结

PN结的本质 芯片都是由硅晶体制成,单个硅原子最外层有带有4个电子 在纯硅当中这些电子会两两形成共价键,此时周围形成非常稳定的八电子结构 在一个回路中,灯泡不亮,不导通,因为电池无法吸引其中的电子离开&#xff0c…

Passper for ZIP 安装教程 (ZIP密码恢复软件)

前言 Passper for ZIP是一款功能强大且实用的ZIP密码恢复软件。当你忘记了压缩包的密码时,这个工具可以轻松解决这个问题。只需按照界面上的提示操作,选择文件,然后选择解码的方式,即可轻松等待恢复完成。该软件支持四种密码恢复…

JS中的延时操作setTimeout()和setInterval()

JS中,给我们提供两种延时操作的内置方法setTimeout()和setInterval()。setTimeout和setInterval方法都是挂载在javascript的window对象下,通过两个参数控制,第一个参数控制运行的表达式或方法,第二个参数表示延时的时间&#xff0…

Stable Diffusion 3 开源了,完全不输 Midjourney

Hi,大家好。我是茶桁。 前段时间我介绍过一款文字生视频的 AI 工具:SadTalker, 当时咱们是作为 Stable Diffusion 的插件来安装的。 那基于 Stable Diffusion 呢,咱们今天就来聊聊新开源的 Stable Diffusion 3。 在文字生成图片…

ubuntu20.04桌面蓝屏问题解决

前些天做仿真项目,遇到了ubuntu蓝屏问题,于是想着找几个参考办法修复,但不管用,疑似是重要组件损坏。 损坏的原因是强制关机,但究竟是强制关了哪一个卡死的进程,不得而知,我有一个关不掉的仿真…

【踩坑日记】I.MX6ULL裸机启动时由于编译的程序链接地址不对造成的程序没正确运行

1 现象 程序完全正确,但是由于程序链接的位置不对,导致程序没有正常运行。 2 寻找原因 对生成的bin文件进行反汇编: arm-linux-gnueabihf-objdump -D -m arm ledc.elf > ledc.dis查看生成的反汇编文件 发现在在链接的开始地址处&…

vue格网图

先看效果 再看代码 <n-gridv-elsex-gap"20":y-gap"20"cols"2 s:2 m:3 l:3 xl:3 2xl:4"responsive"screen" ><n-grid-itemv-for"(item,index) in newSongList":key"item.id"class"cursor-pointer …

进程信号(下)

上文&#xff1a;进程信号&#xff08;上&#xff09;-CSDN博客 在上篇中&#xff0c;我们讲了关于信号的保存&#xff0c;信号集的操作&#xff0c;那么这篇我们就来看看信号的原理。 目录 1. 键盘产生信号的原理 2. 信号是如何被处理的&#xff1f; 2.1 信号处理的原理 …

5.Sentinel入门与使用

5.Sentinel入门与使用 1.什么是 Sentinel?Sentinel 主要有以下几个功能: 2.为什么需要 Sentinel?3.Sentinel 基本概念3.1 什么是流量控制?3.1.1 常见流量控制算法3.1.2 Sentinel 流量控制流控效果介绍如下: 3.2 什么是熔断?熔断策略 3.3 Sentinel 组成&#xff08;资源和规…

Matlab信号与系统实验-实验四 连续时间系统的复频域分析

一、实验目的 1、理解拉普拉斯变换、逆变换的定义&#xff0c;掌握利用MATLAB实现解拉普拉 斯变换、逆变换的的方法&#xff1b; 2、掌握几种基本信号的拉普拉斯变换&#xff1b; 3、掌握利用MATLAB绘制连续系统零、极点的方法&#xff1b; 4、掌握系统函数H(s)的求解。 二…