Windows 如何打开和编辑.lnk文件

news2024/11/25 13:23:45

文章目录

    • 一、背景
    • 二、查看/修改`.lnk`文件内容
      • 方案1:用`type命令`查看
      • 方案2:更改`.lnk`文件后缀为`.txt`再查看
      • 方案3:用`记事本`或`NodePad++`打开
      • 方案4:使用`HxD hex editor`十六进制编辑器
      • 方案5:使用第三方库查看或编辑
        • 1. `Matmaus/LnkParse3` 库
          • 1)`get_json()`输出解析内容(无格式化)
          • 2)`print_lnk_file()` 输出解析内容(自带格式化)
          • 3)`ldata.print_json()` 输出解析内容(自带格式化)
        • 2. `strayge/pylnk`库
          • 1)解析已有的`.lnk`文件
          • 2)更改已有的`.lnk`文件
          • 3)从零开始创建新的`.lnk`文件
    • 三、总结

一、背景

  • Windows系统中,快捷方式是最最常见的文件了。
    .lnk后缀的文件,后缀可能是隐藏的)
  • 点击.lnk后缀的文件,会打开其关联的目标对象。
    (目标对象可以是本地或网络程序、文件、文件夹、计算机、Internet 地址等等)
  • 大多数人永远都不会需要打开.lnk文件进行查看或编辑它。
    注意这里说的是.lnk文件本身,而不是它链接的目标文件,当然也不是在说右键>属性查看/编辑.lnk文件属性
  • 我也差点成为大多数人中的一员,直到前几天我在写一个批处理时,发现命令提示符.lnk快捷方式打开的dos窗口,与cmd.exe 程序打开的dos窗口,两者窗口的属性配置竟然不一致,后者的属性配置是从注册表加载的,而前者属性配置会不会是从.lnk文件本身读取的呢?
    (如果你从没有修改过cmd.exe.lnk打开的dos窗口的属性,那它们的属性配置都是默认值,都一样。这里就不细说了,感兴趣的可以看我的另一篇文章:Windows 不同方式打开的cmd/dos窗口属性配置不同)

为了探究命令提示符.lnk文件中是否存储了dos窗口属性配置信息,于是我有了想要查看.lnk文件内容的需求,接下来就我尝试多的几种方案做下总结。

二、查看/修改.lnk文件内容

(温馨提示:方案1~4 都是失败的方案,方案5 才是成功的方案,你可以直接跳到 方案5)

方案1:用type命令查看

通过type命令在DOS窗口查看.lnk文件内容
格式:type path_to_lnk_file
使用type命令查看.lnk文件内容
或者结合重定向将内容输出到.txt文件中,示例:

C:\Users\cyinl>type Desktop\cmd.lnk > cmd_content.txt

总结:方案1,输出文件内容是乱码,基本没法看,更别说修改了。。。不可取

方案2:更改.lnk文件后缀为.txt再查看

因为多数人电脑上.lnk后缀不显示,所以重命名改后缀的方式不太可行,
这里推荐使用cp命令复制.lnk文件,新文件使用.txt后缀,示例:

C:\Users\cyinl>copy Desktop\cmd.lnk cmd_content2.txt
已复制         1 个文件。

在这里插入图片描述
总结:方案2,查看到的内容也是乱码,不可取。(实质上跟方案1中的重定向生成的.txt文件一样)

方案3:用记事本NodePad++打开

注意:不要用 文件>打开 的方式打开,而是直接把.lnk文件拖到记事本或NodePad++窗口
用nodepad++打开lnk文件
你也可以在dos窗口,使用编辑器应用程序运行.lnk文件,如使用notepad.exe程序,打开.lnk文件:

C:\Windows\System32>notepad.exe C:\users\cyinl\Desktop\cmd.lnk

在这里插入图片描述

总结:方案3,查看到的内容也是乱码,不可取

方案4:使用HxD hex editor十六进制编辑器

HxD官网下载地址:HxD hex editor
HxD 下载安装完成后,通过拖拽或文件>打开方式,打开.lnk文件
HXD打开lnk文件
总结:方案4,以十六进制打开lnk文件,但是转换出来的文本仍有乱码,阅读性差。虽然查看及编辑lnk文件,但是一般人真编辑不来。。。不可取

方案5:使用第三方库查看或编辑

