# 5.2：基于 Python 的文件

截至 2023 年 3 月 27 日，Python 是世界上最流行的编程语言之一（[PYPL 排行榜页面](https://pypl.github.io/PYPL.html)）。

{% hint style="info" %}
"Python" 和 Python 徽标是 Python 软件基金会的商标或注册商标。

本文并不会深入讲解 Python 语言，您可以自行去其它网站学习了解。我们相信您一旦上手，就可以感受到它的威力。
{% endhint %}

使用 Python 语言编写各种脚本极为方便，灵活度很高。配合代码编辑器的语法高亮，还有效避免了传统批处理（ \*.BAT; \*.CMD; \*.WCS ）的语法混乱、文本编码混乱问题。从 Hikari PE V8.53 开始，已经内置了 Python 解释器和 pip。在未来的版本中，我们将逐步淘汰原本基于 PECMD 和传统批处理的加载脚本。

我们推荐使用 [Visual Studio Code](https://code.visualstudio.com/) 或 [PyCharm Community](https://www.jetbrains.com/pycharm/download/) 编写和修改 Python 脚本。修改完成后，可以使用它们重新格式化代码以提高可读性和美观性。

| Hikari PE 版本范围  | 内置的 Python 解释器版本       |
| --------------- | ---------------------- |
| V8.53 x64 和以上版本 | 3.9.13 (Windows amd64) |
| V9.0 x64 和以上版本  | 3.9.13 (Windows amd64) |

默认情况下，所有 Python 的文件均放置在了 `Windows\Python3\HiPEFunctions` 目录中。以下列表列举了所有 Python 文件以及关联文件的用途。点击蓝色高亮的文字就可以查看相关语法。

<table><thead><tr><th width="282">文件名</th><th>用途</th></tr></thead><tbody><tr><td><a href="#appname.json"><code>AppName.json</code></a></td><td>多语言本地化字符，以允许将同一套文件在多种语言下自适应</td></tr><tr><td><code>HiPEClassicLayout.py</code></td><td>经典桌面布局的加载程序</td></tr><tr><td><code>HiPEStartMenu.py</code></td><td>新版开始菜单布局的加载程序</td></tr><tr><td><a href="#hipestartmenu_config.py"><code>HiPEStartMenu_config.py</code></a></td><td>开始菜单、桌面图标、任务栏固定图标</td></tr><tr><td><code>SnippingTool.py</code></td><td>截图工具</td></tr></tbody></table>

### 可供用户修改的文件的语法

<details>

<summary>AppName.json</summary>

作为 JSON 文件，您的编辑需要符合 JSON 的语法格式。以下是一组本地化键值的示例。

```json
// 您需要将 internal_alias 改成对应的应用的识别编号
// 由于 Hikari PE Project 提供五种语言版本，必须完整提供以下所有语言的本地化字符名称
"internal_alias": {
    "en_US": "English Localized Name",
    "ja_JP": "日本語ローカライズ名",
    "ko_KR": "한국어 현지화 이름",
    "zh_CN": "简体中文的本地化名称",
    "zh_TW": "繁體中文的在地化名稱"
}
```

</details>

<details>

<summary>HiPEStartMenu_config.py</summary>

此文件中包含了四组可供用户修改的对象。当使用新开始菜单布局时，项目的先后顺序决定了图标显示的先后顺序。

#### primary\_menu\_entries

此对象为单层字典，每一个 key 的 value 内包含了具有四个元素的列表。四个元素是有明确顺序的，详见下述示例代码注释。这个对象内的所有元素均会以快捷方式添加到新开始菜单的”常用组件“分类以及经典布局的桌面上。

如果您添加的图标不需要启动参数、自定义图标、快捷方式描述，您也必须要留空而不得省略。

```python
# 调用 AppName.json 中指定的本地化名称时，key 的名称必须为以下格式：
# appName['internal_alias'][langcode]

# 如果您想使用固定的名称，请直接使用单引号指定您想要的名字：
# 'Your App Name'

primary_menu_entries = {
    appName['diskgen'][langcode]: [             # 应用的显示名称
        PFDir + '\\DiskGenius\\DiskGenius.exe', # 应用的实际路径
        '',                                     # 启动参数
        PFDir + '\\iconset\\diskgen.ico',       # 自定义图标
        ''                                      # 快捷方式描述
    ]
}

# 对于路径，请使用以下变量代替。后面的对象不再赘述。
# PFDir - X:\Program Files
# PFx86Dir - X:\Program Files (x86)
# SysDir - X:\Windows
# Desktop - X:\Users\Default\Desktop
# UPDir - X:\Users\Default
```

#### secondary\_menu\_entries

此对象为双层字典。第一层为应用分类，第二层则包含了该分类下的所有应用。这个对象内的所有元素均会以快捷方式添加到新开始菜单的”应用分类“栏目以及经典布局的开始菜单上。在新开始菜单布局下，您也可以通过修改每个元素的先后顺序决定每个图标的显示先后顺序。

```python
secondary_menu_entries = {
    appName['accessories_prog'][langcode]: {   # 程序组
        'PECMD': [                             # 应用的显示名称
            SysDir + '\\system32\\PECMD.exe',  # 应用的实际路径
            '',                                # 启动参数
            '',                                # 自定义图标
            ''                                 # 快捷方式描述
        ],
        appName['calc'][langcode]: [
            SysDir + '\\system32\\calc.exe',
            '',
            '',
            ''
        ],
        appName['notepad'][langcode]: [
            SysDir + '\\system32\\notepad.exe',
            '',
            '',
            ''
        ],
        appName['mspaint'][langcode]: [
            SysDir + '\\system32\\mspaint.exe',
            '',
            '',
            ''
        ],
        appName['cmd'][langcode]: [
            SysDir + '\\system32\\cmd.exe',
            '',
            '',
            ''
        ],
        appName['registryedit'][langcode]: [
            SysDir + '\\regedit.exe',
            '',
            '',
            ''
        ]
    }
}
```

#### bottom\_menu\_entries

此对象为单层字典，每一个 key 的 value 内包含了具有四个元素的列表。四个元素是有明确顺序的。这个对象内的所有元素均会以快捷方式添加到新开始菜单底部单独的文件夹图标，以及经典布局开始菜单程序列表的根目录上。

```python
bottom_menu_entries = {
    appName['showDrive'][langcode]: [           # 应用的显示名称
        SysDir + '\\system32\\LetterSwap.exe',  # 应用的实际路径
        '/MountAll',                            # 启动参数
        '',                                     # 自定义图标
        ''                                      # 快捷方式描述
    ],
    appName['reorderDriveAuto'][langcode]: [
        SysDir + '\\system32\\LetterSwap.exe',
        '/Auto',
        '',
        ''
    ],
    appName['reorderDriveByWindowsDir'][langcode]: [
        SysDir + '\\system32\\LetterSwap.exe',
        '/Manual',
        '',
        ''
    ]
}
```

#### taskbar\_pin\_entries

此对象为列表，列举了所有固定在任务栏托盘的图标。列表内的元素只允许使用在上述三组字典中被添加的所有快捷方式的显示名称。

```python
taskbar_pin_entries = [
    'Dism++',                      # 要固定在托盘的图标的显示名称
    appName['fritz'][langcode]
]
```

</details>
