public static ShellLinkFile CreateAbsolute(string target) { var result = new ShellLinkFile(); var targetInfo = SetFileSystemInfo(result, target); result.Header.ShowCommand = ShowCommand.Normal; result.RelativePath = targetInfo.FullName; result.WorkingDirectory = targetInfo is FileInfo ? (targetInfo as FileInfo).DirectoryName : targetInfo.FullName; return(result); }
public static ShellLinkFile Load(string filename) { var result = new ShellLinkFile(); using (var stream = new FileStream(filename, FileMode.Open)) { using (var binaryReader = new BinaryReader(stream)) { var reader = new ShellLinkFileHandler(result); reader.ReadFrom(binaryReader); return(result); } } }
public static ShellLinkFile CreateRelative(string baseDirectory, string relativeTarget) { if (Path.IsPathRooted(relativeTarget)) { throw new ArgumentException("Target must be relative to base directory !!!"); } var result = new ShellLinkFile(); SetFileSystemInfo(result, Path.Combine(baseDirectory, relativeTarget)); result.Header.ShowCommand = ShowCommand.Normal; result.RelativePath = relativeTarget; result.WorkingDirectory = "."; return(result); }
public static FileSystemInfo SetFileSystemInfo(ShellLinkFile slf, string target) { var targetInfo = Directory.Exists(target) ? (FileSystemInfo) new DirectoryInfo(target) : new FileInfo(target); if (targetInfo.Exists) { slf.Header.FileAttributes = targetInfo.Attributes; slf.Header.AccessTime = targetInfo.LastAccessTime; slf.Header.CreationTime = targetInfo.CreationTime; slf.Header.WriteTime = targetInfo.LastWriteTime; if (targetInfo is FileInfo) { slf.Header.FileSize = Convert.ToInt32((targetInfo as FileInfo).Length); } } return(targetInfo); }
public static FileSystemInfo SetFileSystemInfo(ShellLinkFile slf, string target) { FileSystemInfo targetInfo; if (Directory.Exists(target)) { targetInfo = new DirectoryInfo(target); } else { targetInfo = new FileInfo(target); } if (targetInfo.Exists) { slf.Header.FileAttributes = targetInfo.Attributes; slf.Header.AccessTime = targetInfo.LastAccessTime; slf.Header.CreationTime = targetInfo.CreationTime; slf.Header.WriteTime = targetInfo.LastWriteTime; if (targetInfo is FileInfo) { slf.Header.FileSize = Convert.ToInt32((targetInfo as FileInfo).Length); } } return targetInfo; }
/// <summary> /// /// </summary> /// <param name="filename"></param> /// <returns></returns> public static List<ShellLinkFile> LoadJumpList(string filename) { List<ShellLinkFile> results = new List<ShellLinkFile>(); using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) using (BinaryReader binaryReader = new BinaryReader(stream)) { bool process = true; do { // Seek until we get to a valid looking LNK header bool search = true; do { if (binaryReader.BaseStream.Position + 4 > binaryReader.BaseStream.Length) { return results; } byte[] data = new byte[4]; binaryReader.Read(data, 0, 4); int ret = BitConverter.ToInt32(data, 0); if (ret != 76) // Default LNK header length { continue; } if (binaryReader.BaseStream.Position + 16 > binaryReader.BaseStream.Length) { return results; } // Check the LNK file GUID e.g. {00021401-0000-0000-00C0-000000000046} or {01h,14h,02h,00h,00h,00h,00h,00h,C0h,00h,00h,00h,00h,00h,46h} data = new byte[16]; binaryReader.Read(data, 0, 16); if (ArraysEqual(data, LNK_GUID) == true) { binaryReader.BaseStream.Seek(-20, SeekOrigin.Current); ShellLinkFile result = new ShellLinkFile(); ShellLinkFileHandler reader = new ShellLinkFileHandler(result); reader.ReadFrom(binaryReader); if (result.Header.CreationTime != DateTime.MinValue & result.Header.AccessTime != DateTime.MinValue & result.Header.WriteTime != DateTime.MinValue & result.Header.CreationTime != ShellLinkFile.WindowsEpoch & result.Header.AccessTime != ShellLinkFile.WindowsEpoch & result.Header.WriteTime != ShellLinkFile.WindowsEpoch) { results.Add(result); break; } } // If we get this far then we have read 20 bytes, so lets go back 19 bytes and start again binaryReader.BaseStream.Seek(-19, SeekOrigin.Current); } while (search == true); } while (process == true); return results; } }
public static ShellLinkFile Load(byte[] data) { ShellLinkFile result = new ShellLinkFile(); using (BinaryReader binaryReader = new BinaryReader(new MemoryStream(data))) { ShellLinkFileHandler reader = new ShellLinkFileHandler(result); reader.ReadFrom(binaryReader); return result; } }
public static ShellLinkFile Load(string filename) { ShellLinkFile result = new ShellLinkFile(); using (FileStream stream = new FileStream(filename, FileMode.Open)) { using (BinaryReader binaryReader = new BinaryReader(stream)) { ShellLinkFileHandler reader = new ShellLinkFileHandler(result); reader.ReadFrom(binaryReader); return result; } } }
public static ShellLinkFile CreateRelative(string baseDirectory, string relativeTarget) { if (Path.IsPathRooted(relativeTarget)) { throw new ArgumentException("Target must be relative to base directory !!!"); } ShellLinkFile result = new ShellLinkFile(); SetFileSystemInfo(result, Path.Combine(baseDirectory, relativeTarget)); result.Header.ShowCommand = ShowCommand.Normal; result.RelativePath = relativeTarget; result.WorkingDirectory = "."; return result; }
public static ShellLinkFile CreateAbsolute(string target) { ShellLinkFile result = new ShellLinkFile(); FileSystemInfo targetInfo = SetFileSystemInfo(result, target); result.Header.ShowCommand = ShowCommand.Normal; result.RelativePath = targetInfo.FullName; if (targetInfo is FileInfo) { result.WorkingDirectory = (targetInfo as FileInfo).DirectoryName; } else { result.WorkingDirectory = targetInfo.FullName; } return result; }