在Python的库里我体验了几个.lnk相关的库,这里推荐两个觉得不错的。
建议可以先了解下关于.lnk二进制文件格式的有关知识:
[MS-SHLLINK]: Shell Link (.LNK) Binary File Format

1. Matmaus/LnkParse3

GitHub仓库:Matmaus/LnkParse3

特点:

  1. 简单易用,官网文档详细;
  2. 解析lnk文件输出信息比较全,格式也漂亮;
  3. 支持cli、python package 两种使用方式;
  4. 但这个库仅解析lnk文件,不支持编辑或创建。

详细的介绍、安装和使用方式见官网
这里使用 python package 方式演示,cli命令行的方式参考官网自行体验吧。

# -*- coding:utf-8 -*-
import LnkParse3
with open("C:\\Users\cyinl\Desktop\cmd.lnk","rb") as lf:
    ldata = LnkParse3.lnk_file(lf)
    print(ldata.get_json())    # 获取解析数据,未格式化的json格式
    ldata.print_json()         # 打印输出格式化后的json数据
    ldata.print_lnk_file()     # 打印输出文本形式的数据,也有漂亮的格式

获取.lnk文件解析内容的方式如下:

1)get_json()输出解析内容(无格式化)
{'header': {'guid': '00021401-0000-0000-C000-000000000046', 'r_link_flags': 989, 'r_file_flags': 0, 'creation_time': None, 'accessed_time': None, 'modified_time': None, 'file_size': 0, 'icon_index': 0, 'windowstyle': 'SW_SHOWNORMAL', 'hotkey': 'UNSET - UNSET {0x0000}', 'r_hotkey': 0, 'link_flags': ['HasTargetIDList', 'HasName', 'HasRelativePath', 'HasWorkingDir', 'HasIconLocation', 'IsUnicode', 'ForceNoLinkInfo', 'HasExpString'], 'file_flags': []}, 'data': {'description': '@%windir%\\system32\\shell32.dll,-22534', 'relative_path': '..\\..\\..\\WINDOWS\\system32\\cmd.exe', 'working_directory': '%HOMEDRIVE%%HOMEPATH%', 'icon_location': '%windir%\\system32\\cmd.exe'}, 'extra': {'SPECIAL_FOLDER_LOCATION_BLOCK': {'size': 16, 'special_folder_id': 37, 'offset': 221}, 'KNOWN_FOLDER_LOCATION_BLOCK': {'size': 28, 'known_folder_id': '1AC14E77-02E7-4E5D-B744-2EB1AE5198B7', 'offset': 221}, 'ENVIRONMENTAL_VARIABLES_LOCATION_BLOCK': {'size': 788, 'target_ansi': '%windir%\\system32\\cmd.exe', 'target_unicode': '%windir%\\system32\\cmd.exe'}, 'CONSOLE_PROPERTIES_BLOCK': {'size': 204, 'fill_attributes': 15, 'popup_fill_attributes': 181, 'screen_buffer_size_x': 110, 'screen_buffer_size_y': 6000, 'window_size_x': 110, 'window_size_y': 33, 'window_origin_x': 104, 'window_origin_y': 0, 'font_size': 1179648, 'font_family': 54, 'font_weight': 400, 'face_name': '仿宋', 'cursor_size': 25, 'full_screen': 0, 'quick_edit': 1, 'insert_mode': 1, 'auto_position': 1, 'history_buffer_size': 50, 'number_of_history_buffers': 4, 'history_no_dup': 0, 'color_table': 789516}, 'CONSOLE_CODEPAGE_BLOCK': {'size': 12, 'code_page': 936}, 'METADATA_PROPERTIES_BLOCK': {'size': 334, 'storage_size': 232, 'version': '0x53505331', 'format_id': '0C570607-0396-43DE-9D61-E321D7DF5026'}}, 'target': {'items': [{'class': 'Root Folder', 'sort_index': 'My Computer', 'guid': '20D04FE0-3AEA-1069-A2D8-08002B30309D'}, {'class': 'Volume Item', 'flags': '0xf', 'data': None}, {'class': 'File entry', 'flags': 'Is directory', 'file_size': 0, 'file_attribute_flags': 16, 'primary_name': 'WINDOWS'}, {'class': 'File entry', 'flags': 'Is directory', 'file_size': 0, 'file_attribute_flags': 16, 'primary_name': 'system32'}, {'class': 'File entry', 'flags': 'Is file', 'file_size': 0, 'file_attribute_flags': 0, 'primary_name': 'cmd.exe'}]}, 'link_info': {}}
2)print_lnk_file() 输出解析内容(自带格式化)
Windows Shortcut Information:
   Link CLSID: 00021401-0000-0000-C000-000000000046
   Link Flags: HasTargetIDList | HasName | HasRelativePath | HasWorkingDir | HasIconLocation | IsUnicode | ForceNoLinkInfo | HasExpString - (989)
   File Flags:  - (0)

   Creation Timestamp: None
   Modified Timestamp: None
   Accessed Timestamp: None

   Icon Index: 0 
   Window Style: SW_SHOWNORMAL 
   HotKey: UNSET - UNSET {0x0000} 

   TARGETS:
      Index: 78
      ITEMS:
         Root Folder
            Sort index: My Computer
            Guid: 20D04FE0-3AEA-1069-A2D8-08002B30309D
         Volume Item
            Flags: 0xf
            Data: None
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: WINDOWS
         File entry
            Flags: Is directory
            Modification time: None
            File attribute flags: 16
            Primary name: system32
         File entry
            Flags: Is file
            Modification time: None
            File attribute flags: 0
            Primary name: cmd.exe

   DATA
      Description: @%windir%\system32\shell32.dll,-22534
      Relative path: ..\..\..\WINDOWS\system32\cmd.exe
      Working directory: %HOMEDRIVE%%HOMEPATH%
      Icon location: %windir%\system32\cmd.exe

   EXTRA BLOCKS:
      SPECIAL_FOLDER_LOCATION_BLOCK
         Special folder id: 37
      KNOWN_FOLDER_LOCATION_BLOCK
         Known folder id: 1AC14E77-02E7-4E5D-B744-2EB1AE5198B7
      ENVIRONMENTAL_VARIABLES_LOCATION_BLOCK
         Target ansi: %windir%\system32\cmd.exe
         Target unicode: %windir%\system32\cmd.exe
      CONSOLE_PROPERTIES_BLOCK
         Fill attributes: 15
         Popup fill attributes: 181
         Window origin x: 104
         Window origin y: 0
         Font family: 54
         Font weight: 400
         Face name: 仿宋
         Full screen: 0
         Quick edit: 1
         Insert mode: 1
         Auto position: 1
         Number of history buffers: 4
         History no dup: 0
         Color table: 789516
      CONSOLE_CODEPAGE_BLOCK
         Code page: 936
      METADATA_PROPERTIES_BLOCK
         Version: 0x53505331
         Format id: 0C570607-0396-43DE-9D61-E321D7DF5026
