Hallo medetweakers,
Vanwege de beveiliging bij enkele klanten kan ik geen gebruik maken van WshShell en kan ik ook geen dll's "importeren".
Omdat ik snelkopplingen moet gaan parsen voor een bestandsbrowser heb ik mbv. dit deze simpele functie kunnen schrijven:
De code werkt uitstekend voor snelkoppelingen naar bestanden
Alleen wanneer ik bijv. een doel heb naar een map, returned de functie de parent map.
(Bijv. een snelkoppeling naar "C:\Windows\System32\" returned "C:\Windows")
Iemand die mij kan uitleggen hoe dit kan?
Mijn dank ik groot
(Modjes, hoe zou ik in mijn titel "mappen" naar "bestanden" kunnen veranderen? Ik was een beetje verstrooid
)
Vanwege de beveiliging bij enkele klanten kan ik geen gebruik maken van WshShell en kan ik ook geen dll's "importeren".
Omdat ik snelkopplingen moet gaan parsen voor een bestandsbrowser heb ik mbv. dit deze simpele functie kunnen schrijven:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| private int bytes2short(byte[] bytes, int off) { return bytes[off] | (bytes[off + 1] << 8); } public void parse(string path) { // http://www.stdlib.com/art6-Shortcut-File-Format-lnk.html // Het hele bestand in byte buffer lezen FileStream f = File.Open(path, FileMode.Open); BinaryReader fin = new BinaryReader(f); FileInfo info = new FileInfo(path); int bestandsLengte = (int)info.Length; byte[] link = fin.ReadBytes(bestandsLengte); // Een byte array van het hele bestand // krijg de flags byte byte flags = link[20]; // 16 + 4 // krijg de bestandsattributen byte byte bestandAttr = link[24]; byte is_map_mask = (byte)0x10; is_Map = (bestandAttr & is_map_mask) > 0; // True als bestandAttr etc. groter is dan 0 // als er shell instellingen zijn, overslaan int shell_offset = 76; int shell_len = 0; if (flags > 0) // Als de 20e byte > 1 { // de plus 2 is voor de lengte marker van de shell eigenschappen zelf shell_len = bytes2short(link, shell_offset) + 2; } // Hier vanaf deze positie begint de link int bestand_begin = 76 + shell_len; // verkrijg de volume en systeem waardes int local_sys_off = link[bestand_begin + 16] + bestand_begin; doel = ASCIIEncoding.ASCII.GetString(link, local_sys_off, bestandsLengte - local_sys_off); // doel = krijgStringTotNul(link, local_sys_off, (int)info.Length); f.Close(); } |
De code werkt uitstekend voor snelkoppelingen naar bestanden
Alleen wanneer ik bijv. een doel heb naar een map, returned de functie de parent map.
(Bijv. een snelkoppeling naar "C:\Windows\System32\" returned "C:\Windows")
Iemand die mij kan uitleggen hoe dit kan?
Mijn dank ik groot
(Modjes, hoe zou ik in mijn titel "mappen" naar "bestanden" kunnen veranderen? Ik was een beetje verstrooid
Groeten