鱼C论坛

 找回密码
 立即注册
查看: 306|回复: 1

Windows右键功能的原理

[复制链接]
发表于 2023-12-6 10:22:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近在做windows开发,想知道在鼠标右键单击文件能实现的复制文件路径、打开文件属性、复制等功能,底层是怎么实现的。
我想实现右键单击一个文件,就能读到这个文件的绝对路径(比如,右键点击一个文件,在命令行打印它的路径)但不知道该如何下手,有没有人可以不吝指点迷津,万分感谢!!求助求助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-6 10:23:38 | 显示全部楼层
Windows右键功能是通过Windows Shell实现的。Windows Shell是Windows操作系统提供的一组用于管理用户界面、文件操作和进程管理的API。

要实现右键单击文件能够读取文件的绝对路径,你可以使用Python的winreg模块来获取注册表中与文件关联的命令行。具体步骤如下:

1. 导入所需的模块

  
  1. import winreg
  2.    import ctypes
复制代码

2. 定义一个函数来获取文件的绝对路径,并在命令行中打印出来

  
  1. def get_file_path():
  2.        # 获取文件路径
  3.        file_path = ctypes.windll.shell32.CommandLineToArgvW(ctypes.c_wchar_p(win32api.GetCommandLine())).value[1]
  4.        print(file_path)
复制代码

3. 注册一个右键菜单项

  
  1. def register_right_click_menu():
  2.        # 在注册表中创建一个新的键
  3.        key_path = r"Software\Classes\*\shell\PythonScript"
  4.        key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, key_path)
  5.    
  6.        # 设置右键菜单显示的名称
  7.        winreg.SetValue(key, None, winreg.REG_SZ, "Get File Path")
  8.    
  9.        # 在右键菜单项下创建一个子键,用于添加命令行
  10.        sub_key_path = r"Software\Classes\*\shell\PythonScript\command"
  11.        sub_key = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, sub_key_path)
  12.    
  13.        # 设置子键的默认值为我们定义的函数
  14.        winreg.SetValue(sub_key, None, winreg.REG_SZ, "pythonw.exe C:\\path\\to\\your\\script.py")
复制代码

4. 调用函数

  
  1. if __name__ == '__main__':
  2.        register_right_click_menu()
复制代码

在这个例子中,我们在注册表中创建了一个新的键,并设置了右键菜单显示的名称为"Get File Path"。然后,在这个键下创建了一个子键,用于添加一个命令行,将会调用我们定义的函数来获取文件路径。

请注意替换示例代码中的"C:\\path\\to\\your\\script.py"为你的脚本路径。当你右键点击一个文件并选择"Get File Path"菜单项时,会调用你的脚本,并在命令行中打印出文件的绝对路径。

希望这个示例可以帮助到你,祝你在Windows开发中取得成功!

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 15:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表