3)ldata.print_json() 输出解析内容(自带格式化)
{
    "data": {
        "description": "@%windir%\\system32\\shell32.dll,-22534",
        "icon_location": "%windir%\\system32\\cmd.exe",
        "relative_path": "..\\..\\..\\WINDOWS\\system32\\cmd.exe",
        "working_directory": "%HOMEDRIVE%%HOMEPATH%"
    },
    "extra": {
        "CONSOLE_CODEPAGE_BLOCK": {
            "code_page": 936,
            "size": 12
        },
        "CONSOLE_PROPERTIES_BLOCK": {
            "auto_position": 1,
            "color_table": 789516,
            "cursor_size": 25,
            "face_name": "\u4eff\u5b8b",
            "fill_attributes": 15,
            "font_family": 54,
            "font_size": 1179648,
            "font_weight": 400,
            "full_screen": 0,
            "history_buffer_size": 50,
            "history_no_dup": 0,
            "insert_mode": 1,
            "number_of_history_buffers": 4,
            "popup_fill_attributes": 181,
            "quick_edit": 1,
            "screen_buffer_size_x": 110,
            "screen_buffer_size_y": 6000,
            "size": 204,
            "window_origin_x": 104,
            "window_origin_y": 0,
            "window_size_x": 110,
            "window_size_y": 33
        },
        "ENVIRONMENTAL_VARIABLES_LOCATION_BLOCK": {
            "size": 788,
            "target_ansi": "%windir%\\system32\\cmd.exe",
            "target_unicode": "%windir%\\system32\\cmd.exe"
        },
        "KNOWN_FOLDER_LOCATION_BLOCK": {
            "known_folder_id": "1AC14E77-02E7-4E5D-B744-2EB1AE5198B7",
            "offset": 221,
            "size": 28
        },
        "METADATA_PROPERTIES_BLOCK": {
            "format_id": "0C570607-0396-43DE-9D61-E321D7DF5026",
            "size": 334,
            "storage_size": 232,
            "version": "0x53505331"
        },
        "SPECIAL_FOLDER_LOCATION_BLOCK": {
            "offset": 221,
            "size": 16,
            "special_folder_id": 37
        }
    },
    "header": {
        "accessed_time": null,
        "creation_time": null,
        "file_flags": [],
        "file_size": 0,
        "guid": "00021401-0000-0000-C000-000000000046",
        "hotkey": "UNSET - UNSET {0x0000}",
        "icon_index": 0,
        "link_flags": [
            "HasTargetIDList",
            "HasName",
            "HasRelativePath",
            "HasWorkingDir",
            "HasIconLocation",
            "IsUnicode",
            "ForceNoLinkInfo",
            "HasExpString"
        ],
        "modified_time": null,
        "r_file_flags": 0,
        "r_hotkey": 0,
        "r_link_flags": 989,
        "windowstyle": "SW_SHOWNORMAL"
    },
    "link_info": {},
    "target": {
        "items": [
            {
                "class": "Root Folder",
                "guid": "20D04FE0-3AEA-1069-A2D8-08002B30309D",
                "sort_index": "My Computer"
            },
            {
                "class": "Volume Item",
                "data": null,
                "flags": "0xf"
            },
            {
                "class": "File entry",
                "file_attribute_flags": 16,
                "file_size": 0,
                "flags": "Is directory",
                "primary_name": "WINDOWS"
            },
            {
                "class": "File entry",
                "file_attribute_flags": 16,
                "file_size": 0,
                "flags": "Is directory",
                "primary_name": "system32"
            },
            {
                "class": "File entry",
                "file_attribute_flags": 0,
                "file_size": 0,
                "flags": "Is file",
                "primary_name": "cmd.exe"
            }
        ]
    }
}

