python快速移动文件——添加到鼠标右键菜单

一位程序员为了节省移动文件的时间,编写了一个Python脚本,该脚本能够自动将指定文件夹内的文件剪切到另一个目录。脚本使用了os、shutil等模块,并通过pyautogui获取鼠标位置来确定提示信息的显示位置。此外,作者还分享了如何使用pyinstaller将脚本打包成exe文件,以及如何将其添加到注册表中以实现右键菜单调用。

懒惰是最大的动力(好像是诶)

一、懒惰行为解释

为了节省去特定文件夹移动文件的时间,所以写了一个脚本。

二、效果预览

看见那个QQ files move to here了吗,我懒得PS,你自己慢慢悟

三、过程

1、代码

import os
import shutil
import tkinter as tk
import tkinter.font as tfont
# import win32con, win32api
import time
import pyautogui
# from pynput.mouse import Listener
# import subprocess
import sys

# 获取鼠标所在位置,为了定位
mouse_x, mouse_y = pyautogui.position()

# 弹出的提示个数
prompt_number = 0


# 剪切到指定位置
def cut_file(new_directory):

    old_directory = r"C:\Users\57493\AppData\Local\Packages\903DB504.QQ_a99ra4d2cbcxa\LocalState\User\574937561\NetworkFile"

    for i in os.listdir(old_directory):

        if i != "Preview" and i != "Temp" and i != "Thumbnail":

            old_path = os.path.join(old_directory, i)

            new_path = os.path.join(new_directory, i)

            result = shutil.move(old_path, new_path)

            if not result:

                view_warning("文件“" + i + "”转移失败!可能是文件不存在或者其它原因!")

                continue

    view_warning("成功!")

    return 0


# 失败提示
def view_warning(text):

    global mouse_y

    time_start = time.time()

    tk0 = tk.Tk()

    tk0.title("提示")

    # 去掉边框
    tk0.overrideredirect(True)

    font = tfont.Font(family="楷体", size=12)

    width, height = 400, 300

    # 获取屏幕的长和宽
    # screen_width = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)
    # screen_height = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)

    # 提示在屏幕的位置(x,y)
    location_x = int(mouse_x - width / 2)
    location_y = int(mouse_y - height / 5)

    tk0.geometry("+" + str(location_x) + "+" + str(location_y))

    mouse_y = mouse_y - 30

    tk.Label(tk0, text=text, font=font).pack(anchor=tk.CENTER)

    # 若隐又若现,你还想看见(押韵了)
    for i in range(1, 11):
        # 窗口透明度
        tk0.attributes("-alpha", 0.1 * i)

        time.sleep(0.1)

        tk0.update()

    for i in range(10, -1, -1):
        # 窗口透明度
        tk0.attributes("-alpha", 0.1 * i)

        time.sleep(0.1)

        tk0.update()

    # 定时爆破提示,这样函数才能有返回值
    if time.time() - time_start >= 2.2:

        tk0.quit()

        tk0.destroy()

        mouse_y = mouse_y - 40

        return 0

    # 固定窗口大小
    tk0.resizable(0, 0)

    tk0.mainloop()

    return 0


if __name__ == "__main__":

    # 捕捉外部参数,并执行后续操作,argv[0]是程序本身
    cut_file(sys.argv[1])

2、打包成exe程序(用Cmd执行)

pyinstaller -F "Z:\PY_Files\DODODO\test7.py" -w -i "Z:\PY_Files\DODODO\icon.ico" --distpath "Z:\PY_Files"
# -F后面是python文件的位置,-i是图标的位置,--distpath是保存地址,-w取消黑框框(DOS)

3、添加到注册表中

在这里插入图片描述

# 默认项的值是显示在右键
# Icon是图标的地址,可以直接用.exe的图标

在这里插入图片描述

# command是要执行的命令,指向程序地址

在这里插入图片描述

# %V意思是将文件地址传递给程序,然后系统再执行打开程序的命令
# 其它的命令我也不是太懂,这也是一点点试的,可以参考其它程序是怎么写的

四、总结

本来是要展示利用pyinstaller自动打包.exe程序代码的,结果下午测试代码出Bug,害我在浪费了一个多小时找问题,下次有时间再展示。程序实现后功能就是剪切,我就不展现了。

加油、努力。。

### 使用 PyAutoGUI 实现鼠标右键点击操作 PyAutoGUI 是一个功能强大的 Python 库,能够轻松实现对鼠标的控制,包括左键、右键点击等操作[^1]。为了模拟鼠标右键点击文件的操作,可以通过 `pyautogui.rightClick(x, y)` 方法指定屏幕上某个位置进行右键单击。 以下是具体代码示例: ```python import pyautogui import time # 延迟等待以便手动调整窗口到合适的位置 time.sleep(3) # 获取当前鼠标坐标 (可选) current_mouse_position = pyautogui.position() print(f"Current Mouse Position: {current_mouse_position}") # 移动鼠标到目标文件所在位置并执行右键点击 target_x, target_y = 500, 300 # 替换为目标文件的实际坐标 pyautogui.moveTo(target_x, target_y, duration=0.5) # 平滑移动鼠标至目标位置 pyautogui.rightClick(target_x, target_y) # 执行右键点击 ``` 上述代码中,`duration=0.5` 参数用于设置鼠标平滑移动的时间间隔(秒),从而让动作更加自然。需要注意的是,在实际运行前需确认目标文件的具体屏幕坐标 `(x, y)` 或者通过图像识别技术动态定位文件位置。 当涉及更复杂的场景时,比如需要根据文件图标而非固定坐标来触发右键菜单,则可以结合 OCR 技术或屏幕截图匹配方法进一步增强脚本的功能性。 #### 屏幕截图与图像识别扩展 如果希望基于视觉反馈找到特定文件再执行右键操作,可以利用 OpenCV 或 Pillow 进行图片处理配合 PyAutoGUI 完成任务。下面展示了一个简单框架示意如何查找目标区域后实施交互行为: ```python from PIL import ImageGrab import numpy as np import cv2 import pyautogui def locate_image_on_screen(template_path): screen = np.array(ImageGrab.grab()) # 截取全屏画面 gray_screen = cv2.cvtColor(screen, cv2.COLOR_BGR2GRAY) template = cv2.imread(template_path, 0) # 加载模板图 res = cv2.matchTemplate(gray_screen,template,cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) if max_val >= 0.8: # 设置相似度阈值判断是否存在匹配项 return max_loc # 返回最佳匹配点的左上角坐标 else: raise Exception("Target image not found on the screen.") try: location = locate_image_on_screen('file_icon.png') # 提供待搜寻的目标文件图标路径 center_point = ( int(location[0]+template.shape[1]/2), # 计算中心点X轴坐标 int(location[1]+template.shape[0]/2)) # Y轴同理 pyautogui.click(center_point[0],center_point[1]) # 鼠标移至此处做相应事件 except Exception as e: print(e) ``` 此部分展示了高级用法——借助计算机视觉算法精确定位对象后再施加操控。 ### 注意事项 尽管 Python 结合 RPA 能够极大提高工作效率,但也应注意其局限之处。例如 UI 编程方面尚存不足,某些情况下仍推荐采用专门针对图形界面优化的语言和技术栈构建最终产品[^2]。此外遵循良好的命名习惯有助于维护项目质量及长期发展需求[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值