Reads a Microsoft Windows Shortcut (.lnk file).

# S3 method for default
readWindowsShellLink(con, clean=TRUE, verbose=FALSE, ...)

Arguments

con

A connection or a character string (filename).

clean

If TRUE, low-level file specific fields are dropped, e.g. offsets on file locations.

verbose

If TRUE, extra information is written while reading.

...

Not used.

Value

Returns a list structure.

Details

This function is implemented based on the official file format specification [1]. It is intended to replace readWindowsShortcut(), which was written based on reverse engineering (before [1] was made available).

Author

Henrik Bengtsson

References

[1] [MS-SHLLINK]: Shell Link (.LNK) Binary File Format, Microsoft Inc., September 25, 2009.

Examples


pathname <- system.file("data-ex/HISTORY.LNK", package="R.utils")
lnk <- readWindowsShellLink(pathname)
str(lnk)
#> List of 6
#>  $ header          :List of 13
#>   ..$ linkCLSID     : raw [1:16] 01 14 02 00 ...
#>   ..$ linkFlags     : Named logi [1:27] TRUE TRUE TRUE TRUE TRUE FALSE ...
#>   .. ..- attr(*, "names")= chr [1:27] "HasLinkTargetIdList" "HasLinkInfo" "HasName" "HasRelativePath" ...
#>   ..$ fileAttributes: Named logi [1:15] FALSE FALSE FALSE FALSE FALSE TRUE ...
#>   .. ..- attr(*, "names")= chr [1:15] "readOnly" "hidden" "system" "reserved1" ...
#>   ..$ creationTime  : POSIXct[1:1], format: "2005-05-26 21:55:05"
#>   ..$ accessTime    : POSIXct[1:1], format: "2005-05-28 00:27:10"
#>   ..$ writeTime     : POSIXct[1:1], format: "2005-05-26 21:55:05"
#>   ..$ fileSize      : int 606
#>   ..$ iconIndex     : int 0
#>   ..$ showCommand   : int 1
#>   ..$ hotKey        : Named int [1:2] 0 0
#>   .. ..- attr(*, "names")= chr [1:2] "lowByte" "highByte"
#>   ..$ reserved1     : int 0
#>   ..$ reserved2     : int 0
#>   ..$ reserved3     : int 0
#>  $ idList          :List of 1
#>   ..$ itemIdList:List of 9
#>   .. ..$ : raw [1:18] 1f 50 e0 4f ...
#>   .. ..$ : raw [1:23] 2f 43 3a 5c ...
#>   .. ..$ : raw [1:90] 31 00 00 00 ...
#>   .. ..$ : raw [1:44] 31 00 00 00 ...
#>   .. ..$ : raw [1:70] 31 00 00 00 ...
#>   .. ..$ : raw [1:62] 31 00 00 00 ...
#>   .. ..$ : raw [1:62] 31 00 00 00 ...
#>   .. ..$ : raw [1:50] 31 00 00 00 ...
#>   .. ..$ : raw [1:58] 32 00 5e 02 ...
#>  $ linkInfo        :List of 3
#>   ..$ volumeId        :List of 4
#>   .. ..$ driveType        : int 3
#>   .. ..$ driveSerialNumber: int -2077904061
#>   .. ..$ data             : raw [1:12] 49 42 4d 5f ...
#>   .. ..$ volumeLabel      : chr "IBM_PRELOAD"
#>   ..$ localBasePath   : chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst\\HISTORY"
#>   ..$ commonPathSuffix: chr ""
#>  $ stringData      :List of 3
#>   ..$ name        : chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst\\HISTORY"
#>   ..$ relativePath: chr "..\\HISTORY"
#>   ..$ workingDir  : chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst"
#>  $ relativePathname: chr "..\\HISTORY"
#>  $ pathname        : chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst\\HISTORY"
str(lnk$pathname)
#>  chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst\\HISTORY"

lnk0 <- readWindowsShortcut(pathname)
str(lnk0$pathname)
#>  chr "C:\\Documents and Settings\\hb\\braju.com.R\\R.utils\\R.utils\\inst\\HISTORY"