观察输出的数据,你应该能发现extras字段中的CONSOLE_CODEPAGE_BLOCKCONSOLE_PROPERTIES_BLOCK 中就是控制台窗口属性配置信息。
总结:LnkParse3 库解析.lnk文件内容确实挺好的,内容全、格式漂亮、使用也简单,不足之处就是它不能创建或编辑.lnk

2. strayge/pylnk

Github仓库:strayge/pylnk

特点:

  1. 支持cli、python package 两种使用方式;
  2. 可以解析.lnk文件,从中提取有关信息;
  3. 可以对已有的.lnk文件进行解析生成lnk对象,该对象可以被更改再保存;
  4. 可以创建新的.lnk文件,方法是创建一个lnk对象,用数据填充它,然后保存到.lnk文件;
  5. 缺点:当前仅支持操作指向本地计算机上的文件和文件夹的快捷方式

官网仅给出了cli命令行使用方式的示例,但我这里自己体验了下python package的使用方式,如下:

1)解析已有的.lnk文件
import pylnk3
with open("C:\\Users\cyinl\Desktop\cmd.lnk","rb") as fdata:
    lnk = pylnk3.parse(fdata)
    print(lnk)

解析内容输出:

Target file:
{ 'archive': False,
  'compressed': False,
  'directory': False,
  'encrypted': False,
  'hidden': False,
  'normal': False,
  'not_content_indexed': False,
  'offline': False,
  'read_only': False,
  'reparse_point': False,
  'reserved1': False,
  'reserved2': False,
  'sparse_file': False,
  'system_file': False,
  'temporary': False}
Creation Time: 2023-07-05 20:36:53.407509
Modification Time: 2023-07-05 20:36:53.407509
Access Time: 2023-07-05 20:36:53.407509
File size: 0
Window mode: Normal
Hotkey: 
File Location Info: <not specified>
<LinkTargetIDList>:
  <RootEntry: MY_COMPUTER>
  <DriveEntry: b'C:'>
  <PathSegmentEntry: WINDOWS>
  <PathSegmentEntry: system32>
  <PathSegmentEntry: cmd.exe>
Description: @%windir%\system32\shell32.dll,-22534
Relative Path: ..\..\..\WINDOWS\system32\cmd.exe
Working Directory: %HOMEDRIVE%%HOMEPATH%
Icon: %windir%\system32\cmd.exe
Used Path: C:\WINDOWS\system32\cmd.exe
ExtraDataBlock
 signature 0xa0000005
 data: b'%\x00\x00\x00\xdd\x00\x00\x00'
ExtraDataBlock
 signature 0xa000000b
 data: b'wN\xc1\x1a\xe7\x02]N\xb7D.\xb1\xaeQ\x98\xb7\xdd\x00\x00\x00'
EnvironmentVariableDataBlock
 TargetAnsi: %windir%\system32\cmd.exe
 TargetUnicode: %windir%\system32\cmd.exe
ExtraDataBlock
 signature 0xa0000002
 data: b'\x0f\x00\xb5\x00n\x00p\x17n\x00!\x00h\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x006\x00\x00\x00\x90\x01\x00\x00\xffN\x8b[\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x002\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x0c\x0c\x0c\x00\x007\xda\x00\x13\xa1\x0e\x00:\x96\xdd\x00\xc5\x0f\x1f\x00\x88\x17\x98\x00\xc1\x9c\x00\x00\x0c\x0c\x0c\x00vvv\x00;x\xff\x00\x16\xc6\x0c\x00a\xd6\xd6\x00\xe7HV\x00\xb4\x00\x9e\x00777\x00\xf2\xf2\xf2\x00'
ExtraDataBlock
 signature 0xa0000004
 data: b'\xa8\x03\x00\x00'
PropertyStoreDataBlock
 PropertyStore
  FormatID: {0C570607-0396-43DE-9D61-E321D7DF5026}
    3 = 0xb: b'\xff\xff\x00\x00'
    9 = 0x13: 4294967295
   12 = 0x13: 4294967295
   13 = 0xb: b'\x00\x00\x00\x00'
    1 = 0xb: b'\xff\xff\x00\x00'
    2 = 0xb: b'\xff\xff\x00\x00'
    4 = 0xb: b'\x00\x00\x00\x00'
    6 = 0x2: b'\xff\x00\x00\x00'
    8 = 0x13: 0
   11 = 0x13: 4294967295
    5 = 0xb: b'\xff\xff\x00\x00'
   10 = 0xb: b'\x00\x00\x00\x00'
 PropertyStore
  FormatID: {9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}
   18 = 0x13: 1
 PropertyStore
  FormatID: {46588AE2-4CBC-4338-BBFC-139326986DCE}
    0 = 0x13: 0
2)更改已有的.lnk文件

修改已有的.lnk文件,或保存到原有的.lnk文件,或保为到新的.lnk文件

import pylnk3
with open("C:\\Users\cyinl\Desktop\cmd.lnk","rb") as fdata:
    lnk = pylnk3.parse(fdata)
    # 修改lnk对象的有关属性值
    lnk.working_dir = "F:\Chen\python3\ExciseC"
    lnk.window_mode = pylnk3.WINDOW_MAXIMIZED
    # 这里也可以给别的路径及名字,这样就相当于复制并修改后保存为一个新的
    lnk.save("C:\\Users\cyinl\Desktop\cmd2.lnk")
    print(lnk)

修改后的内容输出:

Target file:
{ 'archive': False,
  'compressed': False,
  'directory': False,
  'encrypted': False,
  'hidden': False,
  'normal': False,
  'not_content_indexed': False,
  'offline': False,
  'read_only': False,
  'reparse_point': False,
  'reserved1': False,
  'reserved2': False,
  'sparse_file': False,
  'system_file': False,
  'temporary': False}
Creation Time: 2023-07-05 21:09:56.770144
Modification Time: 2023-07-05 21:09:56.770144
Access Time: 2023-07-05 21:09:56.770144
File size: 0
Window mode: Maximized
Hotkey: 
File Location Info: <not specified>
<LinkTargetIDList>:
  <RootEntry: MY_COMPUTER>
  <DriveEntry: b'C:'>
  <PathSegmentEntry: WINDOWS>
  <PathSegmentEntry: system32>
  <PathSegmentEntry: cmd.exe>
Description: @%windir%\system32\shell32.dll,-22534
Relative Path: ..\..\..\WINDOWS\system32\cmd.exe
Working Directory: F:\Chen\python3\ExciseC
Icon: %windir%\system32\cmd.exe
Used Path: C:\WINDOWS\system32\cmd.exe
ExtraDataBlock
 signature 0xa0000005
 data: b'%\x00\x00\x00\xdd\x00\x00\x00'
ExtraDataBlock
 signature 0xa000000b
 data: b'wN\xc1\x1a\xe7\x02]N\xb7D.\xb1\xaeQ\x98\xb7\xdd\x00\x00\x00'
EnvironmentVariableDataBlock
 TargetAnsi: %windir%\system32\cmd.exe
 TargetUnicode: %windir%\system32\cmd.exe
ExtraDataBlock
 signature 0xa0000002
 data: b'\x0f\x00\xb5\x00n\x00p\x17n\x00!\x00h\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x006\x00\x00\x00\x90\x01\x00\x00\xffN\x8b[\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x002\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x0c\x0c\x0c\x00\x007\xda\x00\x13\xa1\x0e\x00:\x96\xdd\x00\xc5\x0f\x1f\x00\x88\x17\x98\x00\xc1\x9c\x00\x00\x0c\x0c\x0c\x00vvv\x00;x\xff\x00\x16\xc6\x0c\x00a\xd6\xd6\x00\xe7HV\x00\xb4\x00\x9e\x00777\x00\xf2\xf2\xf2\x00'
ExtraDataBlock
 signature 0xa0000004
 data: b'\xa8\x03\x00\x00'
PropertyStoreDataBlock
 PropertyStore
  FormatID: {0C570607-0396-43DE-9D61-E321D7DF5026}
    3 = 0xb: b'\xff\xff\x00\x00'
    9 = 0x13: 4294967295
   12 = 0x13: 4294967295
   13 = 0xb: b'\x00\x00\x00\x00'
    1 = 0xb: b'\xff\xff\x00\x00'
    2 = 0xb: b'\xff\xff\x00\x00'
    4 = 0xb: b'\x00\x00\x00\x00'
    6 = 0x2: b'\xff\x00\x00\x00'
    8 = 0x13: 0
   11 = 0x13: 4294967295
    5 = 0xb: b'\xff\xff\x00\x00'
   10 = 0xb: b'\x00\x00\x00\x00'
 PropertyStore
  FormatID: {9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}
   18 = 0x13: 1
 PropertyStore
  FormatID: {46588AE2-4CBC-4338-BBFC-139326986DCE}
    0 = 0x13: 0

生成的新.lnk文件
新lnk文件生成
打开cmd2.lnk快捷方式,验证确实已生效
(起始位置:F:\Chen\python3\ExciseC,运行方式:最大化)
cmd2.lnk验证

3)从零开始创建新的.lnk文件

准备一个目标文件,F:\test\test.bat

@echo off
echo working_dir=%cd%
if "%*" == "" (
	echo "no arguments"
) else (
	for %%i in (%*) do echo %%i
)
timeout /T 10 /NOBREAK

test.bat文件生成一个test.lnk快捷方式

import pylnk3

# 准备lnk文件内容数据
args = "A B C"
desc = "a lnk to test.bat"
icon_f = "%SystemRoot%\\System32\\SHELL32.dll"
icon_idx = 320
work_dir = "F:\\test"
window_m = pylnk3.WINDOW_NORMAL
target_f = "F:\\test\\test.bat"
lnk_name = "F:\\test\\test.lnk"

# 创建lnk文件
pylnk3.for_file(target_file=target_f,lnk_name=lnk_name,
                arguments=args,description=desc,icon_file=icon_f,
                icon_index=icon_idx,work_dir=work_dir,window_mode=window_m)

# 解析生成的lnk文件
with open(lnk_name,"rb") as fdata:
    lnk = pylnk3.parse(fdata)
    print(lnk)

python脚本控制台输出:

Target file:
{ 'archive': False,
  'compressed': False,
  'directory': False,
  'encrypted': False,
  'hidden': False,
  'normal': False,
  'not_content_indexed': False,
  'offline': False,
  'read_only': False,
  'reparse_point': False,
  'reserved1': False,
  'reserved2': False,
  'sparse_file': False,
  'system_file': False,
  'temporary': False}
Creation Time: 2023-07-05 22:55:30
Modification Time: 2023-07-05 22:55:30
Access Time: 2023-07-05 22:55:30
File size: 0
Window mode: Normal
Hotkey: 
File Location Info: <not specified>
<LinkTargetIDList>:
  <RootEntry: MY_COMPUTER>
  <DriveEntry: b'F:'>
  <PathSegmentEntry: test>
  <PathSegmentEntry: test.bat>
Description: a lnk to test.bat
Working Directory: F:\test
Commandline Arguments: A B C
Icon: %SystemRoot%\System32\SHELL32.dll
Used Path: F:\test\test.bat

生成的test.lnk文件
创建的快捷方式
点击test.lnk快捷方式
快捷方式打开

总结:pylnk3 库功能比较齐全,支持lnk文件的解析、编辑、创建等,但它在内容解析方面对比 LnkParse3 ,格式不漂亮、内容不太全(比如cmd.lnk的解析,extras没有console相关的属性信息)(再吐槽一点,pylnk3 官网的使用说明里没有python package的用法示例,上面的用法我摸索了好久。。。)

三、总结

  1. 方案1~4是失败的,方案5是成功的,谁又不是从失败中一步步走来呢;
  2. 经过使用LnkParse3解析cmd.lnk内容以及结合 Shell Link (.LNK) Binary File Format,得出结论cmd.lnk打开的dos窗口,属性配置确实是保存在cmd.lnk文件本身内的;
  3. 虽然pylnk3库支持.lnk文件的修改、创建,但我还是建议你通过 右键>属性 方式修改lnk文件的内容,通过右键>创建快捷方式的方式来创建lnk快捷方式。


参考资料:
how-do-i-persuade-programs-open-an-actual-lnk-file-in-windows-7
how-can-you-open-and-edit-windows-.lnk-shortcut-files
[MS-SHLLINK]: Shell Link (.LNK) Binary File Format
Matmaus/LnkParse3

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

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

相关文章

GO语言中Protocol buffer简介

Protocol buffer 一、Protobuf简介 1.1、RPC 通信 对于单独部署&#xff0c;独立运行的微服务实例而言&#xff0c;在业务需要时&#xff0c;需要与其他服务进行通信&#xff0c;这种通信方式是进程之间的通讯方式&#xff08;inter-process communication&#xff0c;简称I…

机器学习 day23(激活函数的作用,线性激活函数的不足)

线性激活函数的局限性 如果我们将神经网络模型中的所有激活函数都设为线性激活函数&#xff0c;那整个神经网络模型就跟线性回归模型极其相似&#xff0c;且它无法拟合比线性回归模型更复杂的关系 激活函数全设为线性回归激活函数的例子 若把a带入a&#xff0c;则a可简化为…

Unity包体积优化实践

目录 简述优化前优化中assets目录资源ab包动态下发资源大小优化dll大小优化场景模型动态下载和加载优化assets目录后大小 lib目录优化目标架构裁剪代码优化代码和引用 其他优化项Shader优化Release模式编译选项 优化后 简述 在移动端App混合Unity开发的项目中&#xff0c;Unit…

VSCode配置C/C++环境(极简版)

预期结果&#xff1a; 首先安装扩展&#xff1a; 然后按照下面readme.txt中即可 链接&#xff1a;https://pan.baidu.com/s/16OV5Kr82i0gWCc4bvKs42g 提取码&#xff1a;zxcv

【模式识别目标检测】——模式识别技术车牌检测应用

目录 引入 一、模式识别主要方法 1、统计模式识别 2、基于隐马尔可夫模型识别 3、模糊模式识别 4、人工神经网络模式识别 总结 二、模式识别应用 1、车牌定位 2、车牌识别 参考文献&#xff1a; 引入 人在观察事物或现象时&#xff0c;常寻找它与其他事物或现象不同…

江苏某农商行稳健发展,软件安全推动金融服务新气象

​江苏某农商银行是全国最早成立的农商行之一。面对复杂严峻的内外部形势&#xff0c;该农商行在坚守服务“三农”与小微市场的同时&#xff0c;紧跟改革脚步&#xff0c;不断探索业务创新与数字化转型&#xff0c;实现经营稳健发展。 打造多维度数字化体系 驱动农商行创新发展…

QT之一种notifiation使用

简介 使用Qt5实现的消息提醒功能。 本文借助消息通知开源框架实现消息通知功能&#xff0c;软件包在上面。 使用说明 在pro工程中包含qtnotify2.pri 使用举例 include($$PWD/../src/qtnotify2.pri)// 包含头文件 #include "notifymanager.h"// 可建立全局实例 N…

深入理解MySQL数据库存储引擎及数据授权

深入理解MySQL数据库存储引擎及数据授权 一、MySQL数据库存储引擎的概述1.InnoDB引擎2.MyISAM引擎3.Memory引擎 二、MySQL数据授权问题1.用户管理2.数据库级授权3.表级授权4.列级授权5.收回权限 引言&#xff1a; MySQL是一款广泛应用的关系型数据库管理系统&#xff0c;为了满…

Linux常用命令——exportfs命令

在线Linux命令查询工具 exportfs 管理NFS共享文件系统列表 补充说明 exportfs 命令用来管理当前NFS共享的文件系统列表。 参数&#xff1a; -a 打开或取消所有目录共享。 -o options,...指定一列共享选项&#xff0c;与 exports(5) 中讲到的类似。 -i 忽略 /etc/exports 文…

IMX6ULL 移植篇-uboot网络命令NFS下载的文件的验证

一. 简介 本文承接以下文章&#xff1a; IMX6ULL 移植篇-uboot 网络命令NFS_凌肖战的博客-CSDN博客 之前学习了&#xff0c;如何通过NFS服务&#xff0c;向开发板下载 zImage文件&#xff08;内核镜像文件&#xff09;。 本文主要学习对 下载到开发板的 zImage文件内容进行验…

基于深度学习的高精度刀具检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度刀具检测识别系统可用于日常生活中或野外来检测与定位刀具目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的刀具目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

《MySQL》数据类型

文章目录 一&#xff0c;数值类型int类型bit类型小数类型float 和 decimal 二&#xff0c;字符串类型char和varchar日期和时间类型enum和set 一&#xff0c;数值类型 MySQL数据库里面的数据类型 int类型 int类型是一个大类 类型大小tinyint1字节 &#xff08;-27 ~ 27-1&a…

[NISACTF 2022]babyserialize(pop链构造与脚本编写详细教学)

目录 一、理清pop链并进行标注 二、如何编写相关脚本 三、过滤与绕过 1、waf的绕过 2、preg_match的绕过 做这道题作为pop链的构造很典型&#xff0c;也很有意思&#xff0c;因为还存在一些其他东西。 打开链接&#xff0c;这种很多类的PHP代码多半是需要构造pop链 一、理…

Excel如何排序?掌握3种排序方法!

我是个刚开始学习Excel的新手&#xff0c;对很多Excel的知识都不太熟悉。今天使用Excel进行表格排序时我又遇到了一些问题。请问Excel如何排序呢&#xff1f;希望给我一些建议。 在Excel中&#xff0c;排序是一种常见且有用的数据处理操作&#xff0c;它可以帮助您按照特定的规…

Java编译器IDE-Java学习帮手(移动端)

应用商店搜索"java" 编码测试 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List;public class SplitTime {private static List<Date> dateSplit(Date start…

【回溯算法part02】| 216.组合总和III、17.电话号码的字母组合

目录 &#x1f388;LeetCode216.组合总和||| ✨剪枝优化 &#x1f388;LeetCode17.电话号码的字母组合 &#x1f388;LeetCode216.组合总和||| 链接&#xff1a;216.组合总和||| 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数…

SONY索尼MP4视频变RSV文件修复方法

索尼MP4变RSV的原因分析 索尼新型号相机或者摄像机&#xff0c;如SONY A7S3&#xff0c;A7M4&#xff0c;FX3, FX6, FX9等&#xff0c;如果录像过程中有发生如下异常情况&#xff0c;如断电&#xff0c;死机&#xff0c;电量不足&#xff0c;机器摔倒&#xff0c;非常规操作&a…

confluence_table数据爬取

需求场景&#xff1a; 获取指定confluence文档中的表格数据&#xff0c;同时将页面中的附件下载在指定的文件夹中。 实现步骤&#xff1a; 开启confluence的远程api端口 选择使用的接口。 可以参考 官方接口文档 。 当前示例用到的接口为&#xff1a; Get content /rest/a…

现在开始学linux驱动内核好吗?

一开始是觉得&#xff0c;内核诶&#xff0c;高大上。然后看了几个月驱动后&#xff0c;是认认真真的钻了几个月源码&#xff0c;写了很多学习笔记的那种。 先说好处吧&#xff0c;对基础能力的提升很明显。比如内核数据结构&#xff0c;指针&#xff0c;以及如何用c需要去完成…

Windows系统上安装Node.js图文步骤流程

Windows系统上安装Node.js图文步骤流程&#xff0c;本文以安装Node.js v4.4.3 LTS(长期支持版本)版本为例&#xff1a; 目录 Node.js下载 Windows 上安装 Node.js 1、Windows 安装包(.msi) 2、Windows 二进制文件 (.exe)安装 版本测试 Node.js下载 Node.js 安装包及源码…