summaryrefslogtreecommitdiff
path: root/plugins/Utils.pas/shlobj.pp
blob: 197a0bf88218500e4fbefa0d216676d8da93d324 (plain)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
{
    This file is part of the Free Pascal run time library.
    Copyright (c) 2007 by Florian Klaempfl
    member of the Free Pascal development team.

    See the file COPYING.FPC, included in this distribution,
    for details about the copyright.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

    Original copyright statement follows.

}
{$mode objfpc}
unit shlobj;

  interface

uses
      windows,activex,shellapi,commctrl;

Const 
   IID_IShellExtInit    ='{000214E8-0000-0000-C000-000000000046}';
   IID_IShellFolder    : TGUID ='{000214E6-0000-0000-C000-000000000046}';
   IID_IEnumList       : TGUID ='{000214F2-0000-0000-C000-000000000046}';
   IID_IAutoComplete   : TGUID ='{00bb2762-6a77-11d0-a535-00c04fd7d062}';
   IID_IAutoComplete2  : TGUID ='{EAC04BC0-3791-11d2-BB95-0060977B464C}';
   IID_IContextMenu    : TGUID ='{000214E4-0000-0000-c000-000000000046}';
   IID_IContextMenu2   : TGUID ='{000214f4-0000-0000-c000-000000000046}';
   IID_IContextMenu3   : TGUID ='{bcfce0a0-ec17-11d0-8d10-00a0c90f2719}';
   IID_IPersistFolder  : TGUID ='{000214EA-0000-0000-C000-000000000046}';
   IID_IPersistFolder2 : TGUID ='{1AC3D9F0-175C-11d1-95BE-00609797EA4F}';
   IID_IPersistIDListr : TGUID ='{1079acfc-29bd-11d3-8e0d-00c04f6837d5}';
   IID_IEnumExtraSearch: TGUID ='{0E700BE1-9DB6-11d1-A1CE-00C04FD75D13}';
   IID_IShellFolder2   : TGUID ='{93F2F68C-1D1B-11d3-A30E-00C04F79ABD1}';
   IID_IEXtractIconW   : TGUID ='{000214fa-0000-0000-c000-000000000046}';
   IID_IEXtractIconA   : TGUID ='{000214eb-0000-0000-c000-000000000046}';
   IID_IShellLinkA     : TGUID ='{000214EE-0000-0000-C000-000000000046}';
   CLSID_StdMarshal                    : TGUID = '{00000017-0000-0000-c000-000000000046}';
   CLSID_IdentityUnmarshal             : TGUID = '{0000001b-0000-0000-c000-000000000046}';
   CLSID_InProcFreeMarshaler           : TGUID = '{0000001c-0000-0000-c000-000000000046}';
   CLSID_PSGenObject                   : TGUID = '{0000030c-0000-0000-c000-000000000046}';
   CLSID_PSClientSite                  : TGUID = '{0000030d-0000-0000-c000-000000000046}';
   CLSID_PSClassObject                 : TGUID = '{0000030e-0000-0000-c000-000000000046}';
   CLSID_PSInPlaceActive               : TGUID = '{0000030f-0000-0000-c000-000000000046}';
   CLSID_PSInPlaceFrame                : TGUID = '{00000310-0000-0000-c000-000000000046}';
   CLSID_PSDragDrop                    : TGUID = '{00000311-0000-0000-c000-000000000046}';
   CLSID_PSBindCtx                     : TGUID = '{00000312-0000-0000-c000-000000000046}';
   CLSID_PSEnumerators                 : TGUID = '{00000313-0000-0000-c000-000000000046}';
   CLSID_Picture_Metafile              : TGUID = '{00000315-0000-0000-c000-000000000046}';
   CLSID_StaticMetafile                : TGUID = '{00000315-0000-0000-c000-000000000046}';
   CLSID_Picture_Dib                   : TGUID = '{00000316-0000-0000-c000-000000000046}';
   CLSID_StaticDib                     : TGUID = '{00000316-0000-0000-c000-000000000046}';
   CLSID_Picture_EnhMetafile           : TGUID = '{00000319-0000-0000-c000-000000000046}';
   CLSID_DCOMAccessControl             : TGUID = '{0000031d-0000-0000-c000-000000000046}';
   CLSID_ShellDesktop                  : TGUID = '{00021400-0000-0000-c000-000000000046}';
   CLSID_ShellLink                     : TGUID = '{00021401-0000-0000-c000-000000000046}';
   CLSID_InternetExplorer              : TGUID = '{0002DF01-0000-0000-C000-000000000046}';
   CLSID_StdComponentCategoriesMgr     : TGUID = '{0002e005-0000-0000-c000-000000000046}';
   CLSID_WebCrawlerAgent               : TGUID = '{08165ea0-e946-11cf-9c87-00aa005127ed}';
   CLSID_ShellDispatchInproc           : TGUID = '{0A89A860-D7B1-11CE-8350-444553540000}';
   CLSID_OldHTMLFormElement            : TGUID = '{0D04D285-6BEC-11CF-8B97-00AA00476DA6}';
   CLSID_CFontPropPage                 : TGUID = '{0be35200-8f91-11ce-9de3-00aa004bb851}';
   CLSID_CColorPropPage                : TGUID = '{0be35201-8f91-11ce-9de3-00aa004bb851}';
   CLSID_CPicturePropPage              : TGUID = '{0be35202-8f91-11ce-9de3-00aa004bb851}';
   CLSID_StdFont                       : TGUID = '{0be35203-8f91-11ce-9de3-00aa004bb851}';
   CLSID_StdPicture                    : TGUID = '{0be35204-8f91-11ce-9de3-00aa004bb851}';
   CLSID_ShellLinkObject               : TGUID = '{11219420-1768-11D1-95BE-00609797EA4F}';
   CLSID_HTMLLocation                  : TGUID = '{163BB1E1-6E00-11CF-837A-48DC04C10000}';
   CLSID_WebViewFolderContents         : TGUID = '{1820FED0-473E-11D0-A96C-00C04FD705A2}';
   CLSID_HTMLDocument                  : TGUID = '{25336920-03F9-11CF-8FD0-00AA00686F13}';
   CLSID_HTMLPluginDocument            : TGUID = '{25336921-03f9-11cf-8fd0-00aa00686f13}';
   CLSID_CMultiLanguage                : TGUID = '{275C23E2-3747-11D0-9FEA-00AA003F8646}';
   CLSID_HTMLImg                       : TGUID = '{3050F241-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLSelectElement             : TGUID = '{3050F245-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTableCell                 : TGUID = '{3050F246-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLAnchorElement             : TGUID = '{3050F248-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDivPosition               : TGUID = '{3050F249-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBody                      : TGUID = '{3050F24A-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLOptionElement             : TGUID = '{3050F24D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLObjectElement             : TGUID = '{3050F24E-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFormElement               : TGUID = '{3050F251-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLHRElement                 : TGUID = '{3050F252-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLEmbed                     : TGUID = '{3050F25D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLUnknownElement            : TGUID = '{3050F268-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLUListElement              : TGUID = '{3050F269-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTextElement               : TGUID = '{3050F26A-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTable                     : TGUID = '{3050F26B-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTableCol                  : TGUID = '{3050F26C-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTableRow                  : TGUID = '{3050F26D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLPhraseElement             : TGUID = '{3050F26E-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLParaElement               : TGUID = '{3050F26F-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLOListElement              : TGUID = '{3050F270-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLMapElement                : TGUID = '{3050F271-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLListElement               : TGUID = '{3050F272-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLLIElement                 : TGUID = '{3050F273-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLMetaElement               : TGUID = '{3050F275-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBaseElement               : TGUID = '{3050F276-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLLinkElement               : TGUID = '{3050F277-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLIsIndexElement            : TGUID = '{3050F278-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLNextIdElement             : TGUID = '{3050F279-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLHeaderElement             : TGUID = '{3050F27A-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFontElement               : TGUID = '{3050F27B-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDTElement                 : TGUID = '{3050F27C-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDListElement              : TGUID = '{3050F27D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDivElement                : TGUID = '{3050F27E-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDDElement                 : TGUID = '{3050F27F-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBRElement                 : TGUID = '{3050F280-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBlockElement              : TGUID = '{3050F281-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBaseFontElement           : TGUID = '{3050F282-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLAreaElement               : TGUID = '{3050F283-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTitleElement              : TGUID = '{3050F284-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyle                     : TGUID = '{3050F285-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLDialog                    : TGUID = '{3050F28A-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLScriptElement             : TGUID = '{3050F28C-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLInputTextElement          : TGUID = '{3050F2AB-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTextAreaElement           : TGUID = '{3050F2AC-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLInputFileElement          : TGUID = '{3050F2AE-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLInputButtonElement        : TGUID = '{3050F2B4-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLMarqueeElement            : TGUID = '{3050F2B9-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLOptionButtonElement       : TGUID = '{3050F2BE-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLInputImage                : TGUID = '{3050F2C4-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLButtonElement             : TGUID = '{3050F2C6-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleSheet                : TGUID = '{3050F2E4-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTableSection              : TGUID = '{3050F2E9-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLTableCaption              : TGUID = '{3050F2EC-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFrameBase                 : TGUID = '{3050F312-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFrameElement              : TGUID = '{3050F314-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLIFrame                    : TGUID = '{3050F316-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLCommentElement            : TGUID = '{3050F317-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFrameSetSite              : TGUID = '{3050F31A-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLLabelElement              : TGUID = '{3050F32B-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLScreen                    : TGUID = '{3050F35D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLBGsound                   : TGUID = '{3050F370-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleElement              : TGUID = '{3050F37D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleSheetsCollection     : TGUID = '{3050F37F-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLNoShowElement             : TGUID = '{3050F38B-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLOptionElementFactory      : TGUID = '{3050F38D-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLImageElementFactory       : TGUID = '{3050F38F-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLWindowProxy               : TGUID = '{3050F391-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleSheetRulesCollection : TGUID = '{3050F3CD-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleSheetRule            : TGUID = '{3050F3CE-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLRuleStyle                 : TGUID = '{3050F3D0-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLStyleFontFace             : TGUID = '{3050F3D4-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLSpanFlow                  : TGUID = '{3050F3E6-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFieldSetElement           : TGUID = '{3050F3E8-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLLegendElement             : TGUID = '{3050F3E9-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLFiltersCollection         : TGUID = '{3050F3EF-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_HTMLSpanElement               : TGUID = '{3050F3F5-98B4-11CF-BB82-00AA00BDCE0B}';
   CLSID_CMimeTypes                    : TGUID = '{3050F3FE-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_CPlugins                      : TGUID = '{3050F3FF-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_COpsProfile                   : TGUID = '{3050F402-98B5-11CF-BB82-00AA00BDCE0B}';
   CLSID_MHTMLDocument                 : TGUID = '{3050f3d9-98b5-11cf-bb82-00aa00bdce0b}';
   CLSID_ClassInstallFilter            : TGUID = '{32b533bb-edae-11d0-bd5a-00aa00b92af1}';
   CLSID_CUrlHistory                   : TGUID = '{3c374a40-bae4-11cf-bf7d-00aa006946ee}';
   CLSID_CdlProtocol                   : TGUID = '{3dd53d40-7b8b-11d0-b013-00aa0059ce02}';
   CLSID_StdEncodingFilterFac          : TGUID = '{54c37cd0-d944-11d0-a9f4-006097942311}';
   CLSID_TaskbarList                   : TGUID = '{56fdf344-fd6d-11d0-958a-006097c9a090}';
   CLSID_ShellFolderView               : TGUID = '{62112AA1-EBE4-11CF-A5FB-0020AFE7292D}';
   CLSID_CFSIconOverlayManager         : TGUID = '{63b51f81-c868-11d0-999c-00c04fd655e1}';
   CLSID_ShellUIHelper                 : TGUID = '{64AB4BB7-111E-11D1-8F79-00C04FC2FBE1}';
   CLSID_ActiveDesktop                 : TGUID = '{75048700-ef1f-11d0-9888-006097deacf9}';
   CLSID_StdHlink                      : TGUID = '{79eac9d0-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_StdHlinkBrowseContext         : TGUID = '{79eac9d1-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_StdURLMoniker                 : TGUID = '{79eac9e0-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_StdURLProtocol                : TGUID = '{79eac9e1-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_HttpProtocol                  : TGUID = '{79eac9e2-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_FtpProtocol                   : TGUID = '{79eac9e3-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_GopherProtocol                : TGUID = '{79eac9e4-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_HttpSProtocol                 : TGUID = '{79eac9e5-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_MkProtocol                    : TGUID = '{79eac9e6-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_FileProtocol                  : TGUID = '{79eac9e7-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_UrlMkBindCtx                  : TGUID = '{79eac9f2-baf9-11ce-8c82-00aa004ba90b}';
   CLSID_InternetSecurityManager       : TGUID = '{7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4}';
   CLSID_InternetZoneManager           : TGUID = '{7b8a2d95-0ac9-11d1-896c-00c04fb6bfc4}';
   CLSID_CDLAgent                      : TGUID = '{7d559c10-9fe9-11d0-93f7-00aa0059ce02}';
   CLSID_OverlayIdentifier_SlowFile    : TGUID = '{7d688a77-c613-11d0-999b-00c04fd655e1}';
   CLSID_StockFontPage                 : TGUID = '{7ebdaae0-8120-11cf-899f-00aa00688b10}';
   CLSID_StockColorPage                : TGUID = '{7ebdaae1-8120-11cf-899f-00aa00688b10}';
   CLSID_StockPicturePage              : TGUID = '{7ebdaae2-8120-11cf-899f-00aa00688b10}';
   CLSID_WebBrowser                    : TGUID = '{8856F961-340A-11D0-A96B-00C04FD705A2}';
   CLSID_DeCompMimeFilter              : TGUID = '{8f6b0360-b80d-11d0-a9b3-006097942311}';
   CLSID_ShellFolderViewOC             : TGUID = '{9BA05971-F6A8-11CF-A442-00A0C90A8F39}';
   CLSID_ShellWindows                  : TGUID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}';
   CLSID_SubscriptionMgr               : TGUID = '{ABBE31D0-6DAE-11D0-BECA-00C04FD940BE}';
   CLSID_ChannelMgr                    : TGUID = '{B3CDAE90-D170-11D0-802B-00C04FD75D13}';
   CLSID_CMLangString                  : TGUID = '{C04D65CF-B70D-11D0-B188-00AA0038C969}';
   CLSID_HTMLWindow2                   : TGUID = '{D48A6EC6-6A4A-11CF-94A7-444553540000}';
   CLSID_OldHTMLDocument               : TGUID = '{D48A6EC9-6A4A-11CF-94A7-444553540000}';
   CLSID_CMLangConvertCharset          : TGUID = '{D66D6F99-CDAA-11D0-B822-00C04FC9B31F}';
   CLSID_WebBrowser_V1                 : TGUID = '{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}';
   CLSID_HTMLHistory                   : TGUID = '{FECEAAA3-8405-11CF-8BA1-00AA00476DA6}';
   CLSID_HTMLNavigator                 : TGUID = '{FECEAAA6-8405-11CF-8BA1-00AA00476DA6}';
   CLSID_SoftDistExt                   : TGUID = '{b15b8dc0-c7e1-11d0-8680-00aa00bdcb71}';
   CLSID_CURLSearchHook                : TGUID = '{cfbfae00-17a6-11d0-99cb-00c04fd64497}';
   CLSID_PersistPropset                : TGUID = '{fb8f0821-0164-101b-84ed-08002b2ec713}';
   CLSID_ConvertVBX                    : TGUID = '{fb8f0822-0164-101b-84ed-08002b2ec713}';
   CLSID_InternetShortcut              : TGUID = '{fbf23b40-e3f0-101b-8488-00aa003e56f8}';
   CLSID_ShellItem                     : TGUID = '{9ac9fbe1-e0a2-4ad6-b4ee-e212013ea917}';
   CLSID_FileOpenDialog                : TGUID = '{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}';
   CLSID_FileSaveDialog                : TGUID = '{C0B4E2F3-BA21-4773-8DBA-335EC946EB8B}';

Const
  SV2GV_CURRENTVIEW  = DWORD(-1);
  SV2GV_DEFAULTVIEW  = DWORD(-2);

  INTERNET_MAX_URL_LENGTH =  2083;
  MAX_COLUMN_NAME_LEN = 80;
  MAX_COLUMN_DESC_LEN = 128;


  CMF_NORMAL              = $00000000;
  CMF_DEFAULTONLY         = $00000001;
  CMF_VERBSONLY           = $00000002;
  CMF_EXPLORE             = $00000004;
  CMF_NOVERBS             = $00000008;
  CMF_CANRENAME           = $00000010;
  CMF_NODEFAULT           = $00000020;
  CMF_INCLUDESTATIC       = $00000040;
  CMF_EXTENDEDVERBS       = $00000100;      // rarely used verbs
  CMF_RESERVED            = $ffff0000;      // View specific
  GCS_VERBA        = $00000000;     // canonical verb
  GCS_HELPTEXTA    = $00000001;     // help text (for status bar)
  GCS_VALIDATEA    = $00000002;     // validate command exists
  GCS_VERBW        = $00000004;     // canonical verb (unicode)
  GCS_HELPTEXTW    = $00000005;     // help text (unicode version)
  GCS_VALIDATEW    = $00000006;     // validate command exists (unicode)
  GCS_UNICODE      = $00000004;     // for bit testing - Unicode string
  CMIC_MASK_SHIFT_DOWN    = $10000000;
  CMIC_MASK_CONTROL_DOWN  = $40000000;
  CMIC_MASK_PTINVOKE      = $20000000;
  GIL_OPENICON     = $0001;      // allows containers to specify an "open" look
  GIL_FORSHELL     = $0002;      // icon is to be displayed in a ShellFolder
  GIL_ASYNC        = $0020;      // this is an async extract, return E_PENDING
  GIL_DEFAULTICON  = $0040;      // get the default icon location if the final one takes too long to get
  GIL_FORSHORTCUT  = $0080;      // the icon is for a shortcut to the object
  GIL_SIMULATEDOC  = $0001;      // simulate this document icon for this
  GIL_PERINSTANCE  = $0002;      // icons from this class are per instance (each file has its own)
  GIL_PERCLASS     = $0004;      // icons from this class per class (shared for all files of this type)
  GIL_NOTFILENAME  = $0008;      // location is not a filename, must call ::ExtractIcon
  GIL_DONTCACHE    = $0010;      // this icon should not be cached
  ISIOI_ICONFILE            = $00000001;          // path is returned through pwszIconFile
  ISIOI_ICONINDEX           = $00000002;          // icon index in pwszIconFile is returned through pIndex
  OI_ASYNC = $FFFFEEEE;
  IDO_SHGIOI_SHARE  = $0FFFFFFF;
  IDO_SHGIOI_LINK   = $0FFFFFFE;
  IDO_SHGIOI_SLOWFILE = $0FFFFFFFD;
  NT_CONSOLE_PROPS_SIG = $A0000002;
  NT_FE_CONSOLE_PROPS_SIG = $A0000004;
  EXP_DARWIN_ID_SIG       = $A0000006;
  EXP_LOGO3_ID_SIG        = $A0000007;
  EXP_SPECIAL_FOLDER_SIG         = $A0000005;   // LPEXP_SPECIAL_FOLDER
  EXP_SZ_LINK_SIG                = $A0000001;   // LPEXP_SZ_LINK (target)
  EXP_SZ_ICON_SIG                = $A0000007;   // LPEXP_SZ_LINK (icon)
  FO_MOVE           = $0001;
  FO_COPY           = $0002;
  FO_DELETE         = $0003;
  FO_RENAME         = $0004;
  FOF_MULTIDESTFILES         = $0001;
  FOF_CONFIRMMOUSE           = $0002;
  FOF_SILENT                 = $0004;  // don't create progress/report
  FOF_RENAMEONCOLLISION      = $0008;
  FOF_NOCONFIRMATION         = $0010;  // Don't prompt the user.
  FOF_WANTMAPPINGHANDLE      = $0020;  // Fill in SHFILEOPSTRUCT.hNameMappings
  FOF_ALLOWUNDO              = $0040;
  FOF_FILESONLY              = $0080;  // on *.*, do only files
  FOF_SIMPLEPROGRESS         = $0100;  // means don't show names of files
  FOF_NOCONFIRMMKDIR         = $0200;  // don't confirm making any needed dirs
  FOF_NOERRORUI              = $0400;  // don't put up error UI
  FOF_NOCOPYSECURITYATTRIBS  = $0800;  // dont copy NT file Security Attributes
  FOF_NORECURSION            = $1000;  // don't recurse into directories.
  FOF_NO_CONNECTED_ELEMENTS  = $2000;  // don't operate on connected file elements.
  FOF_WANTNUKEWARNING        = $4000;  // during delete operation, warn if nuking instead of recycling (partially overrides FOF_NOCONFIRMATION)
  FOF_NORECURSEREPARSE       = $8000;  // treat reparse points as objects, not containers
  PO_DELETE                  = $0013;  // printer is being deleted
  PO_RENAME                  = $0014;  // printer is being renamed
  PO_PORTCHANGE              = $0020;  // port this printer connected to is being changed
  PO_REN_PORT                = $0034;  // PO_RENAME and PO_PORTCHANGE at same time.
  FVSIF_RECT                 = $00000001;      // The rect variable has valid data.
  FVSIF_PINNED               = $00000002;      // We should Initialize pinned
  FVSIF_NEWFAILED            = $08000000;      // The new file passed back failed
  FVSIF_NEWFILE              = $80000000;      // A new file to view has been returned
  FVSIF_CANVIEWIT            = $40000000;      // The viewer can view it.
  FCIDM_SHVIEWFIRST          = $0000;
  FCIDM_SHVIEWLAST           = $7fff;
  FCIDM_BROWSERFIRST         = $a000;
  FCIDM_BROWSERLAST          = $bf00;
  FCIDM_GLOBALFIRST          = $8000;
  FCIDM_GLOBALLAST           = $9fff;
  FCIDM_MENU_FILE            = (FCIDM_GLOBALFIRST + $0000);
  FCIDM_MENU_EDIT            = (FCIDM_GLOBALFIRST + $0040);
  FCIDM_MENU_VIEW            = (FCIDM_GLOBALFIRST + $0080);
  FCIDM_MENU_VIEW_SEP_OPTIONS= (FCIDM_GLOBALFIRST + $0081);
  FCIDM_MENU_TOOLS           = (FCIDM_GLOBALFIRST + $00c0); // for Win9x compat
  FCIDM_MENU_TOOLS_SEP_GOTO  = (FCIDM_GLOBALFIRST + $00c1); // for Win9x compat
  FCIDM_MENU_HELP            = (FCIDM_GLOBALFIRST + $0100);
  FCIDM_MENU_FIND            = (FCIDM_GLOBALFIRST + $0140);
  FCIDM_MENU_EXPLORE         = (FCIDM_GLOBALFIRST + $0150);
  FCIDM_MENU_FAVORITES       = (FCIDM_GLOBALFIRST + $0170);
  CDBOSC_SETFOCUS            = $00000000;
  CDBOSC_KILLFOCUS           = $00000001;
  CDBOSC_SELCHANGE           = $00000002;
  CDBOSC_RENAME              = $00000003;
  CDBOSC_STATECHANGE         = $00000004;
  CDB2N_CONTEXTMENU_DONE     = $00000001;
  CDB2N_CONTEXTMENU_START    = $00000002;
  CDB2GVF_SHOWALLFILES       = $00000001;
  CSIDL_DESKTOP                   = $0000;        // <desktop>
  CSIDL_INTERNET                  = $0001;        // Internet Explorer (icon on desktop)
  CSIDL_PROGRAMS                  = $0002;        // Start Menu\Programs
  CSIDL_CONTROLS                  = $0003;        // My Computer\Control Panel
  CSIDL_PRINTERS                  = $0004;        // My Computer\Printers
  CSIDL_PERSONAL                  = $0005;        // My Documents
  CSIDL_FAVORITES                 = $0006;        // <user name>\Favorites
  CSIDL_STARTUP                   = $0007;        // Start Menu\Programs\Startup
  CSIDL_RECENT                    = $0008;        // <user name>\Recent
  CSIDL_SENDTO                    = $0009;        // <user name>\SendTo
  CSIDL_BITBUCKET                 = $000a;        // <desktop>\Recycle Bin
  CSIDL_STARTMENU                 = $000b;        // <user name>\Start Menu
  CSIDL_MYDOCUMENTS               = $000c;        // logical "My Documents" desktop icon
  CSIDL_MYMUSIC                   = $000d;        // "My Music" folder
  CSIDL_MYVIDEO                   = $000e;        // "My Videos" folder
  CSIDL_DESKTOPDIRECTORY          = $0010;        // <user name>\Desktop
  CSIDL_DRIVES                    = $0011;        // My Computer
  CSIDL_NETWORK                   = $0012;        // Network Neighborhood (My Network Places)
  CSIDL_NETHOOD                   = $0013;        // <user name>\nethood
  CSIDL_FONTS                     = $0014;        // windows\fonts
  CSIDL_TEMPLATES                 = $0015;
  CSIDL_COMMON_STARTMENU          = $0016;        // All Users\Start Menu
  CSIDL_COMMON_PROGRAMS           = $0017;        // All Users\Start Menu\Programs
  CSIDL_COMMON_STARTUP            = $0018;        // All Users\Startup
  CSIDL_COMMON_DESKTOPDIRECTORY   = $0019;        // All Users\Desktop
  CSIDL_APPDATA                   = $001a;        // <user name>\Application Data
  CSIDL_PRINTHOOD                 = $001b;        // <user name>\PrintHood
  CSIDL_LOCAL_APPDATA             = $001c;        // <user name>\Local Settings\Applicaiton Data (non roaming)
  CSIDL_ALTSTARTUP                = $001d;        // non localized startup
  CSIDL_COMMON_ALTSTARTUP         = $001e;        // non localized common startup
  CSIDL_COMMON_FAVORITES          = $001f;
  CSIDL_INTERNET_CACHE            = $0020;
  CSIDL_COOKIES                   = $0021;
  CSIDL_HISTORY                   = $0022;
  CSIDL_COMMON_APPDATA            = $0023;        // All Users\Application Data
  CSIDL_WINDOWS                   = $0024;        // GetWindowsDirectory()
  CSIDL_SYSTEM                    = $0025;        // GetSystemDirectory()
  CSIDL_PROGRAM_FILES             = $0026;        // C:\Program Files
  CSIDL_MYPICTURES                = $0027;        // C:\Program Files\My Pictures
  CSIDL_PROFILE                   = $0028;        // USERPROFILE
  CSIDL_SYSTEMX86                 = $0029;        // x86 system directory on RISC
  CSIDL_PROGRAM_FILESX86          = $002a;        // x86 C:\Program Files on RISC
  CSIDL_PROGRAM_FILES_COMMON      = $002b;        // C:\Program Files\Common
  CSIDL_PROGRAM_FILES_COMMONX86   = $002c;        // x86 Program Files\Common on RISC
  CSIDL_COMMON_TEMPLATES          = $002d;        // All Users\Templates
  CSIDL_COMMON_DOCUMENTS          = $002e;        // All Users\Documents
  CSIDL_COMMON_ADMINTOOLS         = $002f;        // All Users\Start Menu\Programs\Administrative Tools
  CSIDL_ADMINTOOLS                = $0030;        // <user name>\Start Menu\Programs\Administrative Tools
  CSIDL_CONNECTIONS               = $0031;        // Network and Dial-up Connections
  CSIDL_COMMON_MUSIC              = $0035;        // All Users\My Music
  CSIDL_COMMON_PICTURES           = $0036;        // All Users\My Pictures
  CSIDL_COMMON_VIDEO              = $0037;        // All Users\My Video
  CSIDL_RESOURCES                 = $0038;        // Resource Direcotry
  CSIDL_RESOURCES_LOCALIZED       = $0039;        // Localized Resource Direcotry
  CSIDL_COMMON_OEM_LINKS          = $003a;        // Links to All Users OEM specific apps
  CSIDL_CDBURN_AREA               = $003b;        // USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
  CSIDL_COMPUTERSNEARME           = $003d;        // Computers Near Me (computered from Workgroup membership)
  CSIDL_FLAG_CREATE               = $8000;        // combine with CSIDL_ value to force folder creation in SHGetFolderPath()
  CSIDL_FLAG_DONT_VERIFY          = $4000;        // combine with CSIDL_ value to return an unverified folder path
  CSIDL_FLAG_NO_ALIAS             = $1000;        // combine with CSIDL_ value to insure non-alias versions of the pidl
  CSIDL_FLAG_PER_USER_INIT        = $0800;        // combine with CSIDL_ value to indicate per-user init (eg. upgrade)
  CSIDL_FLAG_MASK                 = $FF00;        // mask for all possible flag values
  FCS_READ                        = $00000001;
  FCS_FORCEWRITE                  = $00000002;
  FCSM_VIEWID                     = $00000001;
  FCSM_WEBVIEWTEMPLATE            = $00000002;
  FCSM_INFOTIP                    = $00000004;
  FCSM_CLSID                      = $00000008;
  FCSM_ICONFILE                   = $00000010;
  FCSM_LOGO                       = $00000020;
  FCSM_FLAGS                      = $00000040;
  BIF_RETURNONLYFSDIRS            = $0001;  // For finding a folder to start document searching
  BIF_DONTGOBELOWDOMAIN           = $0002;  // For starting the Find Computer
  BIF_STATUSTEXT                  = $0004;   // Top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle and one line if
  BIF_RETURNFSANCESTORS           = $0008;
  BIF_EDITBOX                     = $0010;   // Add an editbox to the dialog
  BIF_VALIDATE                    = $0020;   // insist on valid result (or CANCEL)
  BIF_NEWDIALOGSTYLE              = $0040;   // Use the new dialog layout with the ability to resize
  BIF_BROWSEINCLUDEURLS           = $0080;   // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)
  BIF_UAHINT                      = $0100;   // Add a UA hint to the dialog, in place of the edit box. May not be combined with BIF_EDITBOX
  BIF_NONEWFOLDERBUTTON           = $0200;   // Do not add the "New Folder" button to the dialog.  Only applicable with BIF_NEWDIALOGSTYLE.
  BIF_NOTRANSLATETARGETS          = $0400;   // don't traverse target as shortcut
  BIF_BROWSEFORCOMPUTER           = $1000;  // Browsing for Computers.
  BIF_BROWSEFORPRINTER            = $2000;  // Browsing for Printers
  BIF_BROWSEINCLUDEFILES          = $4000;  // Browsing for Everything
  BIF_SHAREABLE                   = $8000;  // sharable resources displayed (remote shares, requires BIF_USENEWUI)
  PROGDLG_NORMAL                  = $00000000;      // default normal progress dlg behavior
  PROGDLG_MODAL                   = $00000001;      // the dialog is modal to its hwndParent (default is modeless)
  PROGDLG_AUTOTIME                = $00000002;      // automatically updates the "Line3" text with the "time remaining" (you cant call SetLine3 if you passs this!)
  PROGDLG_NOTIME                  = $00000004;      // we dont show the "time remaining" if this is set. We need this if dwTotal < dwCompleted for sparse files
  PROGDLG_NOMINIMIZE              = $00000008;      // Do not have a minimize button in the caption bar.
  PROGDLG_NOPROGRESSBAR           = $00000010;      // Don't display the progress bar
  PDTIMER_RESET                   = $00000001;       // Reset the timer so the progress will be calculated from now until the first ::SetProgress() is called so
  DWFRF_NORMAL                    = $0000;
  DWFRF_DELETECONFIGDATA          = $0001;
  DWFAF_HIDDEN                    = $0001;   // add hidden
  ITSSFLAG_COMPLETE_ON_DESTROY        = $0000;
  ITSSFLAG_KILL_ON_DESTROY            = $0001;
  ITSSFLAG_SUPPORTS_TERMINATE         = $0002;
  ITSSFLAG_FLAGS_MASK                 = $0003;
  ITSSFLAG_THREAD_TERMINATE_TIMEOUT   = $0010;
  ITSSFLAG_THREAD_POOL_TIMEOUT        = $0020;
  ITSAT_DEFAULT_LPARAM        = $ffffffff;
  ITSAT_DEFAULT_PRIORITY      = $10000000;
  ITSAT_MAX_PRIORITY          = $7fffffff;
  ITSAT_MIN_PRIORITY          = $00000000;
  ITSSFLAG_TASK_PLACEINFRONT = $00000001;
  ITSSFLAG_TASK_PLACEINBACK  = $00000002;
  SHIMSTCAPFLAG_LOCKABLE    = $0001;       // does the store require/support locking
  SHIMSTCAPFLAG_PURGEABLE   = $0002;       // does the store require dead items purging externally ?
  ISFB_MASK_STATE           = $00000001; // TRUE if dwStateMask and dwState is valid
  ISFB_MASK_BKCOLOR         = $00000002; // TRUE if crBkgnd field is valid
  ISFB_MASK_VIEWMODE        = $00000004; // TRUE if wViewMode field is valid
  ISFB_MASK_SHELLFOLDER     = $00000008;
  ISFB_MASK_IDLIST          = $00000010;
  ISFB_MASK_COLORS          = $00000020; // TRUE if crXXXX fields are valid (except bkgnd)
  ISFB_STATE_DEFAULT        = $00000000;
  ISFB_STATE_DEBOSSED       = $00000001;
  ISFB_STATE_ALLOWRENAME    = $00000002;
  ISFB_STATE_NOSHOWTEXT     = $00000004; // TRUE if _fNoShowText
  ISFB_STATE_CHANNELBAR     = $00000010; // TRUE if we want NavigateTarget support
  ISFB_STATE_QLINKSMODE     = $00000020; // TRUE if we want to turn off drag & drop onto content items
  ISFB_STATE_FULLOPEN       = $00000040; // TRUE if band should maximize when opened
  ISFB_STATE_NONAMESORT     = $00000080; // TRUE if band should _not_ sort icons by name
  ISFB_STATE_BTNMINSIZE     = $00000100; // TRUE if band should report min thickness of button
  ISFBVIEWMODE_SMALLICONS   = $0001;
  ISFBVIEWMODE_LARGEICONS   = $0002;
  ISFBVIEWMODE_LOGOS        = $0003;
  COMPONENT_TOP 	      = $3fffffff;  // izOrder value meaning component is at the top
  IS_NORMAL                 = $00000001;
  IS_FULLSCREEN             = $00000002;
  IS_SPLIT                  = $00000004;
  IS_VALIDSTATEBITS         = dword(IS_NORMAL or IS_SPLIT or IS_FULLSCREEN or $80000000 or $40000000);  // All of the currently defined IS_* bits.
  AD_APPLY_SAVE             = $00000001;
  AD_APPLY_HTMLGEN          = $00000002;
  AD_APPLY_REFRESH          = $00000004;
  AD_APPLY_FORCE            = $00000008;
  AD_APPLY_BUFFERED_REFRESH = $00000010;
  AD_APPLY_DYNAMICREFRESH   = $00000020;
  COMP_ELEM_TYPE          = $00000001;
  COMP_ELEM_CHECKED       = $00000002;
  COMP_ELEM_DIRTY         = $00000004;
  COMP_ELEM_NOSCROLL      = $00000008;
  COMP_ELEM_POS_LEFT      = $00000010;
  COMP_ELEM_POS_TOP       = $00000020;
  COMP_ELEM_SIZE_WIDTH    = $00000040;
  COMP_ELEM_SIZE_HEIGHT   = $00000080;
  COMP_ELEM_POS_ZINDEX    = $00000100;
  COMP_ELEM_SOURCE        = $00000200;
  COMP_ELEM_FRIENDLYNAME  = $00000400;
  COMP_ELEM_SUBSCRIBEDURL = $00000800;
  COMP_ELEM_ORIGINAL_CSI  = $00001000;
  COMP_ELEM_RESTORED_CSI  = $00002000;
  COMP_ELEM_CURITEMSTATE  = $00004000;
  ADDURL_SILENT           = $0001;
  COMPONENT_DEFAULT_LEFT    = ($FFFF);
  COMPONENT_DEFAULT_TOP     = ($FFFF);
  SSM_CLEAR   = $0000;
  SSM_SET     = $0001;
  SSM_REFRESH = $0002;
  SSM_UPDATE  = $0004;
  SCHEME_DISPLAY          = $0001;
  SCHEME_EDIT             = $0002;
  SCHEME_LOCAL            = $0004;
  SCHEME_GLOBAL           = $0008;
  SCHEME_REFRESH          = $0010;
  SCHEME_UPDATE           = $0020;
  SCHEME_DONOTUSE         = $0040; // used to be SCHEME_ENUMERATE; no longer supported
  SCHEME_CREATE           = $0080;
  GADOF_DIRTY             = $00000001;
  SHCDF_UPDATEITEM        = $00000001;      // this flag is a hint that the file has changed since the last call to GetItemData
  SHCNE_RENAMEITEM          = DWord($00000001);
  SHCNE_CREATE              = DWord($00000002);
  SHCNE_DELETE              = DWord($00000004);
  SHCNE_MKDIR               = DWord($00000008);
  SHCNE_RMDIR               = DWord($00000010);
  SHCNE_MEDIAINSERTED       = DWord($00000020);
  SHCNE_MEDIAREMOVED        = DWord($00000040);
  SHCNE_DRIVEREMOVED        = DWord($00000080);
  SHCNE_DRIVEADD            = DWord($00000100);
  SHCNE_NETSHARE            = DWord($00000200);
  SHCNE_NETUNSHARE          = DWord($00000400);
  SHCNE_ATTRIBUTES          = DWord($00000800);
  SHCNE_UPDATEDIR           = DWord($00001000);
  SHCNE_UPDATEITEM          = DWord($00002000);
  SHCNE_SERVERDISCONNECT    = DWord($00004000);
  SHCNE_UPDATEIMAGE         = DWord($00008000);
  SHCNE_DRIVEADDGUI         = DWord($00010000);
  SHCNE_RENAMEFOLDER        = DWord($00020000);
  SHCNE_FREESPACE           = DWord($00040000);
  SHCNE_EXTENDED_EVENT      = DWord($04000000);
  SHCNE_ASSOCCHANGED        = DWord($08000000);
  SHCNE_DISKEVENTS          = DWord($0002381F);
  SHCNE_GLOBALEVENTS        = DWord($0C0581E0); // Events that dont match pidls first
  SHCNE_ALLEVENTS           = DWord($7FFFFFFF);
  SHCNE_INTERRUPT           = DWord($80000000); // The presence of this flag indicates
  SHCNF_IDLIST      = $0000;        // LPITEMIDLIST
  SHCNF_PATHA       = $0001;        // path name
  SHCNF_PRINTERA    = $0002;        // printer friendly name
  SHCNF_DWORD       = $0003;        // DWORD
  SHCNF_PATHW       = $0005;        // path name
  SHCNF_PRINTERW    = $0006;        // printer friendly name
  SHCNF_TYPE        = $00FF;  
  SHCNF_FLUSH       = $1000;  
  SHCNF_FLUSHNOWAIT = $2000;  
  QITIPF_DEFAULT          = $00000000;
  QITIPF_USENAME          = $00000001;
  QITIPF_LINKNOTARGET     = $00000002;
  QITIPF_LINKUSETARGET    = $00000004;
  QITIPF_USESLOWTIP       = $00000008;  // Flag says it's OK to take a long time generating tip
  QIF_CACHED          = $00000001;
  QIF_DONTEXPANDFOLDER= $00000002;
  SHARD_PIDL            = DWord($00000001);
  SHARD_PATHA           = DWord($00000002);
  SHARD_PATHW           = DWord($00000003);
  SHARD_APPIDINFO       = DWord($00000004);
  SHARD_APPIDINFOIDLIST = DWord($00000005);
  SHARD_LINK            = DWord($00000006);
  SHARD_APPIDINFOLINK   = DWord($00000007);
  SHARD_SHELLITEM       = DWord($00000008);
  PRF_VERIFYEXISTS            = $0001;
  PRF_TRYPROGRAMEXTENSIONS    = ($0002 or PRF_VERIFYEXISTS);
  PRF_FIRSTDIRDEF             = $0004;
  PRF_DONTFINDLNK             = $0008;      // if PRF_TRYPROGRAMEXTENSIONS is specified
  PCS_FATAL           = $80000000;
  PCS_REPLACEDCHAR    = $00000001;
  PCS_REMOVEDCHAR     = $00000002;
  PCS_TRUNCATED       = $00000004;
  PCS_PATHTOOLONG     = $00000008;  // Always combined with FATA);
  MM_ADDSEPARATOR     = dword($00000001);
  MM_SUBMENUSHAVEIDS  = dword($00000002);
  MM_DONTREMOVESEPS   = dword($00000004);
  SHOP_PRINTERNAME    = $00000001;  // lpObject points to a printer friendly name
  SHOP_FILEPATH       = $00000002;  // lpObject points to a fully qualified path+file name
  SHOP_VOLUMEGUID     = $00000004;  // lpObject points to a Volume GUID
  SHFMT_ID_DEFAULT    = $FFFF;
  SHFMT_OPT_FULL      = $0001;
  SHFMT_OPT_SYSONLY   = $0002;
  SHFMT_ERROR         = dword($FFFFFFFF);     // Error on last format, drive may be formatable
  SHFMT_CANCEL        = dword($FFFFFFFE);     // Last format was canceled
  SHFMT_NOFORMAT      = dword($FFFFFFFD);     // Drive is not formatable
  PPCF_ADDQUOTES              = $00000001;        // return a quoted name if required
  PPCF_ADDARGUMENTS           = $00000003;        // appends arguments (and wraps in quotes if required)
  PPCF_NODIRECTORIES          = $00000010;        // don't match to directories
  PPCF_FORCEQUALIFY           = $00000040;        // qualify even non-relative names
  PPCF_LONGESTPOSSIBLE        = $00000080;        // always find the longest possible name
  VALIDATEUNC_NOUI            = $0002;          // don't bring up UI
  VALIDATEUNC_CONNECT         = $0001;          // connect a drive letter
  VALIDATEUNC_PRINT           = $0004;          // validate as print share instead of disk share
  VALIDATEUNC_VALID           = $0007;          // valid flags
  OPENPROPS_NONE              = $0000;
  OPENPROPS_INHIBITPIF        = $8000;
  GETPROPS_NONE               = $0000;
  SETPROPS_NONE               = $0000;
  CLOSEPROPS_NONE             = $0000;	
  CLOSEPROPS_DISCARD          = $0001;		
  TBIF_DEFAULT                = $00000000;
  TBIF_INTERNETBAR  	        = $00010000;
  TBIF_STANDARDTOOLBAR        = $00020000;
  TBIF_NOTOOLBAR              = $00030000;
  SFVM_REARRANGE              = $00000001;
  SFVM_ADDOBJECT              = $00000003;
  SFVM_REMOVEOBJECT           = $00000006;
  SFVM_UPDATEOBJECT           = $00000007;
  SFVM_GETSELECTEDOBJECTS     = $00000009;
  SFVM_SETITEMPOS             = $0000000e;
  SFVM_SETCLIPBOARD           = $00000010;
  SFVM_SETPOINTS              = $00000017;
  PIDISF_RECENTLYCHANGED      = $00000001;
  PIDISF_CACHEDSTICKY         = $00000002;
  PIDISF_CACHEIMAGES          = $00000010;
  PIDISF_FOLLOWALLLINKS       = $00000020;
  SSF_SHOWALLOBJECTS          = $00000001;
  SSF_SHOWEXTENSIONS          = $00000002;
  SSF_HIDDENFILEEXTS          = $00000004;
  SSF_SERVERADMINUI           = $00000004;
  SSF_SHOWCOMPCOLOR           = $00000008;
  SSF_SORTCOLUMNS             = $00000010;
  SSF_SHOWSYSFILES            = $00000020;
  SSF_DOUBLECLICKINWEBVIEW    = $00000080;
  SSF_SHOWATTRIBCOL           = $00000100;
  SSF_DESKTOPHTML             = $00000200;
  SSF_WIN95CLASSIC            = $00000400;
  SSF_DONTPRETTYPATH          = $00000800;
  SSF_SHOWINFOTIP             = $00002000;
  SSF_MAPNETDRVBUTTON         = $00001000;
  SSF_NOCONFIRMRECYCLE        = $00008000;
  SSF_HIDEICONS               = $00004000;
  SSF_FILTER                  = $00010000;
  SSF_WEBVIEW                 = $00020000;
  SSF_SHOWSUPERHIDDEN         = $00040000;
  SSF_SEPPROCESS              = $00080000;
  SSF_NONETCRAWLING           = $00100000;
  SSF_STARTPANELON            = $00200000;
  SSF_SHOWSTARTPAGE           = $00400000;
  SHPPFW_NONE                 = $00000000;
  SHPPFW_DIRCREATE            = $00000001;              // Create the directory if it doesn't exist without asking the user.
  SHPPFW_ASKDIRCREATE         = $00000002;              // Create the directory if it doesn't exist after asking the user.
  SHPPFW_IGNOREFILENAME       = $00000004;              // Ignore the last item in pszPath because it's a file.  Example: pszPath="C:\DirA\DirB", only use "C:\DirA".
  SHPPFW_NOWRITECHECK         = $00000008;              // Caller only needs to read from the drive, so don't check if it's READ ONLY.
  SHPPFW_MEDIACHECKONLY       = $00000010;              // do the retrys on the media (or net path), return errors if the file can't be found
  PUIFNF_DEFAULT          = $00000000;
  PUIFNF_MNEMONIC         = $00000001;   // include mnemonic in display name
  PUIF_DEFAULT            = $00000000;
  PUIF_RIGHTALIGN         = $00000001;   // this property should be right alligned
  PUIF_NOLABELININFOTIP   = $00000002;   // this property should not display a label in the infotip
  PUIFFDF_DEFAULT         = $00000000;
  PUIFFDF_RIGHTTOLEFT     = $00000001;   // BIDI support, right to left caller
  PUIFFDF_SHORTFORMAT     = $00000002;   // short format version of string
  PUIFFDF_NOTIME          = $00000004;   // truncate time to days, not hours/mins/sec
  PUIFFDF_FRIENDLYDATE    = $00000008;   // "Today", "Yesterday", etc
  PUIFFDF_NOUNITS         = $00000010;   // don't do "KB", "MB", "KHz"
  CATINFO_NORMAL          = $00000000;   // Apply default properties to this category
  CATINFO_COLLAPSED       = $00000001;   // This category should appear collapsed. useful for the "None" category. 
  CATINFO_HIDDEN          = $00000002;   // This category should follow the "Hidden" files setting for being displayed
  CATSORT_DEFAULT         = $00000000;   // Default Sort order
  CATSORT_NAME            = $00000001;   // Sort by name
  SLR_NO_UI               = $0001;   // don't post any UI durring the resolve operation, not msgs are pumped
  SLR_ANY_MATCH           = $0002;   // no longer used
  SLR_UPDATE              = $0004;   // save the link back to it's file if the track made it dirty
  SLR_NOUPDATE            = $0008;
  SLR_NOSEARCH            = $0010;   // don't execute the search heuristics
  SLR_NOTRACK             = $0020;   // don't use NT5 object ID to track the link
  SLR_NOLINKINFO          = $0040;   // don't use the net and volume relative info
  SLR_INVOKE_MSI          = $0080;   // if we have a darwin link, then call msi to fault in the applicaion
  SLR_NO_UI_WITH_MSG_PUMP = $0101;   // SLR_NO_UI + requires an enable modeless site or HWND
  SLGP_SHORTPATH          = $0001;
  SLGP_UNCPRIORITY        = $0002;
  SLGP_RAWPATH            = $0004;
  SPINITF_NORMAL          = $00000000;      // default normal progress behavior
  SPINITF_MODAL           = $00000001;      // call punkSite->EnableModeless() or EnableWindow()
  SPINITF_NOMINIMIZE      = $00000008;      // Do not have a minimize button in the caption bar.
  ARCONTENT_AUTORUNINF    = $00000002; // That's the one we have today, and always had 
  ARCONTENT_AUDIOCD       = $00000004; // Audio CD (not MP3 and the like, the stuff you buy at the store) 
  ARCONTENT_DVDMOVIE      = $00000008; // DVD Movie (not MPEGs, the stuff you buy at the store) 
  ARCONTENT_BLANKCD       = $00000010; // Blank CD-R/CD-RW 
  ARCONTENT_BLANKDVD      = $00000020; // Blank DVD-R/DVD-RW 
  ARCONTENT_UNKNOWNCONTENT= $00000040; // Whatever files.  Mean that it's formatted.
  ARCONTENT_AUTOPLAYPIX   = $00000080; // Whatever files.  Mean that it's formatted.
  ARCONTENT_AUTOPLAYMUSIC = $00000100; // Whatever files.  Mean that it's formatted.
  ARCONTENT_AUTOPLAYVIDEO = $00000200; // Whatever files.  Mean that it's formatted.
  SPBEGINF_NORMAL         = $00000000;      // default normal progress behavior
  SPBEGINF_AUTOTIME       = $00000002;      // automatically updates the "time remaining" text 
  SPBEGINF_NOPROGRESSBAR  = $00000010;      // Don't display the progress bar (SetProgress() wont be called)
  SPBEGINF_MARQUEEPROGRESS= $00000020;      // use marquee progress (comctl32 v6 required)
  EXPPS_FILETYPES         = $00000001;
  IEI_PRIORITY_MAX        = ITSAT_MAX_PRIORITY;
  IEI_PRIORITY_MIN        = ITSAT_MIN_PRIORITY;
  IEIT_PRIORITY_NORMAL    = ITSAT_DEFAULT_PRIORITY;
  IEIFLAG_ASYNC           = $0001;      // ask the extractor if it supports ASYNC extract (free threaded)
  IEIFLAG_CACHE           = $0002;      // returned from the extractor if it does NOT cache the thumbnail
  IEIFLAG_ASPECT          = $0004;      // passed to the extractor to beg it to render to the aspect ratio of the supplied rect
  IEIFLAG_OFFLINE         = $0008;      // if the extractor shouldn't hit the net to get any content neede for the rendering
  IEIFLAG_GLEAM           = $0010;      // does the image have a gleam ? this will be returned if it does
  IEIFLAG_SCREEN          = $0020;      // render as if for the screen  (this is exlusive with IEIFLAG_ASPECT )
  IEIFLAG_ORIGSIZE        = $0040;      // render to the approx size passed, but crop if neccessary
  IEIFLAG_NOSTAMP         = $0080;      // returned from the extractor if it does NOT want an icon stamp on the thumbnail
  IEIFLAG_NOBORDER        = $0100;      // returned from the extractor if it does NOT want an a border around the thumbnail
  IEIFLAG_QUALITY         = $0200;      // passed to the Extract method to indicate that a slower, higher quality image is desired, re-compute the thumbnail
  IEIFLAG_REFRESH         = $0400;      // returned from the extractor if it would like to have Refresh Thumbnail available
  DBIM_MINSIZE            = $0001;
  DBIM_MAXSIZE            = $0002;
  DBIM_INTEGRAL           = $0004;
  DBIM_ACTUAL             = $0008;
  DBIM_TITLE              = $0010;
  DBIM_MODEFLAGS          = $0020;
  DBIM_BKCOLOR            = $0040;
  DBIMF_NORMAL            = $0000;
  DBIMF_FIXED             = $0001;
  DBIMF_FIXEDBMP          = $0004;   // a fixed background bitmap (if supported)
  DBIMF_VARIABLEHEIGHT    = $0008;
  DBIMF_UNDELETEABLE      = $0010;
  DBIMF_DEBOSSED          = $0020;
  DBIMF_BKCOLOR           = $0040;
  DBIMF_USECHEVRON        = $0080;
  DBIMF_BREAK             = $0100;
  DBIMF_ADDTOFRONT        = $0200;
  DBIMF_TOPALIGN          = $0400;
  DBIF_VIEWMODE_NORMAL    = $0000;
  DBIF_VIEWMODE_VERTICAL  = $0001;
  DBIF_VIEWMODE_FLOATING  = $0002;
  DBIF_VIEWMODE_TRANSPARENT    = $0004;
  DBID_BANDINFOCHANGED    = 0;
  DBID_SHOWONLY           = 1;
  DBID_MAXIMIZEBAND       = 2;      // Maximize the specified band (VT_UI4 == dwID)
  DBID_PUSHCHEVRON        = 3;
  DBID_DELAYINIT          = 4;      // Note: _bandsite_ calls _band_ with this code
  DBID_FINISHINIT         = 5;      // Note: _bandsite_ calls _band_ with this code
  DBID_SETWINDOWTHEME     = 6;      // Note: _bandsite_ calls _band_ with this code
  DBID_PERMITAUTOHIDE     = 7;
  IDD_WIZEXTN_FIRST       = $5000;
  IDD_WIZEXTN_LAST        = $5100;
  SHPWHF_NORECOMPRESS     = $00000001;  // don't allow/prompt for recompress of streams
  SHPWHF_NONETPLACECREATE = $00000002;  // don't create a network place when transfer is complete
  SHPWHF_NOFILESELECTOR   = $00000004;  // don't show the file selector
  SHPWHF_VALIDATEVIAWEBFOLDERS    = $00010000;  // enable web folders to validate network places (ANP support)

  CDBE_RET_DEFAULT        = $00000000;
  CDBE_RET_DONTRUNOTHEREXTS = $00000001;
  CDBE_RET_STOPWIZARD     = $00000002;
  CDBE_TYPE_MUSIC         = $00000001;
  CDBE_TYPE_DATA  	    = $00000002;
  CDBE_TYPE_ALL   	    = $FFFFFFFF;
  BSIM_STATE              = $00000001;
  BSIM_STYLE              = $00000002;
  BSSF_VISIBLE            = $00000001;
  BSSF_NOTITLE            = $00000002;
  BSSF_UNDELETEABLE       = $00001000;
  BSIS_AUTOGRIPPER        = $00000000;
  BSIS_NOGRIPPER          = $00000001;
  BSIS_ALWAYSGRIPPER      = $00000002;
  BSIS_LEFTALIGN          = $00000004;
  BSIS_SINGLECLICK        = $00000008;
  BSIS_NOCONTEXTMENU      = $00000010;
  BSIS_NODROPTARGET       = $00000020;
  BSIS_NOCAPTION          = $00000040;
  BSIS_PREFERNOLINEBREAK  = $00000080;
  BSIS_LOCKED             = $00000100;

  NSWF_NONE_IMPLIES_ALL   = $00000001;
  NSWF_ONE_IMPLIES_ALL    = $00000002;
  NSWF_DONT_TRAVERSE_LINKS= $00000004;
  NSWF_DONT_ACCUMULATE_RESULT    = $00000008;
  NSWF_TRAVERSE_STREAM_JUNCTIONS = $00000010;
  NSWF_FILESYSTEM_ONLY    = $00000020;
  NSWF_SHOW_PROGRESS      = $00000040;
  NSWF_FLAG_VIEWORDER     = $00000080;
  NSWF_IGNORE_AUTOPLAY_HIDA      = $00000100;
  MPPF_SETFOCUS           = $00000001;    // Menu can take the focus
  MPPF_INITIALSELECT      = $00000002;    // Select the first item
  MPPF_NOANIMATE          = $00000004;    // Do not animate this show
  MPPF_KEYBOARD           = $00000010;    // The menu is activated by keyboard
  MPPF_REPOSITION         = $00000020;    // Resposition the displayed bar.
  MPPF_FORCEZORDER        = $00000040;    // internal: Tells menubar to ignore Submenu positions
  MPPF_FINALSELECT        = $00000080;    // Select the last item
  MPPF_TOP                = $20000000;    // Popup menu up from point
  MPPF_LEFT               = $40000000;    // Popup menu left from point
  MPPF_RIGHT              = $60000000;    // Popup menu right from point
  MPPF_BOTTOM             = $80000000;    // Popup menu below point
  MPPF_POS_MASK           = $E0000000;     // Menu Position Mask
  SIGDN_NORMALDISPLAY             = $00000000;
  SIGDN_PARENTRELATIVEPARSING     = $80018001;
  SIGDN_PARENTRELATIVEFORADDRESSBAR = $8001c001;
  SIGDN_DESKTOPABSOLUTEPARSING    = $80028000;
  SIGDN_PARENTRELATIVEEDITING     = $80031001;
  SIGDN_DESKTOPABSOLUTEEDITING    = $8004c000;
  SIGDN_FILESYSPATH               = $80058000;
  SIGDN_URL                       = $80068000;
  SICHINT_DISPLAY         = $00000000;   
  SICHINT_ALLFIELDS       = $80000000;   
  SICHINT_CANONICAL       = $10000000;   
  BFO_NONE                            = $00000000;      // Do nothing.
  BFO_BROWSER_PERSIST_SETTINGS        = $00000001;      // Does this item want the browser stream? (Same window position as IE browser windows?)
  BFO_RENAME_FOLDER_OPTIONS_TOINTERNET= $00000002;     // Rename "Folder Options" to "Internet Options" in the Tools or View menu?
  BFO_BOTH_OPTIONS                    = $00000004;      // Keep both "Folder Options" and "Internet Options" in the Tools or View menu?
  BIF_PREFER_INTERNET_SHORTCUT        = $00000008;      // NSE would prefer a .url shortcut over a .lnk shortcut
  BFO_BROWSE_NO_IN_NEW_PROCESS        = $00000010;      // Specify this flag if you don't want the "Browse in New Process" via invoking a shortcut.
  BFO_ENABLE_HYPERLINK_TRACKING       = $00000020;      // Does this NSE want it's display name tracked to determine when hyperlinks should be tagged as previously used?
  BFO_USE_IE_OFFLINE_SUPPORT          = $00000040;      // Use "Internet Explorer"'s offline support?
  BFO_SUBSTITUE_INTERNET_START_PAGE   = $00000080;      // Does this NSE want to use the Start Page support?
  BFO_USE_IE_LOGOBANDING              = $00000100;      // Use the Brand block in the Toolbar.  (Spinning globe or whatever it is this year)
  BFO_ADD_IE_TOCAPTIONBAR             = $00000200;      // Should " - Internet Explorer" be appended to display name in the Captionbar
  BFO_USE_DIALUP_REF                  = $00000400;      // Should the DialUp ref count get a ref while the browse is navigated to this location?  This will also enable the ICW and Software update.
  BFO_USE_IE_TOOLBAR                  = $00000800;      // Should the IE toolbar be used?
  BFO_NO_PARENT_FOLDER_SUPPORT        = $00001000;      // Can you NOT navigate to a parent folder?  Used for Backspace button to parent folder or the View.GoTo.ParentFolder feature.
  BFO_NO_REOPEN_NEXT_RESTART          = $00002000;      // Browser windows are NOT reopened the next time the shell boots if the windows were left open on the previous logoff.  Does this NSE want the same feature?
  BFO_GO_HOME_PAGE                    = $00004000;      // Add "Home Page" to menu (Go).
  BFO_PREFER_IEPROCESS                = $00008000;      // prefers to use IEXPLORE.EXE over EXPLORER.EXE
  BFO_SHOW_NAVIGATION_CANCELLED       = $00010000;      // If navigation is aborted, show the "Action Cancelled" HTML page.
  BFO_USE_IE_STATUSBAR                = $00020000;      // Use the persisted IE status bar settings
  BFO_QUERY_ALL                       = $FFFFFFFF;      // Return all values set.
  NWMF_UNLOADING          = $0001;  // The query is occuring during onBeforeUnload or onUnload
  NWMF_USERINITED         = $0002;  // The query is occuring in the context of what trident considers to be a user initiated action
  NWMF_FIRST              = $0004;  // This is the first query since the begining of the last user initiated action
  NWMF_OVERRIDEKEY        = $0008;  // The override key was pressed at the time the query was made
  NWMF_SHOWHELP           = $0010;  // New window is an HTML help window
  NWMF_HTMLDIALOG         = $0020;  // New window is an HTML dialog
  NWMF_FROMDIALOGCHILD    = $0040;  // Called from an HTML dialog - do not show UI in parent window
  NWMF_USERREQUESTED      = $0080;  // There is no doubt the user requested this window (from RClick->Open in New Window, or Shift+Clicked a link)
  NWMF_USERALLOWED        = $0100;  // This popup is the result of the user requesting a replay that resulted in a refresh
  SMDM_SHELLFOLDER        = $00000001;  // This is for an item in the band
  SMDM_HMENU              = $00000002;  // This is for the Band itself
  SMDM_TOOLBAR            = $00000004;  // Plain toolbar, not associated with a shell folder or hmenu
  SMIM_TYPE               = $00000001;
  SMIM_FLAGS              = $00000002;
  SMIM_ICON               = $00000004;
  SMIT_SEPARATOR          = $00000001;
  SMIT_STRING             = $00000002;
  SMIF_ICON               = $00000001;       // Show an icon
  SMIF_ACCELERATOR        = $00000002;       // Underline the character marked w/ '&'
  SMIF_DROPTARGET         = $00000004;       // Item is a drop target
  SMIF_SUBMENU            = $00000008;       // Item has a submenu
  SMIF_CHECKED            = $00000020;       // Item has a Checkmark
  SMIF_DROPCASCADE        = $00000040;       // Item can cascade out during drag/drop
  SMIF_HIDDEN             = $00000080;       // Don't display item
  SMIF_DISABLED           = $00000100;       // Should be unselectable. Gray.
  SMIF_TRACKPOPUP         = $00000200;       // Should be unselectable. Gray.
  SMIF_DEMOTED            = $00000400;       // Display item in "Demoted" state.
  SMIF_ALTSTATE           = $00000800;       // Displayed in "Altered State"
  SMIF_DRAGNDROP          = $00001000;       // If item that is being dragged hovers over an item for long enough then it SMC_EXECs that item
  SMIF_NEW                = $00002000;       // Item is newly-installed or otherwise attractive (XP)
  SMC_INITMENU            = $00000001;  // The callback is called to init a menuband
  SMC_CREATE              = $00000002;
  SMC_EXITMENU            = $00000003;  // The callback is called when menu is collapsing
  SMC_GETINFO             = $00000005;  // The callback is called to return DWORD values
  SMC_GETSFINFO           = $00000006;  // The callback is called to return DWORD values
  SMC_GETOBJECT           = $00000007;  // The callback is called to get some object
  SMC_GETSFOBJECT         = $00000008;  // The callback is called to get some object
  SMC_SFEXEC              = $00000009;  // The callback is called to execute an shell folder item
  SMC_SFSELECTITEM        = $0000000A;  // The callback is called when an item is selected
  SMC_REFRESH             = $00000010;  // Menus have completely refreshed. Reset your state.
  SMC_DEMOTE              = $00000011;  // Demote an item
  SMC_PROMOTE             = $00000012;  // Promote an item, wParam = SMINV_* flag
  SMC_DEFAULTICON         = $00000016;  // Returns Default icon location in wParam, index in lParam
  SMC_NEWITEM             = $00000017;  // Notifies item is not in the order stream.
  SMC_CHEVRONEXPAND       = $00000019;  // Notifies of a expansion via the chevron 
  SMC_DISPLAYCHEVRONTIP   = $0000002A;  // S_OK display, S_FALSE not. 
  SMC_SETSFOBJECT         = $0000002D;  // Called to save the passed object
  SMC_SHCHANGENOTIFY      = $0000002E;  // Called when a Change notify is received. lParam points to SMCSHCHANGENOTIFYSTRUCT
  SMC_CHEVRONGETTIP       = $0000002F;  // Called to get the chevron tip text. wParam = Tip title, Lparam = TipText Both MAX_PATH
  SMC_SFDDRESTRICTED      = $00000030;  // Called requesting if it's ok to drop. wParam = IDropTarget.
  ATTACHMENT_PROMPT_NONE  = $0000;
  ATTACHMENT_PROMPT_SAVE  = $0001;
  ATTACHMENT_PROMPT_EXEC  = $0002;             
  ATTACHMENT_PROMPT_EXEC_OR_SAVE      = $0003;             
  ATTACHMENT_ACTION_CANCEL= $0000; 
  ATTACHMENT_ACTION_SAVE  = $0001;
  ATTACHMENT_ACTION_EXEC  = $0002;             
  SMINIT_DEFAULT          = $00000000;  // No Options
  SMINIT_RESTRICT_DRAGDROP= $00000002;  // Don't allow Drag and Drop
  SMINIT_TOPLEVEL         = $00000004;  // This is the top band.
  SMINIT_CACHED           = $00000010;
  SMINIT_VERTICAL         = $10000000;  // This is a vertical menu
  SMINIT_HORIZONTAL       = $20000000;  // This is a horizontal menu    (does not inherit)
  ANCESTORDEFAULT         = dword(-1);
  SMSET_TOP               = $10000000;    // Bias this namespace to the top of the menu
  SMSET_BOTTOM            = $20000000;    // Bias this namespace to the bottom of the menu
  SMSET_DONTOWN           = $00000001;    // The Menuband doesn't own the non-ref counted object
  SMINV_REFRESH           = $00000001;
  SMINV_ID                = $00000008;
  FDEOR_DEFAULT           = 0;
  FDEOR_ACCEPT	          = 1;
  FDEOR_REFUSE            = 2;
  FDESVR_DEFAULT          = 0;
  FDESVR_ACCEPT           = 1;
  FDESVR_REFUSE           = 2;
  FDAP_BOTTOM             = 0;
  FDAP_TOP                = 1;
  FOS_OVERWRITEPROMPT     =        $2;
  FOS_STRICTFILETYPES     =        $4;
  FOS_NOCHANGEDIR         =        $8;
  FOS_PICKFOLDERS         =       $20;
  FOS_FORCEFILESYSTEM	  =       $40;
  FOS_ALLNONSTORAGEITEMS  =       $80;
  FOS_NOVALIDATE	  =      $100;
  FOS_ALLOWMULTISELECT    =      $200;
  FOS_PATHMUSTEXIST       =      $800;
  FOS_FILEMUSTEXIST       =     $1000;
  FOS_CREATEPROMPT        =     $2000;
  FOS_SHAREAWARE          =     $4000;
  FOS_NOREADONLYRETURN    =     $8000;
  FOS_NOTESTFILECREATE    =    $10000;
  FOS_HIDEMRUPLACES       =    $20000;
  FOS_HIDEPINNEDPLACES    =    $40000;
  FOS_NODEREFERENCELINKS  =   $100000;
  FOS_DONTADDTORECENT     =  $2000000;
  FOS_FORCESHOWHIDDEN     = $10000000;
  FOS_DEFAULTNOMINIMODE	  = $20000000;
  FOS_FORCEPREVIEWPANEON  = $40000000;
   
Type
      SFGAOF  = ULONG;
      TSFGAOF = SFGAOF;
      PSFGAOF = ^SFGAOF;
      SHCONTF    = longint;
      TSHCONTF   = SHCONTF;
      PSHCONTF   = ^SHCONTF;
      SIGDN      = longint;
      TSIGDN     = SIGDN;
      PSIGDN     = ^SIGDN;
      SICHINTF   = longint;
      TSICHINTF  = SICHINTF;
      PSICHINTF  = ^SICHINTF; 


      PROPERTYUI_NAME_FLAGS = DWord; // enum
      PROPERTYUI_FORMAT_FLAGS = DWord;
      PROPERTYUI_FLAGS = Dword;
      CATSORT_FLAGS    = DWORD;
      CATEGORYINFO_FLAGS = DWord;

      PPROPERTYUI_NAME_FLAGS    = ^PROPERTYUI_NAME_FLAGS;
      PPROPERTYUI_FORMAT_FLAGS  = ^PROPERTYUI_FORMAT_FLAGS;
      PPROPERTYUI_FLAGS         = ^PROPERTYUI_FLAGS;
      PCATSORT_FLAGS            = ^CATSORT_FLAGS;
      PCATEGORYINFO_FLAGS	= ^CATEGORYINFO_FLAGS;

      RESTRICTIONS = DWORD;
      TRESTRICTIONS = RESTRICTIONS;
      PRESTRICTIONS = ^RESTRICTIONS;
      FOLDERVIEWMODE = DWORD;
      SHColumnID = packed record
                    fmtid : TGUID;
                    pid   : DWORD;
                   end;
      CATEGORY_INFO = record
                         cif : CATEGORYINFO_FLAGS;
                         wsname: array[0..259] of wchar;
			 end;
      TCATEGORY_INFO = CATEGORY_INFO;
      PCATEGORY_INFO = ^CATEGORY_INFO;

      LPSHColumnID = SHColumnID;
      TSHColumnid = SHColumnID;
      pSHColumnID = LPSHColumnID;

     IShellView = Interface;
     IShellFolder = Interface;
     IShellBrowser = Interface;
     LPFNVIEWCALLBACK = function (psvouter:IShellView;psf : IShellFolder;hwndMain:HWND ;uMSG:UINT;wParam:WPARAM;lParam:LPARAM) :HRESULT; StdCall;
     LPFNDFMCALLBACK   = function (psf:IShellFolder; HWND: hwnd;pdtobj:IDataObject;uMsg:UINT;WPARAM:wParam; LPARAM: lParam) :HRESULT; StdCall;

     IShellFolderViewCB = Interface(IUnknown)
        ['{2047E320-F2A9-11CE-AE65-08002B2E1262}']
        function MessageSFVCB (uMSG: UINT;wparam:WPARAM;LPARAM:lParam):HResult; stdcall;
        end;


     LPTBBUTTONSB = LPTBBUTTON;
     SVSIF = UINT;
     TSVSIF = SVSIF;
     SHELLVIEWID = TGUID;
     TSHELLVIEWID = TGUID;
     PSHELLVIEWID = ^TGUID;
     LPVIEWSETTINGS = Pchar;

     _CMInvokeCommandInfoEx = record
          cbSize : DWORD;                 { must be sizeof(CMINVOKECOMMANDINFOEX) }
          fMask : DWORD;                  { any combination of CMIC_MASK_* }
          hwnd : HWND;                    { might be NULL (indicating no owner window) }
          lpVerb : LPCSTR;                { either a string or MAKEINTRESOURCE(idOffset) }
          lpParameters : LPCSTR;          { might be NULL (indicating no parameter) }
          lpDirectory : LPCSTR;           { might be NULL (indicating no specific directory) }
          nShow : longint;                { one of SW_ values for ShowWindow() API }
          dwHotKey : DWORD;
          hIcon : HANDLE;
          lpTitle : LPCSTR;               { For CreateProcess-StartupInfo.lpTitle }
          lpVerbW : LPCWSTR;              { Unicode verb (for those who can use it) }
          lpParametersW : LPCWSTR;        { Unicode parameters (for those who can use it) }
          lpDirectoryW : LPCWSTR;         { Unicode directory (for those who can use it) }
          lpTitleW : LPCWSTR;             { Unicode title (for those who can use it) }
          ptInvoke : POINT;               { Point where it's invoked }
       end;
     TCMINVOKECOMMANDINFOEX = _CMInvokeCommandInfoEx;
     PCMINVOKECOMMANDINFOEX = ^TCMINVOKECOMMANDINFOEX;
     LPCMINVOKECOMMANDINFOEX = PCMInvokeCommandInfoEx;
     PLPCMINVOKECOMMANDINFOEX = ^LPCMINVOKECOMMANDINFOEX;

     PPERSIST_FOLDER_TARGET_INFO = ^PERSIST_FOLDER_TARGET_INFO;
     PERSIST_FOLDER_TARGET_INFO = record
          pidlTargetFolder : LPITEMIDLIST;                         { pidl for the folder we want to intiailize }
          szTargetParsingName : array[0..(MAX_PATH)-1] of WCHAR;   { optional parsing name for the target }
          szNetworkProvider : array[0..(MAX_PATH)-1] of WCHAR;     { optional network provider }
          dwAttributes : DWORD;                                    { optional FILE_ATTRIBUTES_ flags (-1 if not used) }
          csidl : longint;                                         { optional folder index (SHGetFolderPath()) -1 if not used }
       end;
     TPERSIST_FOLDER_TARGET_INFO = PERSIST_FOLDER_TARGET_INFO;

     DATABLOCK_HEADER = record
          cbSize : DWORD;                 { Size of this extra data block }
          dwSignature : DWORD;            { signature of this extra data block }
       end;
     TDATABLOCKHEADER = DATABLOCK_HEADER;
     TDATABLOCK_HEADER = DATABLOCK_HEADER;
     PDATABLOCK_HEADER = ^TDATABLOCK_HEADER;
     PDATABLOCKHEADER = ^TDATABLOCKHEADER;
     LPDATABLOCK_HEADER = PDATABLOCK_HEADER;
     PLPDATABLOCK_HEADER = ^LPDATABLOCK_HEADER;
     LPDBLIST = PDATABLOCK_HEADER;
     PLPDBLIST = ^LPDBLIST;

     PNT_CONSOLE_PROPS = ^NT_CONSOLE_PROPS;
     NT_CONSOLE_PROPS = record
          dbh : DATABLOCK_HEADER;      
          wFillAttribute : WORD;         { fill attribute for console }
          wPopupFillAttribute : WORD;    { fill attribute for console popups }
          dwScreenBufferSize : COORD;    { screen buffer size for console }
          dwWindowSize : COORD;          { window size for console }
          dwWindowOrigin : COORD;        { window origin for console }
          nFont : DWORD;
          nInputBufferSize : DWORD;
          dwFontSize : COORD;
          uFontFamily : UINT;
          uFontWeight : UINT;
          FaceName : array[0..(LF_FACESIZE)-1] of WCHAR;
          uCursorSize : UINT;
          bFullScreen : BOOL;
          bQuickEdit : BOOL;
          bInsertMode : BOOL;
          bAutoPosition : BOOL;
          uHistoryBufferSize : UINT;
          uNumberOfHistoryBuffers : UINT;
          bHistoryNoDup : BOOL;
          ColorTable : array[0..15] of COLORREF;
       end;
     TNT_CONSOLE_PROPS = NT_CONSOLE_PROPS;
     LPNT_CONSOLE_PROPS = PNT_CONSOLE_PROPS;
     PLPNT_CONSOLE_PROPS = ^LPNT_CONSOLE_PROPS;

     PNT_FE_CONSOLE_PROPS = ^NT_FE_CONSOLE_PROPS;
     NT_FE_CONSOLE_PROPS = record
          dbh : DATABLOCK_HEADER;
          uCodePage : UINT;            { This is a FE Console property }
       end;
     TNT_FE_CONSOLE_PROPS = NT_FE_CONSOLE_PROPS;
     LPNT_FE_CONSOLE_PROPS = PNT_FE_CONSOLE_PROPS;
     PLPNT_FE_CONSOLE_PROPS = ^LPNT_FE_CONSOLE_PROPS;

     PEXP_DARWIN_LINK = ^EXP_DARWIN_LINK;
     EXP_DARWIN_LINK = record
          dbh : DATABLOCK_HEADER;
          szDarwinID : array[0..(MAX_PATH)-1] of CHAR;    { ANSI darwin ID associated with link }
          szwDarwinID : array[0..(MAX_PATH)-1] of WCHAR;  { UNICODE darwin ID associated with link }
       end;
     TEXP_DARWIN_LINK = EXP_DARWIN_LINK;
     LPEXP_DARWIN_LINK = PEXP_DARWIN_LINK;
     PLPEXP_DARWIN_LINK = ^LPEXP_DARWIN_LINK;

     PEXP_SPECIAL_FOLDER = ^EXP_SPECIAL_FOLDER;
     EXP_SPECIAL_FOLDER = record
          cbSize : DWORD;             { Size of this extra data block }
          dwSignature : DWORD;        { signature of this extra data block }
          idSpecialFolder : DWORD;    { special folder id this link points into }
          cbOffset : DWORD;           { ofset into pidl from SLDF_HAS_ID_LIST for child }
       end;
     LPEXP_SPECIAL_FOLDER = PEXP_SPECIAL_FOLDER;
     PLPEXP_SPECIAL_FOLDER = ^LPEXP_SPECIAL_FOLDER;
     TEXP_SPECIAL_FOLDER = EXP_SPECIAL_FOLDER;

     PEXP_SZ_LINK = ^EXP_SZ_LINK;
     EXP_SZ_LINK = record
          cbSize : DWORD;                                 { Size of this extra data block }
          dwSignature : DWORD;                            { signature of this extra data block }
          szTarget : array[0..(MAX_PATH)-1] of CHAR;      { ANSI target name w/EXP_SZ in it }
          swzTarget : array[0..(MAX_PATH)-1] of WCHAR;    { UNICODE target name w/EXP_SZ in it }
       end;
     LPEXP_SZ_LINK = PEXP_SZ_LINK;
     PLPEXP_SZ_LINK = ^LPEXP_SZ_LINK;
     TEXP_SZ_LINK = EXP_SZ_LINK;

     PFVSHOWINFO = ^FVSHOWINFO;
     FVSHOWINFO = record                                        { Stuff passed into viewer (in) }
          cbSize : DWORD;                                       { Size of structure for future expansion... }
          hwndOwner : HWND;                                     { who is the owner window. }
          iShow : longint;                                      { The show command }
                                                                { Passed in and updated  (in/Out) }
          dwFlags : DWORD;                                      { flags }
          rect : RECT;                                          { Where to create the window may have defaults }
          punkRel :  IUnknown;                                  { Relese this interface when window is visible }
                                                                { Stuff that might be returned from viewer (out) }
          strNewFile : array[0..(MAX_PATH)-1] of OLECHAR;       { New File to view. }
       end;                                                     
     TFVSHOWINFO = FVSHOWINFO;
     LPFVSHOWINFO = PFVSHOWINFO;
     PLPFVSHOWINFO = ^LPFVSHOWINFO;

     PSHFOLDERCUSTOMSETTINGSA = ^SHFOLDERCUSTOMSETTINGSA;
     SHFOLDERCUSTOMSETTINGSA = record
          dwSize : DWORD;                             
          dwMask : DWORD;                            { IN/OUT   Which Attributes to Get/Set }             
          pvid : PSHELLVIEWID;                       { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
                                                     { The folder's WebView template path }
          pszWebViewTemplate : LPSTR;                { OUT - if dwReadWrite is FCS_READ, IN - otherwise }  
          cchWebViewTemplate : DWORD;                { IN - Specifies the size of the buffer pointed to by pszWebViewTemplate }            
          pszWebViewTemplateVersion : LPSTR;         { Ignored if dwReadWrite is FCS_READ }
          pszInfoTip : LPSTR;                        { currently IN only }
          cchInfoTip : DWORD;                        { Infotip for the folder }
                                                     { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
                                                     { IN - Specifies the size of the buffer pointed to by pszInfoTip }
          pclsid : PCLSID;                           { Ignored if dwReadWrite is FCS_READ }
                                                     { CLSID that points to more info in the registry }
          dwFlags : DWORD;                           { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
          pszIconFile : LPSTR;                       { Other flags for the folder. Takes FCS_FLAG_* values }
          cchIconFile : DWORD;                       { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
                                                     { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
          iIconIndex : longint;                      { IN - Specifies the size of the buffer pointed to by pszIconFile }
                                                     { Ignored if dwReadWrite is FCS_READ }
          pszLogo : LPSTR;                           { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
          cchLogo : DWORD;                           { OUT - if dwReadWrite is FCS_READ, IN - otherwise }
       end;                                          { IN - Specifies the size of the buffer pointed to by pszIconFile }
                                                     { Ignored if dwReadWrite is FCS_READ }

     LPSHFOLDERCUSTOMSETTINGSA = PSHFOLDERCUSTOMSETTINGSA;
     PLPSHFOLDERCUSTOMSETTINGSA = ^LPSHFOLDERCUSTOMSETTINGSA;
     TSHFOLDERCUSTOMSETTINGSA =   SHFOLDERCUSTOMSETTINGSA;

     PSHFOLDERCUSTOMSETTINGSW = ^SHFOLDERCUSTOMSETTINGSW;
     SHFOLDERCUSTOMSETTINGSW = record
          dwSize : DWORD;
          dwMask : DWORD;
          pvid : PSHELLVIEWID;
          pszWebViewTemplate : LPWSTR;
          cchWebViewTemplate : DWORD;
          pszWebViewTemplateVersion : LPWSTR;
          pszInfoTip : LPWSTR;
          cchInfoTip : DWORD;
          pclsid : PCLSID;
          dwFlags : DWORD;
          pszIconFile : LPWSTR;
          cchIconFile : DWORD;
          iIconIndex : longint;
          pszLogo : LPWSTR;
          cchLogo : DWORD;
       end;
     LPSHFOLDERCUSTOMSETTINGSW = PSHFOLDERCUSTOMSETTINGSW;
     PLPSHFOLDERCUSTOMSETTINGSW = ^LPSHFOLDERCUSTOMSETTINGSW;
     TSHFOLDERCUSTOMSETTINGSW = SHFOLDERCUSTOMSETTINGSW;

     _browseinfoA = record
          hwndOwner : HWND;
          pidlRoot : LPCITEMIDLIST;
          pszDisplayName : LPSTR;    { Return display name of item selected. }
          lpszTitle : LPCSTR;        { text to go in the banner over the tree. }
          ulFlags : UINT;            { Flags that control the return stuff }
          lpfn : BFFCALLBACK;        
          lParam : LPARAM;           { extra info that's passed back in callbacks }
          iImage : longint;          { output var: where to return the Image index. }
       end;
     BROWSEINFOA = _browseinfoA;
     PBROWSEINFOA = ^BROWSEINFOA;
     TBROWSEINFOA = BROWSEINFOA;
     PPBROWSEINFOA = ^PBROWSEINFOA;
     LPBROWSEINFOA = PbrowseinfoA;
     PLPBROWSEINFOA = ^LPBROWSEINFOA;

     _browseinfoW = record
          hwndOwner : HWND;
          pidlRoot : LPCITEMIDLIST;
          pszDisplayName : LPWSTR;    { Return display name of item selected. }
          lpszTitle : LPCWSTR;        { text to go in the banner over the tree. }
          ulFlags : UINT;             { Flags that control the return stuff }
          lpfn : BFFCALLBACK;         
          lParam : LPARAM;            { extra info that's passed back in callbacks }
          iImage : longint;           { output var: where to return the Image index. }
       end;
     BROWSEINFOW = _browseinfoW;
     PBROWSEINFOW = ^BROWSEINFOW;
     PPBROWSEINFOW = ^PBROWSEINFOW;
     LPBROWSEINFOW = PbrowseinfoW;
     PLPBROWSEINFOW = ^LPBROWSEINFOW;
     TBROWSEINFOW = BROWSEINFOW;

     P_EnumImageStoreDATAtag = ^_EnumImageStoreDATAtag;
     _EnumImageStoreDATAtag = record
          szPath : array[0..(MAX_PATH)-1] of WCHAR;
          ftTimeStamp : FILETIME;
       end;
     ENUMSHELLIMAGESTOREDATA = _EnumImageStoreDATAtag;
     PENUMSHELLIMAGESTOREDATA = ^ENUMSHELLIMAGESTOREDATA;
     PPENUMSHELLIMAGESTOREDATA = ^PENUMSHELLIMAGESTOREDATA;
     TENUMSHELLIMAGESTOREDATA = _EnumImageStoreDATAtag;
     PBANDINFOSFB = ^BANDINFOSFB;
     BANDINFOSFB = record
          dwMask : DWORD;       { [in] ISFB_MASK mask of valid fields from crBkgnd on }
          dwStateMask : DWORD;  { [in] ISFB_STATE mask of dwState bits being set/queried }
          dwState : DWORD;      { [in/out] ISFB_STATE bits }
          crBkgnd : COLORREF;   { [in/out] }
          crBtnLt : COLORREF;   { [in/out] }
          crBtnDk : COLORREF;   { [in/out] }
          wViewMode : WORD;     { [in/out] }
          wAlign : WORD;        { not used (yet) }
          psf : IShellFolder;  { [out] }
          pidl : LPITEMIDLIST;  { [out] }
       end;
     PPBANDINFOSFB = ^PBANDINFOSFB;

     _tagWALLPAPEROPT = record
          dwSize : DWORD;        { size of this Structure. }
          dwStyle : DWORD;       { WPSTYLE_* mentioned above }
       end;
     WALLPAPEROPT  = _tagWALLPAPEROPT;
     TWALLPAPEROPT = _tagWALLPAPEROPT;
     PWALLPAPEROPT = ^WALLPAPEROPT;

     PLPWALLPAPEROPT = ^LPWALLPAPEROPT;
     LPWALLPAPEROPT = WALLPAPEROPT;

     PLPCWALLPAPEROPT = ^LPCWALLPAPEROPT;
     LPCWALLPAPEROPT = WALLPAPEROPT;

     _tagCOMPONENTSOPT = record
          dwSize : DWORD;               {Size of this structure }
          fEnableComponents : BOOL;     {Enable components? }
          fActiveDesktop : BOOL;        { Active desktop enabled ? }
       end;
     COMPONENTSOPT = _tagCOMPONENTSOPT;
     TCOMPONENTSOPT = _tagCOMPONENTSOPT;
     PCOMPONENTSOPT = ^COMPONENTSOPT;
     PLPCOMPONENTSOPT = ^LPCOMPONENTSOPT;
     LPCOMPONENTSOPT = COMPONENTSOPT;
     PLPCCOMPONENTSOPT = ^LPCCOMPONENTSOPT;
     LPCCOMPONENTSOPT = COMPONENTSOPT;

     _tagCOMPPOS = record
          dwSize : DWORD;               {Size of this structure }
          iLeft : longint;              {Left of top-left corner in screen co-ordinates. }
          iTop : longint;               {Top of top-left corner in screen co-ordinates. }
          dwWidth : DWORD;              { Width in pixels. }
          dwHeight : DWORD;             { Height in pixels. }
          izIndex : longint;            { Indicates the Z-order of the component. }
          fCanResize : BOOL;            { Is the component resizeable? }
          fCanResizeX : BOOL;           { Resizeable in X-direction? }
          fCanResizeY : BOOL;           { Resizeable in Y-direction? }
          iPreferredLeftPercent : longint;{Left of top-left corner as percent of screen width }
          iPreferredTopPercent : longint; {Top of top-left corner as percent of screen height }
       end;
     COMPPOS  = _tagCOMPPOS;
     TCOMPPOS = _tagCOMPPOS;
     PCOMPPOS = ^COMPPOS;
     PLPCOMPPOS = ^LPCOMPPOS;
     LPCOMPPOS = COMPPOS;

     PLPCCOMPPOS = ^LPCCOMPPOS;
     LPCCOMPPOS = COMPPOS;
  
     _tagCOMPSTATEINFO = record
          dwSize : DWORD;             { Size of this structure. }
          iLeft : longint;            { Left of the top-left corner in screen co-ordinates. }
          iTop : longint;             { Top of top-left corner in screen co-ordinates. }
          dwWidth : DWORD;            { Width in pixels. }
          dwHeight : DWORD;           { Height in pixels. }
          dwItemState : DWORD;        { State of the component (full-screen mode or split-screen or normal state. }
       end;
     COMPSTATEINFO = _tagCOMPSTATEINFO;
     TCOMPSTATEINFO = _tagCOMPSTATEINFO;
     PCOMPSTATEINFO = ^COMPSTATEINFO;
     PLPCOMPSTATEINFO = ^LPCOMPSTATEINFO;
     LPCOMPSTATEINFO = COMPSTATEINFO;
     PLPCCOMPSTATEINFO = ^LPCCOMPSTATEINFO;
     LPCCOMPSTATEINFO = COMPSTATEINFO;

     _tagIE4COMPONENT = record
          dwSize : DWORD;                  {Size of this structure }                                       
          dwID : DWORD;                    {Reserved: Set it always to zero. }
          iComponentType : longint;        {One of COMP_TYPE_* }
          fChecked : BOOL;                 { Is this component enabled? }
          fDirty : BOOL;                   { Had the component been modified and not yet saved to disk? }
          fNoScroll : BOOL;                { Is the component scrollable? }
          cpPos : COMPPOS;                 { Width, height etc., } {}
          wszFriendlyName : array[0..(MAX_PATH)-1] of WCHAR;                             { Friendly name of component. }
          wszSource : array[0..(INTERNET_MAX_URL_LENGTH)-1] of WCHAR;                    {URL of the component. }
          wszSubscribedURL : array[0..(INTERNET_MAX_URL_LENGTH)-1] of WCHAR;             {Subscrined URL }
       end;
     IE4COMPONENT = _tagIE4COMPONENT;
     TIE4COMPONENT = _tagIE4COMPONENT;
     PIE4COMPONENT = ^IE4COMPONENT;
     PLPIE4COMPONENT = ^LPIE4COMPONENT;
     LPIE4COMPONENT = IE4COMPONENT;

     PLPCIE4COMPONENT = ^LPCIE4COMPONENT;
     LPCIE4COMPONENT = IE4COMPONENT;
     _tagCOMPONENT = record
          dwSize : DWORD;                                                        {Size of this structure }
          dwID : DWORD;                                              {}            {Reserved: Set it always to zero. }
          iComponentType : longint;                                              {One of COMP_TYPE_* }
          fChecked : BOOL;                                                       { Is this component enabled? }
          fDirty : BOOL;                                                         { Had the component been modified and not yet saved to disk? }
          fNoScroll : BOOL;                                                      { Is the component scrollable? }
          cpPos : COMPPOS;                                                       { Width, height etc., }
          wszFriendlyName : array[0..(MAX_PATH)-1] of WCHAR;                     { Friendly name of component. }
          wszSource : array[0..(INTERNET_MAX_URL_LENGTH)-1] of WCHAR;            {URL of the component. }
          wszSubscribedURL : array[0..(INTERNET_MAX_URL_LENGTH)-1] of WCHAR;     {Subscrined URL }
                                                                                 {New fields are added below. Everything above here must exactly match the IE4COMPONENT Structure. }
          dwCurItemState : DWORD;                                                { Current state of the Component. }
          csiOriginal : COMPSTATEINFO;                                           { Original state of the component when it was first added. }
          csiRestored : COMPSTATEINFO;                                           { Restored state of the component. }
       end;
     COMPONENT = _tagCOMPONENT;
     PCOMPONENT = ^COMPONENT;
     // no tcomponent because ambiguous.
     PLPCOMPONENT = ^LPCOMPONENT;
     LPCOMPONENT = COMPONENT;

     PLPCCOMPONENT = ^LPCCOMPONENT;
     LPCCOMPONENT = COMPONENT;

     PSHCOLUMNINFO = ^SHCOLUMNINFO;
     SHCOLUMNINFO = record
          scid : SHCOLUMNID;                                                { OUT the unique identifier of this column}
          vt : TVarType;                                                    { OUT the native type of the data return}
          fmt : DWORD;                                                      { OUT this listview format (LVCFMT_LEFT}
          cChars : UINT;                                                    { OUT the default width of the column,}
          csFlags : DWORD;                                                  { OUT SHCOLSTATE flags }
          wszTitle : array[0..(MAX_COLUMN_NAME_LEN)-1] of WCHAR;            { OUT the title of the column }
          wszDescription : array[0..(MAX_COLUMN_DESC_LEN)-1] of WCHAR;      { OUT full description of this column }
       end;
     TSHCOLUMNINFO = SHCOLUMNINFO;
     LPSHCOLUMNINFO = PSHCOLUMNINFO;
     PLPSHCOLUMNINFO = ^LPSHCOLUMNINFO;

     PSHCOLUMNINIT = ^SHCOLUMNINIT;
     SHCOLUMNINIT = record                             
          dwFlags : ULONG;                               { initialization flags }
          dwReserved : ULONG;                            { reserved for future use. }
          wszFolder : array[0..(MAX_PATH)-1] of WCHAR;   { fully qualified folder path (or empty if multiple folders) }
       end;
     TSHCOLUMNINIT = SHCOLUMNINIT;
     LPSHCOLUMNINIT = PSHCOLUMNINIT;
     PLPSHCOLUMNINIT = ^LPSHCOLUMNINIT;

     PLPCSHCOLUMNINIT = ^LPCSHCOLUMNINIT;
     LPCSHCOLUMNINIT = SHCOLUMNINIT;

     PSHCOLUMNDATA = ^SHCOLUMNDATA;
     SHCOLUMNDATA = record
          dwFlags : ULONG;                                   { combination of SHCDF_ flags. }
          dwFileAttributes : DWORD;                          { file attributes. }
          dwReserved : ULONG;                                { reserved for future use. }
          pwszExt : PWCHAR;                                  { address of file name extension }
          wszFile : array[0..(MAX_PATH)-1] of WCHAR;         { Absolute path of file. }
       end;
     TSHCOLUMNDAT=SHCOLUMNDATA;
     LPSHCOLUMNDATA = PSHCOLUMNDATA;
     PLPSHCOLUMNDATA = ^LPSHCOLUMNDATA;

     PLPCSHCOLUMNDATA = ^LPCSHCOLUMNDATA;
     LPCSHCOLUMNDATA = SHCOLUMNDATA;
  
     PSHDRAGIMAGE = ^SHDRAGIMAGE;
     SHDRAGIMAGE = record
          sizeDragImage : SIZE;     { OUT - The length and Width of the rendered image }
          ptOffset : POINT;         { OUT - The Offset from the mouse cursor to the upper left corner of the image }
          hbmpDragImage : HBITMAP;  { OUT - The Bitmap containing the rendered drag images }
          crColorKey : COLORREF;    { OUT - The COLORREF that has been blitted to the background of the images }
       end;
     LPSHDRAGIMAGE = PSHDRAGIMAGE;
     PLPSHDRAGIMAGE = ^LPSHDRAGIMAGE;
     TSHDRAGIMAGE = SHDRAGIMAGE;

     _NRESARRAY = record
          cItems : UINT;
          nr : array[0..0] of NETRESOURCE;
       end;
     NRESARRAY = _NRESARRAY;
     TNRESARRAY = _NRESARRAY;
     PNRESARRAY = ^NRESARRAY;
     LPNRESARRAY = PNRESARRAY;
     PLPNRESARRAY = ^LPNRESARRAY;

     _IDA = record
          cidl : UINT;                             { number of relative IDList }
          aoffset : array[0..0] of UINT;           { [0]: folder IDList, [1]-[cidl]: item IDList }
       end;
     CIDA = _IDA;
     TIDA = _IDA;
     PIDA  = ^TIDA;
     PCIDA = ^CIDA;
     LPIDA = PCIDA;
     PLPIDA = ^LPIDA;

     _FILEDESCRIPTORA = record
          dwFlags : DWORD;
          clsid : CLSID;
          sizel : SIZEL;
          pointl : POINTL;
          dwFileAttributes : DWORD;
          ftCreationTime : FILETIME;
          ftLastAccessTime : FILETIME;
          ftLastWriteTime : FILETIME;
          nFileSizeHigh : DWORD;
          nFileSizeLow : DWORD;
          cFileName : array[0..(MAX_PATH)-1] of CHAR;
       end;
     FILEDESCRIPTORA = _FILEDESCRIPTORA;
     TFILEDESCRIPTORA = _FILEDESCRIPTORA;
     PFILEDESCRIPTORA = ^FILEDESCRIPTORA;
     LPFILEDESCRIPTORA = PFILEDESCRIPTORA;
     PLPFILEDESCRIPTORA = ^LPFILEDESCRIPTORA;

     _FILEDESCRIPTORW = record
          dwFlags : DWORD;
          clsid : CLSID;
          sizel : SIZEL;
          pointl : POINTL;
          dwFileAttributes : DWORD;
          ftCreationTime : FILETIME;
          ftLastAccessTime : FILETIME;
          ftLastWriteTime : FILETIME;
          nFileSizeHigh : DWORD;
          nFileSizeLow : DWORD;
          cFileName : array[0..(MAX_PATH)-1] of WCHAR;
       end;
     FILEDESCRIPTORW = _FILEDESCRIPTORW;
     TFILEDESCRIPTORW = _FILEDESCRIPTORW;
     PFILEDESCRIPTORW = ^FILEDESCRIPTORW;
     LPFILEDESCRIPTORW = PFILEDESCRIPTORW;
     PLPFILEDESCRIPTORW = ^LPFILEDESCRIPTORW;

     _FILEGROUPDESCRIPTORA = record
          cItems : UINT;
          fgd : array[0..0] of FILEDESCRIPTORA;
       end;
     FILEGROUPDESCRIPTORA = _FILEGROUPDESCRIPTORA;
     TFILEGROUPDESCRIPTORA = _FILEGROUPDESCRIPTORA;
     PFILEGROUPDESCRIPTORA = ^FILEGROUPDESCRIPTORA;
     LPFILEGROUPDESCRIPTORA = PFILEGROUPDESCRIPTORA;
     PLPFILEGROUPDESCRIPTORA = ^LPFILEGROUPDESCRIPTORA;

     _FILEGROUPDESCRIPTORW = record
          cItems : UINT;
          fgd : array[0..0] of FILEDESCRIPTORW;
       end;
     FILEGROUPDESCRIPTORW = _FILEGROUPDESCRIPTORW;
     TFILEGROUPDESCRIPTORW = _FILEGROUPDESCRIPTORW;
     PFILEGROUPDESCRIPTORW = ^FILEGROUPDESCRIPTORW;
     LPFILEGROUPDESCRIPTORW = PFILEGROUPDESCRIPTORW;
     PLPFILEGROUPDESCRIPTORW = ^LPFILEGROUPDESCRIPTORW;
  
     _DROPFILES = record
          pFiles : DWORD;        { offset of file list }
          pt : POINT;            { drop point (client coords) }
          fNC : BOOL;            { is it on NonClient area }
          fWide : BOOL;          { and pt is in screen coords }
       end;                      { WIDE character switch }
     DROPFILES = _DROPFILES;
     TDROPFILES = _DROPFILES;
     PDROPFILES = ^DROPFILES;
     LPDROPFILES = PDROPFILES;
     PLPDROPFILES = ^LPDROPFILES;

  {====== File System Notification APIs =============================== }

     _SHChangeNotifyEntry = record
          pidl : LPCITEMIDLIST;
          fRecursive : BOOL;
       end;
     SHChangeNotifyEntry = _SHChangeNotifyEntry;
     TSHChangeNotifyEntry = _SHChangeNotifyEntry;
     PSHChangeNotifyEntry = ^SHChangeNotifyEntry;

     _SHChangeDWORDAsIDList = record
          cb : USHORT;
          dwItem1 : DWORD;
          dwItem2 : DWORD;
          cbZero : USHORT;
       end;
     SHChangeDWORDAsIDList = _SHChangeDWORDAsIDList;
     TSHChangeDWORDAsIDList = _SHChangeDWORDAsIDList;
     PSHChangeDWORDAsIDList = ^SHChangeDWORDAsIDList;
     LPSHChangeDWORDAsIDList = PSHChangeDWORDAsIDList;
     PLPSHChangeDWORDAsIDList = ^LPSHChangeDWORDAsIDList;

     _SHChangeUpdateImageIDList = record
          cb : USHORT;
          iIconIndex : longint;
          iCurIndex : longint;
          uFlags : UINT;
          dwProcessID : DWORD;
          szName : array[0..(MAX_PATH)-1] of WCHAR;
          cbZero : USHORT;
       end;
     SHChangeUpdateImageIDList = _SHChangeUpdateImageIDList;
     TSHChangeUpdateImageIDList = _SHChangeUpdateImageIDList;
     PSHChangeUpdateImageIDList = ^SHChangeUpdateImageIDList;
     LPSHChangeUpdateImageIDList = PSHChangeUpdateImageIDList;
     PLPSHChangeUpdateImageIDList = ^LPSHChangeUpdateImageIDList;

     _SHChangeProductKeyAsIDList = record
          cb : USHORT;
          wszProductKey : array[0..38] of WCHAR;
          cbZero : USHORT;
       end;
     SHChangeProductKeyAsIDList = _SHChangeProductKeyAsIDList;
     TSHChangeProductKeyAsIDList = _SHChangeProductKeyAsIDList;
     PSHChangeProductKeyAsIDList = ^SHChangeProductKeyAsIDList;
     LPSHChangeProductKeyAsIDList = PSHChangeProductKeyAsIDList;
     PLPSHChangeProductKeyAsIDList = ^LPSHChangeProductKeyAsIDList;

     _SHDESCRIPTIONID = record
          dwDescriptionId : DWORD;
          clsid : CLSID;
       end;
     SHDESCRIPTIONID = _SHDESCRIPTIONID;
     TSHDESCRIPTIONID = _SHDESCRIPTIONID;
     PSHDESCRIPTIONID = ^SHDESCRIPTIONID;
     LPSHDESCRIPTIONID = PSHDESCRIPTIONID;
     PLPSHDESCRIPTIONID = ^LPSHDESCRIPTIONID;

  const
     NUM_POINTS = 3;     
  { asd }

  type

     PAUTO_SCROLL_DATA = ^AUTO_SCROLL_DATA;
      AUTO_SCROLL_DATA= record
          iNextSample : longint;
          dwLastScroll : DWORD;
          bFull : BOOL;
          pts : array[0..(NUM_POINTS)-1] of POINT;
          dwTimes : array[0..(NUM_POINTS)-1] of DWORD;
       end;
     TAUTO_SCROLL_DATA = AUTO_SCROLL_DATA;

     PCABINETSTATE = ^CABINETSTATE;
     CABINETSTATE = record 
          cLength : WORD;            { NT: Show compressed volumes in a different colour }
          nVersion : WORD;           { NT: Do 8.3 name conversion, or not! }
          flag0 : word;              { NT: Administrators create comon groups }
          fMenuEnumFilter : UINT;
       end;
     TCABINETSTATE =  CABINETSTATE;
     LPCABINETSTATE = PCABINETSTATE;
     PLPCABINETSTATE = ^LPCABINETSTATE;



     FOLDERSettings = Packed Record 
                        ViewMode : UINT;       // View mode (FOLDERVIEWMODE values)
                        fFlags   : UINT;       // View options (FOLDERFLAGS bits)
                      end;
     TFOLDERSettings = FOLDERSettings;
     PFOLDERSettings = ^FOLDERSettings;
     LPFOLDERSettings= PFOLDERSettings;
     LPCFOLDERSettings= LPFOLDERSettings;
     PSV2CVW2_PARAMS = ^TSV2CVW2_PARAMS; 
     TSV2CVW2_PARAMS = packed record  // actually  <pshpack8.h>")
          cbSize    : DWORD;
          psvPrev   : IShellView;
          pfs       : LPCFOLDERSETTINGS;
          psbOwner  : IShellBrowser;
          prcView   : PRECT;
          pvid      : PSHELLVIEWID;
          hwndView  : HWND;
       end;
     LPSV2CVW2_PARAMS = PSV2CVW2_PARAMS;
      _SHELLDETAILS        =  record
                               fmt,
                               cxChar    : longint;
                               str       : TSTRRET;
                               end;
      TShellDetails        =  _SHELLDETAILS;
      SHELLDETAILS         =  _SHELLDETAILS;
      PShellDetails        =  ^TShellDetails;
      LPSHELLDETAILS       = PSHELLDETAILS;

      TShellDetailsEx      =  record
         Index:            UINT;
         Detail:           TShellDetails;
      end;
      tagEXTRASEARCH = packed record
                              guidSearch :     TGUID;
                              wszFriendlyName : array[0..80-1] of WideChar;
                              wszUrl : array[0..2084-1] of WideChar;
                             end;
      EXTRASEARCH  = TagEXTRASEARCH;
      TEXTRASEARCH  = TagEXTRASEARCH;
      LPEXTRASEARCH = ^EXTRASEARCH;
      PEXTRASEARCH  = ^EXTRASEARCH;

      SHCOLSTATEF = DWORD;
      PSHCOLSTATEF = ^SHCOLSTATEF;
      TSHCOLSTATEF = SHCOLSTATEF;

      PLPITEMIDLIST = ^LPITEMIDLIST;

     PROPPRG = record
          flPrg : WORD;
          flPrgInit : WORD;
          achTitle : array[0..(PIFNAMESIZE)-1] of CHAR;
          achCmdLine : array[0..((PIFSTARTLOCSIZE+PIFPARAMSSIZE)+1)-1] of CHAR;
          achWorkDir : array[0..(PIFDEFPATHSIZE)-1] of CHAR;
          wHotKey : WORD;
          achIconFile : array[0..(PIFDEFFILESIZE)-1] of CHAR;
          wIconIndex : WORD;
          dwEnhModeFlags : DWORD;
          dwRealModeFlags : DWORD;
          achOtherFile : array[0..(PIFDEFFILESIZE)-1] of CHAR;
          achPIFFile : array[0..(PIFMAXFILEPATH)-1] of CHAR;
       end;
     TPROPPRG = PROPPRG;
     PPPROPPRG = ^PPROPPRG;
     PPROPPRG = PROPPRG;

     PLPPROPPRG = ^LPPROPPRG;
     LPPROPPRG = PROPPRG;

     PLPCPROPPRG = ^LPCPROPPRG;
     LPCPROPPRG = PROPPRG;

     _QCMINFO_IDMAP_PLACEMENT = record
          id : UINT;
          fFlags : UINT;
       end;
     QCMINFO_IDMAP_PLACEMENT = _QCMINFO_IDMAP_PLACEMENT;
     TQCMINFO_IDMAP_PLACEMENT = _QCMINFO_IDMAP_PLACEMENT;
     PQCMINFO_IDMAP_PLACEMENT = ^QCMINFO_IDMAP_PLACEMENT;

     PQCMINFO_IDMAP = ^_QCMINFO_IDMAP;
     _QCMINFO_IDMAP = record
          nMaxIds : UINT;
          pIdList : array[0..0] of QCMINFO_IDMAP_PLACEMENT;
       end;
     QCMINFO_IDMAP = _QCMINFO_IDMAP;
     TQCMINFO_IDMAP = _QCMINFO_IDMAP;

     _QCMINFO = record
          hmenu : HMENU;
          indexMenu : UINT;
          idCmdFirst : UINT;
          idCmdLast : UINT;
          pIdMap : PQCMINFO_IDMAP;
       end;
     QCMINFO  = _QCMINFO;
     TQCMINFO = _QCMINFO;
     PQCMINFO = ^QCMINFO;

     PLPQCMINFO = ^LPQCMINFO;
     LPQCMINFO = QCMINFO;

     _TBINFO = record
          cbuttons : UINT;
          uFlags : UINT;
       end;
     TBINFO = _TBINFO;
     TTBINFO = _TBINFO;
     PTBINFO = ^TBINFO;

     _DETAILSINFO = record
          pidl : LPCITEMIDLIST;
          fmt : longint;
          cxChar : longint;
          str : STRRET;
          iImage : longint;
       end;
     DETAILSINFO = _DETAILSINFO;
     TDETAILSINFO = _DETAILSINFO;
     PDETAILSINFO = ^DETAILSINFO;

     _SFVM_PROPPAGE_DATA = record
          dwReserved : DWORD;
          pfn : LPFNADDPROPSHEETPAGE;
          lParam : LPARAM;
       end;
     SFVM_PROPPAGE_DATA = _SFVM_PROPPAGE_DATA;
     TSFVM_PROPPAGE_DATA = _SFVM_PROPPAGE_DATA;
     PSFVM_PROPPAGE_DATA = ^SFVM_PROPPAGE_DATA;

     _SFVM_HELPTOPIC_DATA = record
          wszHelpFile : array[0..(MAX_PATH)-1] of WCHAR;
          wszHelpTopic : array[0..(MAX_PATH)-1] of WCHAR;
       end;
     SFVM_HELPTOPIC_DATA = _SFVM_HELPTOPIC_DATA;
     TSFVM_HELPTOPIC_DATA = _SFVM_HELPTOPIC_DATA;
     PSFVM_HELPTOPIC_DATA = ^SFVM_HELPTOPIC_DATA;

     _SFV_CREATE = record
          cbSize : UINT;
          pshf : IShellFolder;
          psvOuter : IShellView;
          psfvcb : IShellFolderViewCB;
       end;
     SFV_CREATE = _SFV_CREATE;
     TSFV_CREATE = _SFV_CREATE;
     PSFV_CREATE = ^SFV_CREATE;

     _CSFV = record
          cbSize : UINT;
          pshf : IShellFolder;
          psvOuter : IShellView;
          pidl : LPCITEMIDLIST;
          lEvents : LONG;
          pfnCallback : LPFNVIEWCALLBACK;
          fvm : FOLDERVIEWMODE;
       end;
     CSFV = _CSFV;
     TCSFV = _CSFV;
     PCSFV = ^CSFV;
     LPCSFV = PCSFV;
     PLPCSFV = ^LPCSFV;

     _SFV_SETITEMPOS = record
          pidl : LPCITEMIDLIST;
          pt : POINT;
       end;
     SFV_SETITEMPOS = _SFV_SETITEMPOS;
     TSFV_SETITEMPOS = _SFV_SETITEMPOS;
     PSFV_SETITEMPOS = ^SFV_SETITEMPOS;
     LPSFV_SETITEMPOS = PSFV_SETITEMPOS;
     PLPSFV_SETITEMPOS = ^LPSFV_SETITEMPOS;

     PSHELLSTATEA = ^SHELLSTATEA;
     SHELLSTATEA = record
          flag0 : longint;                   { No longer used, dead bit }
          dwWin95Unused : DWORD;             { Win95 only - no longer supported pszHiddenFileExts }
          uWin95Unused : UINT;               { Win95 only - no longer supported cbHiddenFileExts }
          lParamSort : LONG;                 { Note: Not a typo!  This is a persisted structure so we cannot use LPARAM }
          iSortDirection : longint;          { new for win2k. need notUsed var to calc the right size of ie4 struct }
          version : UINT;                    { FIELD_OFFSET does not work on bit fields }
          uNotUsed : UINT;                   { feel free to rename and use }
          flag1 : word;                      { new for Whistler. }
       end;                                  {Indicates if the Whistler StartPanel mode is ON or OFF. }
     LPSHELLSTATEA = PSHELLSTATEA;           {Indicates if the Whistler StartPage on desktop is ON or OFF. }
     PLPSHELLSTATEA = ^LPSHELLSTATEA;
     TSHELLSTATEA = SHELLSTATEA;
     LPSHELLSTATE = LPSHELLSTATEA;

     PSHELLSTATEW = ^SHELLSTATEW;
     SHELLSTATEW = record
          flag0 : longint;             { Win95 only - no longer supported pszHiddenFileExts }
          dwWin95Unused : DWORD;       { Win95 only - no longer supported cbHiddenFileExts }
          uWin95Unused : UINT;         { Note: Not a typo!  This is a persisted structure so we cannot use LPARAM }
          lParamSort : LONG;           { new for win2k. need notUsed var to calc the right size of ie4 struct }
          iSortDirection : longint;    { FIELD_OFFSET does not work on bit fields }
          version : UINT;              { feel free to rename and use }
          uNotUsed : UINT;             { new for Whistler. }
          flag1 : word;                {Indicates if the Whistler StartPage mode is ON or OFF. }
       end;                            {Indicates if the Whistler StartPage on desktop is ON or OFF. }
     LPSHELLSTATEW = PSHELLSTATEW;     { If you need a new flag, steal a bit from from fSpareFlags. }
     PLPSHELLSTATEW = ^LPSHELLSTATEW;
     TSHELLSTATE = SHELLSTATEW;

     PSHELLFLAGSTATE = ^SHELLFLAGSTATE;
     SHELLFLAGSTATE = record
          flag0 : word;
       end;
     LPSHELLFLAGSTATE = PSHELLFLAGSTATE;
     PLPSHELLFLAGSTATE = ^LPSHELLFLAGSTATE;
     TSHELLFLAGSTATE = SHELLFLAGSTATE;

     PtagAAMENUFILENAME = ^tagAAMENUFILENAME;
     tagAAMENUFILENAME = record
          cbTotal : SHORT;
          rgbReserved : array[0..11] of BYTE;
          szFileName : array[0..0] of WCHAR;
       end;
     AASHELLMENUFILENAME = tagAAMENUFILENAME;
     TAASHELLMENUFILENAME = tagAAMENUFILENAME;
     PAASHELLMENUFILENAME = ^AASHELLMENUFILENAME;
     LPAASHELLMENUFILENAME = PtagAAMENUFILENAME;
     PLPAASHELLMENUFILENAME = ^LPAASHELLMENUFILENAME;


     PtagAASHELLMENUITEM = ^tagAASHELLMENUITEM;
     tagAASHELLMENUITEM = record
          lpReserved1 : pointer;
          iReserved : longint;
          uiReserved : UINT;
          lpName : LPAASHELLMENUFILENAME;    { name of file }
          psz : LPWSTR;  	  	    { text to use if no file }
       end;
     AASHELLMENUITEM = tagAASHELLMENUITEM;
     TAASHELLMENUITEM = tagAASHELLMENUITEM;
     PAASHELLMENUITEM = ^AASHELLMENUITEM;
     LPAASHELLMENUITEM = PtagAASHELLMENUITEM;
     PLPAASHELLMENUITEM = ^LPAASHELLMENUITEM;

   FDE_OVERWRITE_RESPONSE       = longint;
   TFDE_OVERWRITE_RESPONSE      = FDE_OVERWRITE_RESPONSE;
   PFDE_OVERWRITE_RESPONSE      = ^longint;
   FDE_SHAREVIOLATION_RESPONSE  = longint;
   TFDE_SHAREVIOLATION_RESPONSE = FDE_SHAREVIOLATION_RESPONSE;
   PFDE_SHAREVIOLATION_RESPONSE = ^FDE_SHAREVIOLATION_RESPONSE;    
   FILEOPENDIALOGOPTIONS        = longint;
   TFILEOPENDIALOGOPTIONS       = FILEOPENDIALOGOPTIONS;
   PFILEOPENDIALOGOPTIONS       = ^TFILEOPENDIALOGOPTIONS;
   FDAP = longint;
   TFDAP= FDAP;
   PFDAP= ^FDAP;
   _COMDLG_FILTERSPEC = packed record
                            pszName : LPCWSTR;
			    pszSpec : LPCWSTR;
                          end;

   COMDLG_FILTERSPEC  = _COMDLG_FILTERSPEC;
   TCOMDLG_FILTERSPEC = _COMDLG_FILTERSPEC;
   PCOMDLG_FILTERSPEC = ^_COMDLG_FILTERSPEC;

	
   IPersistFolder = Interface(IPersist)
        ['{000214EA-0000-0000-C000-000000000046}']
        function Initialize (pild : LPCITEMIDLIST): HResult; StdCall;
    end;

   IPersistFolder2 = Interface(IPersistFolder)
        ['{1AC3D9F0-175C-11d1-95BE-00609797EA4F}']
        function GetCurFolder(Out ppidl : LPITEMIDLIST):HResult; StdCall;
       end;

   IPersistIDList = Interface(IPersist)
        ['{1079acfc-29bd-11d3-8e0d-00c04f6837d5}']
         function SetIdList(pid:LPCITEMIDLIST):HResult;StdCall; 
        function GetIdList(out pid:LPCITEMIDLIST):HResult;StdCall;
        end;

   IEnumIDList = interface(IUnknown)
        ['{000214F2-0000-0000-C000-000000000046}']
        function Next(celt: ULONG; out rgelt: PItemIDList; var pceltFetched: ULONG): HRESULT; stdcall;
        function Skip(celt: ULONG): HRESULT; stdcall; function Reset: HRESULT; stdcall;
        function Clone(out ppenum: IEnumIDList): HRESULT; stdcall;
      end;

   IEnumExtraSearch = Interface(IUnknown)
       ['{0E700BE1-9DB6-11d1-A1CE-00C04FD75D13}']
       function Next(celt: ULONG; out rgelt: EXTRASEARCH; var pceltFetched: ULONG): HRESULT; stdcall;
       function Skip(celt: ULONG): HRESULT; stdcall; function Reset: HRESULT; stdcall;
       function Clone(out ppenum: IEnumExtraSearch): HRESULT; stdcall;
      end;
    
   IShellFolder = interface(IUnknown)
        ['{000214E6-0000-0000-C000-000000000046}']
        function ParseDisplayName(hwndOwner: HWND; pbcReserved: Pointer; lpszDisplayName: POLESTR; out pchEaten: ULONG; out ppidl: PItemIDList; var dwAttributes: ULONG): HRESULT; stdcall;
        function EnumObjects(hwndOwner: HWND; grfFlags: DWORD; out EnumIDList: IEnumIDList): HRESULT; stdcall;
        function BindToObject(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvOut): HRESULT; stdcall;
        function BindToStorage(pidl: PItemIDList; pbcReserved: Pointer; const riid: TIID; out ppvObj): HRESULT; stdcall;
        function CompareIDs(lParam: LPARAM; pidl1, pidl2: PItemIDList): HRESULT; stdcall;
        function CreateViewObject(hwndOwner: HWND; const riid: TIID; out ppvOut): HRESULT; stdcall;
        function GetAttributesOf(cidl: UINT; var apidl: PItemIDList; var rgfInOut: UINT): HRESULT; stdcall;
        function GetUIObjectOf(hwndOwner: HWND; cidl: UINT; var apidl: PItemIDList; const riid: TIID; prgfInOut: Pointer; out ppvOut): HRESULT; stdcall;
        function GetDisplayNameOf(pidl: PItemIDList; uFlags: DWORD; var lpName: TStrRet): HRESULT; stdcall;
        function SetNameOf(hwndOwner: HWND; pidl: PItemIDList; lpszName: POLEStr; uFlags: DWORD; var ppidlOut: PItemIDList): HRESULT; stdcall;
      end;

   IShellFolder2 = interface(IShellFolder)
     ['{93F2F68C-1D1B-11d3-A30E-00C04F79ABD1}']
      function GetDefaultSearchGUID(out guid:TGUID):HResult;StdCall;
      function EnumSearches(out ppenum:IEnumExtraSearch):HResult;StdCall;    
      function GetDefaultColumn(dwres:DWORD;psort :pulong; pdisplay:pulong):HResult;StdCall;   
      function GetDefaultColumnState(icolumn:UINT;pscflag:PSHCOLSTATEF):HResult;StdCall;   
      function GetDetailsEx(pidl:LPCITEMIDLIST;pscid:PSHCOLUMNID; pv : pOLEvariant):HResult;StdCall;   
      function GetDetailsOf(pidl:LPCITEMIDLIST;iColumn:UINT;psd:PSHELLDETAILS):HResult;StdCall;   
      function MapColumnToSCID(iColumn:UINT;pscid:PSHCOLUMNID):HResult;StdCall;   
     end;

   IAutoComplete = interface(IUnknown)
        ['{00bb2762-6a77-11d0-a535-00c04fd7d062}']
        function Init(hwndEdit: HWND; punkACL: IUnknown; pwszRegKeyPath: LPCWSTR; pwszQuickComplete: LPCWSTR): HRESULT; stdcall;
        function Enable(fEnable: BOOL): HRESULT; stdcall;
      end;

  IShellView    = Interface(IOleWindow)
         ['{000214E3-0000-0000-C000-000000000046}']
         function TranslateAccelerator( pm :PMSG):HResult; StdCall;
         function EnableModeless(fEnable : BOOL):HResult; StdCall;
         function UIActivate(uState:UINT):HResult; StdCall;
         function Refresh:HResult; StdCall;
         function CreateViewWindow(psvPrevious:IShellView;pfs:LPCFOLDERSETTINGS;psb:IShellBrowser;prcview:prect;var ph:HWND):HResult;StdCall;
         function DestroyViewWindow:HResult; StdCall;        
         function GetCurrentInfo(pfs: LPFOLDERSETTINGS):HResult; StdCall;     
         function AddPropertySheetPages(dwreserved : DWORD;pfn:pointer{LPFNSVADDPROPSHEETPAGE};lp:lparam):HResult; StdCall;     
         function SaveViewState:HResult; StdCall;       
         function SelectItem( pidlItem: LPCITEMIDLIST;uflags:TSVSIF):HResult; StdCall;       
         function GetItemObject(uitem:UINT;const riid:TGUID;out ppv :PPOinter):HResult;StdCall;
       end;

  IShellView2    = Interface(IShellView)
         ['{88E39E80-3578-11CF-AE69-08002B2E1262}']
         function GetView(var pvid:TSHELLVIEWID ;uview:ULONG):HResult;StdCall;
         function CreateViewWindow2(lpParams:LPSV2CVW2_PARAMS):HResult;StdCall;
         function HandleRename(pidlNew: LPCITEMIDLIST ):HResult;StdCall;
         function SelectAndPositionItem(pidlItem:LPCITEMIDLIST ;uflags:UINT;ppt:PPOINT):HRESULT;STDCALL;
         end;

   IFolderView = Interface(IUnknown)
        ['{cde725b0-ccc9-4519-917e-325d72fab4ce}']
        function GetCurrentViewMode(pViewMode:PUINT):HResult; StdCall;       
        function SetCurrentViewMode(ViewMode:UINT):HResult; StdCall;       
        function GetFolder(const riid:TGUID;ppv:pointer):HResult; StdCall;       
        function Item(iItemIndex:longint;ppidl:LPITEMIDLIST):HResult; StdCall;       
        function ItemCount(uflags:uint;pcitems:plongint):HResult; StdCall;       
        function Items (uflags:uint;const id :TGUID;out ppv: pointer):HResult; StdCall;       
        function GetSelectionMarkedItem(piItem:pint):HResult; StdCall;       
        function GetFocussedItem(piItem:pint):HResult; StdCall;       
        function GetItemPosition(pidl:LPCITEMIDLIST;ppt:PPOINT):HResult; StdCall;       
        function GetSpacing(ppt:ppoint):HResult; StdCall;       
        function GetDefaultSpacing(ppt:ppoint):HResult; StdCall;       
        function GetAutoArrange:HResult; StdCall;       
        function SelectItem(iItem : longint;dwflags:Dword) :HResult; StdCall;       
        function SelectAndPositionItems(cild:uint;var apid: LPCITEMIDLIST   ;apt:PPOINT;dwflags:DWord):HResult; StdCall;       
       end;           
    IFolderFilterSite = Interface(IUnknown)
          ['{C0A651F5-B48B-11d2-B5ED-006097C686F6}']
          function SetFilter(punk:IUnknown):HResult; StdCall;
          end;
    IFolderFilter = Interface(IUnknown)
          ['{9CC22886-DC8E-11d2-B1D0-00C04F8EEB3E}']
          function ShouldShow(Psf:IShellFolder;pidlfolder:LPCITEMIDLIST;pidlItem:LPCITEMIDLIST):HResult; StdCall;
          function GetEnumFlags(Psf:IShellFolder;pidlfolder:LPCITEMIDLIST;var hwnd: hwnd;out pgrfflags:DWORD):HResult; StdCall;
          end;

//cpp_quote("#include <commctrl.h>")
//cpp_quote("typedef LPTBBUTTON LPTBBUTTONSB;")

    IShellBrowser = interface(IOleWindow)
          ['{000214E2-0000-0000-C000-000000000046}']
    function InsertMenusSB(hmenuShared: HMenu; var menuWidths: TOleMenuGroupWidths): HResult;StdCall;
    function SetMenuSB(hmenuShared: HMenu; holemenu: HOLEMenu; hwndActiveObject: HWnd): HResult;StdCall;
    function RemoveMenusSB(hmenuShared: HMenu): HResult;StdCall;
    function SetStatusTextSB(pszStatusText: POleStr): HResult;StdCall;
    function EnableModelessSB(fEnable: BOOL): HResult;StdCall;
    function TranslateAcceleratorSB(var msg: TMsg; wID: Word): HResult;StdCall;
    function BrowseObject(pidl:LPCITEMIDLIST;wFlags:UINT): HResult;StdCall;
    function GetViewStateStream(grfMode :DWORD; out ppstrm :IStream): HResult;StdCall;
    function GetControlWindow(id:UINT;var h:HWND): HResult;StdCall;
    function SendCOntrolMsg(id:uint;umsg:UINT;wparam:wparam;lparam:lparam;pret:PLRESULT): HResult;StdCall;
    function QueryActiveShellView(out ppsh :IShellView): HResult;StdCall;
    function OnViewWindowActive(psh :IShellView): HResult;StdCall;
    function SetToolBarItems(lpButtons:LPTBBUTTONSB;nButtons:UINT;uFlags:uint): HResult;StdCall;
    end;         

    const
      CLSID_AutoComplete: TGUID = '{00BB2763-6A77-11D0-A535-00C04FD7D062}';

    const
      { IAutoComplete2 options }
      ACO_NONE           = 0;
      ACO_AUTOSUGGEST    = $1;
      ACO_AUTOAPPEND     = $2;
      ACO_SEARCH         = $4;
      ACO_FILTERPREFIXES = $8;
      ACO_USETAB         = $10;
      ACO_UPDOWNKEYDROPSLIST = $20;
      ACO_RTLREADING     = $40;

    type
      IAutoComplete2 = interface(IAutoComplete)
        ['{EAC04BC0-3791-11d2-BB95-0060977B464C}']
        function SetOptions(dwFlag: DWORD): HRESULT; stdcall;
        function GetOptions(var dwFlag: DWORD): HRESULT; stdcall;
      end;

     PCMINVOKECOMMANDINFO = ^TCMINVOKECOMMANDINFO;
     TCMINVOKECOMMANDINFO = packed record
          cbSize : DWORD;
          fMask  : DWORD;
          hwnd   : HWND;
          lpVerb : LPCSTR;
          lpParameters : LPCSTR;
          lpDirectory : LPCSTR;
          nShow  :  longint;
          dwHotKey: DWORD;
          hIcon  : THANDLE;
       end;
     LPCMINVOKECOMMANDINFO = PCMINVOKECOMMANDINFO;

    IContextMenu = interface(IUnknown)
         ['{000214E4-0000-0000-c000-000000000046}']
         function QueryContextMenu(hmenu:HMENU;indexMenu:UINT;idCmdFirst:UINT;idCmdLast:UINT;UFlags:uint):HRESULT;StdCall;
         function InvokeCommand(var lpici : TCMINVOKECOMMANDINFO):HResult; StdCall;         
         function GetCommandString(idcmd:UINT_Ptr;uType:UINT;pwreserved:puint;pszName:LPStr;cchMax:uint):HResult;StdCall;
       end;
    IContextMenu2 = interface(IContextMenu)
         ['{000214f4-0000-0000-c000-000000000046}']
         function HandleMenuMsg(uMsg:UINT;wParam:WPARAM;lParam:WPARAM):HResult;StdCall;
         end;
    IContextMenu3 = interface(IContextMenu2)
         ['{bcfce0a0-ec17-11d0-8d10-00a0c90f2719}']
         function HandleMenuMsg2(uMsg:UINT;wParam:WPARAM;lParam:WPARAM;presult:PLRESULT):HResult;StdCall;
         end;
    IEXtractIconA = interface(IUNknown)
         ['{000214eb-0000-0000-c000-000000000046}']
         function GetIconLocation(uFlags:UINT;szIconFIle:LPSTR;cchMax:UINT;var piIndex : longint; var pwflags:uint):HResult;StdCall;
         function Extract(pszFile:LPCStr;nIconIndex:UINT;var phiconLarge:HICON;var phiconSmall:HICON;nIconSize:UINT):HResult;StdCall;
         end;

    IEXtractIconW = interface(IUNknown)
         ['{000214fa-0000-0000-c000-000000000046}']
         function GetIconLocation(uFlags:UINT;szIconFIle:LPWSTR;cchMax:UINT;var piIndex : longint; var pwflags:uint):HResult;StdCall;
         function Extract(pszFile:LPCWStr;nIconIndex:UINT;var phiconLarge:HICON;var hiconSmall:HICON;nIconSize:UINT):HResult;StdCall;
         end;
    IEXtractIcon=IExtractIconA;

    SPINITF = DWORD;
    EXPPS = UINT;

    IProfferService = interface (IUnknown)
        ['{cb728b20-f786-11ce-92ad-00aa00a74cd0}']
        function ProfferService(const guid:TGUID;psp:IServiceProvider;var pdwcookie:DWORD):HRESULT;StdCall;
        function RevokeService(dwCookie:DWORD):HRESULT;StdCall;
        end;
{
    IPropertyUI = interface(IUnknown)
        ['{757a7d9f-919a-4118-99d7-dbb208c8cc66}']
        function ParsePropertyName(pszName:LPCWSTR; pfmtid:pFMTID; ppid:pPROPID; pchEaten:pULONG):HRESULT;StdCall;
        function GetCannonicalName(const fmtid:FMTID; pid:PROPID; pwszText:LPWSTR; cchText:DWORD):HRESULT;StdCall;
        function GetDisplayName(const fmtid:FMTID; pid:PROPID; flags:PROPERTYUI_NAME_FLAGS; pwszText:LPWSTR; cchText:DWORD):HRESULT;StdCall;
        function GetPropertyDescription(const fmtid:FMTID; pid:PROPID; pwszText:LPWSTR; cchText:DWORD):HRESULT;StdCall;
        function GetDefaultWidth(const fmtid:FMTID; pid:PROPID; pcxChars:pULONG):HRESULT;StdCall;
        function GetFlags(const fmtid:FMTID; pid:PROPID; pFlags:pPROPERTYUI_FLAGS):HRESULT;StdCall;
        function FormatForDisplay(const fmtid:FMTID; pid:PROPID; pvar:pPROPVARIANT; flags:PROPERTYUI_FORMAT_FLAGS;wszText:LPWSTR;cchText:DWORD):HRESULT;StdCall;
        function GetHelpInfo(const fmtid:FMTID; pid:PROPID; pwszHelpFile:LPWSTR; cch:DWORD; puHelpID:pUINT):HRESULT;StdCall;   
        end;
}
    ICategoryProvider =interface(IUnknown)
        ['{9af64809-5864-4c26-a720-c1f78c086ee3}']
        function CanCategorizeOnSCID(pscid:pSHCOLUMNID):HRESULT;StdCall;
        function GetDefaultCategory(pguid:pGUID; pscid:pSHCOLUMNID):HRESULT;StdCall;
        function GetCategoryForSCID(pscid:pSHCOLUMNID; pguid:pGUID):HRESULT;StdCall;
        function EnumCategories(out penum:IEnumGUID):HRESULT;StdCall;
        function GetCategoryName(pguid:pGUID; pszName:LPWSTR; cch:UINT):HRESULT;StdCall;
        function CreateCategory(pguid:pGUID; riid:REFIID; ppv:Ppointer):HRESULT;StdCall;
        end;

    ICategorizer =Interface(IUnknown)
        ['{a3b14589-9174-49a8-89a3-06a1ae2b9ba7}']
        function GetDescription(pszDesc:LPWSTR; cch:UINT):HRESULT;StdCall;
        function GetCategory(cidl:UINT; var apidl:LPCITEMIDLIST; rgCategoryIds:pDWORD):HRESULT;StdCall;
        function GetCategoryInfo(dwCategoryId:DWORD; pci:pCATEGORY_INFO):HRESULT;StdCall;
        function CompareCategory(csfFlags:CATSORT_FLAGS; dwCategoryId1:DWORD; dwCategoryId2:DWORD):HRESULT;StdCall;
        end;

   IQueryInfo = Interface(IUnknown)
        ['{00021500-0000-0000-c000-000000000046}']
        function GetInfoTip (dwFlags:DWord;var pwsztip:pwchar):HResult;StdCall;
        function GetInfoFlags (var dwflags:dword):HResult;Stdcall;
        end;

    ITaskbarList = interface(IUnknown)
      ['{56FDF342-FD6D-11d0-958A-006097C9A090}']
      function HrInit: HResult; stdcall;
      function AddTab(hwnd: HWND): HResult; stdcall;
      function DeleteTab(hwnd: HWND): HResult; stdcall;
      function ActivateTab(hwnd: HWND): HResult; stdcall;
      function SetActiveAlt(hwnd: HWND): HResult; stdcall;
    end;

    ITaskbarList2 = interface(ITaskbarList)
      ['{602D4995-B13A-429b-A66E-1935E44F4317}']
      function MarkFullscreenWindow(hwnd: HWND; fFullscreen: BOOL): HResult; stdcall;
    end;

const
    // enum THUMBBUTTONFLAGS
    THBF_ENABLED        = 0;
    THBF_DISABLED       = $1;
    THBF_DISMISSONCLICK = $2;
    THBF_NOBACKGROUND   = $4;
    THBF_HIDDEN         = $8;
    THBF_NONINTERACTIVE = $10;

type
    THUMBBUTTONFLAGS = DWord;

const
    // enum THUMBBUTTONMASK
    THB_BITMAP  = $1;
    THB_ICON    = $2;
    THB_TOOLTIP = $4;
    THB_FLAGS   = $8;

type
    THUMBBUTTONMASK = DWord;

    THUMBBUTTON = packed record
      dwMask: THUMBBUTTONMASK;
      iId: UINT;
      iBitmap: UINT;
      hIcon: HICON;
      szTip: array[0..259] of WCHAR;
      dwFlags: THUMBBUTTONFLAGS;
    end;
    LPTHUMBBUTTON = ^THUMBBUTTON;

const
    THBN_CLICKED      = $1800;

    // enum TBPFLAG
    TBPF_NOPROGRESS    = 0;
    TBPF_INDETERMINATE = $1;
    TBPF_NORMAL	     = $2;
    TBPF_ERROR         = $4;
    TBPF_PAUSED        = $8;

type
    TBPFLAG = DWord;

    ITaskBarList3 = interface(ITaskbarList2)
      ['{ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf}']
      function SetProgressValue(hwnd: HWND; ullCompleted: ULONGLONG; ullTotal: ULONGLONG): HResult; stdcall;
      function SetProgressState(hwnd: HWND; tbpFlags: TBPFLAG): HResult; stdcall;
      function RegisterTab(hwndTab: HWND; hwndMDI: HWND): HResult; stdcall;
      function UnregisterTab(hwndTab: HWND): HResult; stdcall;
      function SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND): HResult; stdcall;
      function SetTabActive(hwndTab: HWND; hwndMDI: HWND; dwReserved: DWORD): HResult; stdcall;
      function ThumbBarAddButtons(hwnd: HWND; cButtons: UINT; pButton: LPTHUMBBUTTON): HResult; stdcall;
      function ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT; pButton: LPTHUMBBUTTON): HResult; stdcall;
      function ThumbBarSetImageList(hwnd: HWND; himl: HIMAGELIST): HResult; stdcall;
      function SetOverlayIcon(hwnd: HWND; hIcon: HICON; pszDescription: LPCWSTR): HResult; stdcall;
      function SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR): HResult; stdcall;
      function SetThumbnailClip(hwnd: HWND; prcClip: PRECT): HResult; stdcall;
    end;

const
    // enum STPFLAG
    STPF_NONE                      = 0;
    STPF_USEAPPTHUMBNAILALWAYS     = $1;
    STPF_USEAPPTHUMBNAILWHENACTIVE = $2;
    STPF_USEAPPPEEKALWAYS          = $4;
    STPF_USEAPPPEEKWHENACTIVE      = $8;

type
    STPFLAG = DWord;

    ITaskbarList4 = interface(ITaskbarList3)
      ['{c43dc798-95d1-4bea-9030-bb99e2983a1a}']
      function SetTabProperties(hwndTab: HWND; stpFlags: STPFLAG): HResult; stdcall;
    end;

const
    // GETPROPERTYSTOREFLAGS enum
    GPS_DEFAULT	              = 0;
    GPS_HANDLERPROPERTIESONLY = $1;
    GPS_READWRITE	      = $2;
    GPS_TEMPORARY	      = $4;
    GPS_FASTPROPERTIESONLY    = $8;
    GPS_OPENSLOWITEM	      = $10;
    GPS_DELAYCREATION         = $20;
    GPS_BESTEFFORT            = $40;
    GPS_NO_OPLOCK	      = $80;
    GPS_MASK_VALID            = $ff;

type
    GETPROPERTYSTOREFLAGS = DWord;
    _tagpropertykey = packed record
        fmtid: TGUID;
        pid: DWORD;
    end;
    PROPERTYKEY = _tagpropertykey;
    REFPROPERTYKEY = ^PROPERTYKEY;
    REFPROPVARIANT = ^TPROPVARIANT;

    IPropertyStore = interface(IUnknown)
      ['{886d8eeb-8cf2-4446-8d02-cdba1dbdcf99}']
      function GetCount(out cProps: DWORD): HResult; stdcall;
      function GetAt(iProp: DWORD; out pkey: PROPERTYKEY): HResult; stdcall;
      function GetValue(key: REFPROPERTYKEY; out pv: PROPVARIANT): HResult; stdcall;
      function SetValue(key: REFPROPERTYKEY; propvar: REFPROPVARIANT): HResult; stdcall;
      function Commit: HResult; stdcall;
    end;

    IPropertyDescriptionList = interface(IUnknown)
      ['{1f9fc1d0-c39b-4b26-817f-011967d3440e}']
      function GetCount(out pcElem: UINT): HResult; stdcall;
      function GetAt(iElem: UINT; const riid: REFIID; out ppv): HResult; stdcall;
    end;
 
    IShellLinkA  = Interface(IUnknown)
        ['{000214EE-0000-0000-C000-000000000046}']
        function GetPath(pszFile:LPSTR; cch:longint;var  pfd:WIN32_FIND_DATA; fFlags:DWORD):HRESULT;StdCall;
        function GetIDList(var ppidl:LPITEMIDLIST):HRESULT;StdCall;
        function SetIDList(pidl:LPCITEMIDLIST):HRESULT;StdCall;
        function GetDescription(pszName:LPSTR; cch:longint):HRESULT;StdCall;
        function SetDescription(pszName:LPCSTR):HRESULT;StdCall;
        function GetWorkingDirectory(pszDir:LPSTR; cch:longint):HRESULT;StdCall;
        function SetWorkingDirectory(pszDir:LPCSTR):HRESULT;StdCall;
        function GetArguments(pszArgs:LPSTR; cch:longint):HRESULT;StdCall;
        function SetArguments(pszArgs:LPCSTR):HRESULT;StdCall;
        function GetHotkey(var pwHotkey:WORD):HRESULT;StdCall;
        function SetHotkey(wHotkey:WORD):HRESULT;StdCall;
        function GetShowCmd(var piShowCmd:longint):HRESULT;StdCall;
        function SetShowCmd(iShowCmd:longint):HRESULT;StdCall;
        function GetIconLocation(pszIconPath:LPSTR; cch:longint;var iIcon:longint):HRESULT;StdCall;
        function SetIconLocation(pszIconPath:LPCSTR; iIcon:longint):HRESULT;StdCall;
        function SetRelativePath(pszPathRel:LPCSTR; dwReserved:DWORD):HRESULT;StdCall;
        function Resolve(hwnd:HWND; fFlags:DWORD):HRESULT;StdCall;
        function SetPath(pszFile:LPCSTR):HRESULT;StdCall;
        end; 
 
    IShellLinkW = interface (IUnknown)
        ['{000214F9-0000-0000-C000-000000000046}']
        function GetPath(pszFile:LPWSTR; cch:longint; pfd:pWIN32_FIND_DATAW; fFlags:DWORD):HRESULT;StdCall;
        function GetIDList(ppidl:pLPITEMIDLIST):HRESULT;StdCall;
        function SetIDList(pidl:LPCITEMIDLIST):HRESULT;StdCall;
        function GetDescription(pszName:LPWSTR; cch:longint):HRESULT;StdCall;
        function SetDescription(pszName:LPCWSTR):HRESULT;StdCall;
        function GetWorkingDirectory(pszDir:LPWSTR; cch:longint):HRESULT;StdCall;
        function SetWorkingDirectory(pszDir:LPCWSTR):HRESULT;StdCall;
        function GetArguments(pszArgs:LPWSTR; cch:longint):HRESULT;StdCall;
        function SetArguments(pszArgs:LPCWSTR):HRESULT;StdCall;
        function GetHotkey(pwHotkey:pWORD):HRESULT;StdCall;
        function SetHotkey(wHotkey:WORD):HRESULT;StdCall;
        function GetShowCmd(piShowCmd:plongint):HRESULT;StdCall;
        function SetShowCmd(iShowCmd:longint):HRESULT;StdCall;
        function GetIconLocation(pszIconPath:LPWSTR; cch:longint; piIcon:plongint):HRESULT;StdCall;
        function SetIconLocation(pszIconPath:LPCWSTR; iIcon:longint):HRESULT;StdCall;
        function SetRelativePath(pszPathRel:LPCWSTR; dwReserved:DWORD):HRESULT;StdCall;
        function Resolve(hwnd:HWND; fFlags:DWORD):HRESULT;StdCall;
        function SetPath(pszFile:LPCWSTR):HRESULT;StdCall;
        end;
     IShellLink = IShellLinkA;

    PIShellItem= ^IShellItem;
    IShellItem = interface(IUnknown)
               ['{43826d1e-e718-42ee-bc55-a1e261c37bfe}']
               function BindToHandler(pbc:IBindCTX;bhid:PGUID;RIID:PIID;ppv:ppointer):HResult;Stdcall;          
               function GetParent(ppsi:PISHellItem):HResult;Stdcall;
               function GetDisplayName(sigdnname:SIGDN;ppszName:LPWSTR):HResult; Stdcall;
               function GetAttributes(sfgaomask:SFGAOF;psfgaoAttribs:PSFGAOF):HResult;Stdcall;
               function Compare(psi:IShellItem;hint:SICHINTF;piorder:PINT):HResult; Stdcall;
               end;

    IEnumShellItems = interface(IUnknown)
      ['{70629033-e363-4a28-a567-0db78006e6d7}']
      function Next(celt: ULONG; out rgelt: IShellItem; var pceltFetched: ULONG): HResult; stdcall;
      function Skip(celt: ULONG): HResult; stdcall;
      function Reset: HResult; stdcall;
      function Clone(out ppenum: IEnumShellItems): HResult; stdcall;
    end;

const
    // SIATTRIBFLAGS enum
    SIATTRIBFLAGS_AND       = $1;
    SIATTRIBFLAGS_OR        = $2;
    SIATTRIBFLAGS_APPCOMPAT = $3;
    SIATTRIBFLAGS_MASK      = $3;
    SIATTRIBFLAGS_ALLITEMS  = $4000;

type
    SIATTRIBFLAGS = DWord;
    IShellItemArray = interface(IUnknown)
      ['{b63ea76d-1f85-456f-a19c-48159efa858b}']
      function BindToHandler(pbc: IBindCtx; const bhid: TGUID; const riid: REFIID; out ppvOut): HResult; stdcall;
      function GetPropertyStore(flags: GETPROPERTYSTOREFLAGS; const riid: REFIID; out ppv): HResult; stdcall;
      function GetPropertyDescriptionList(keyType: REFPROPERTYKEY; const riid: REFIID; out ppv): HResult; stdcall;
      function GetAttributes(AttribFlags: SIATTRIBFLAGS; sfgaoMask: SFGAOF; var psfgaoAttribs: SFGAOF): HResult; stdcall;
      function GetCount(var pdwNumItems: DWORD): HResult; stdcall;
      function GetItemAt(dwIndex: DWORD; var ppsi: IShellItem): HResult; stdcall;
      function EnumItems(var ppenumShellItems: IEnumShellItems): HResult; stdcall;
    end;

    IModalWindow = Interface(IUnknown)
	             ['{b4db1657-70d7-485e-8e3e-6fcb5a5c1802}']
				   function Show(hwndparent:HWND):HResult;StdCall;
				   end;
				   
    IShellItemFilter = Interface(IUnknown)
	              ['{2659B475-EEB8-48b7-8F07-B378810F48CF}']
                    function IncludeItem(psi:IShellItem):HResult;StdCall;
                    function GetEnumFlagsForItem(psi:IShellItem;pgrfflags :PSHCONTF):HRESULT;Stdcall;
                   end;					

    IFileDialog = Interface;     
    IFileDialogEvents = Interface(IUnknown)
                   ['{973510db-7d7f-452b-8975-74a85828d354}']
                    function OnFileOk         (pfd:IFileDialog):HResult; Stdcall;
                    function OnFolderChanging (pfd:IFileDialog;psifolder:IShellItem):HResult; Stdcall;
                    function OnFolderChange   (pfd:IFileDialog):HResult; Stdcall;
                    function OnSelectionChange(pfd:IFileDialog):HResult; Stdcall;
                    function OnShareViolation (pfd:IFileDialog;psi:IShellItem;pResponse :pFDE_SHAREVIOLATION_RESPONSE):HResult; Stdcall;
                    function OnTypeChange     (pfd:IFileDialog):HResult; Stdcall;
                    function OnOverwrite      (pfd:IFileDialog;psi:IShellItem;pResponse :pFDE_OVERWRITE_RESPONSE):HResult; Stdcall;
                 end;

    IFileDialog = Interface(IModalWindow) 
                  ['{42f85136-db7e-439c-85f1-e4075d135fc8}']
                    function SetFileTypes(cFileTypes:UINT;rgFilterSpec:pCOMDLG_FILTERSPEC):HRESULT;Stdcall;
		    function SetFileTypeIndex(iFileType:UINT):HRESULT;Stdcall;
		    function GetFileTypeIndex(piFileType:pUINT):HRESULT;Stdcall;
		    function Advise(pdfde:IFileDialogEvents;pdwcookie:PDWORD):HRESULT;Stdcall;
		    function unadvise(dwCookie:DWORD):HRESULT;Stdcall;
		    function SetOptions(fos:FILEOPENDIALOGOPTIONS):HRESULT;Stdcall;
		    function GetOptions(pfos:pFILEOPENDIALOGOPTIONS):HRESULT;Stdcall;
		    function SetDefaultFolder(psi:IShellItem):HRESULT;Stdcall;
		    function SetFolder(psi:IShellItem):HRESULT;Stdcall;
		    function Getfolder(ppsi:pIShellItem):HRESULT;Stdcall;
		    function GetCurrentSelection(ppsi:pIShellItem):HRESULT;Stdcall;
		    function SetFileName(pszName:LPCWSTR):HRESULT;Stdcall;
		    function GetFileName(pszName:pLPWSTR):HRESULT;Stdcall;
		    function SetTitle(pszTitle:LPCWSTR):HRESULT;Stdcall;
		    function SetOkButtonLabel(pszText:LPCWSTR):HRESULT;Stdcall;
		    function SetFileNameLabel(pszLabel:LPCWSTR):HRESULT;Stdcall;
		    function GetResult(ppsi:pIShellItem):HRESULT;Stdcall;
		    function AddPlace(psi:IShellItem;fdap:FDAP):HRESULT;Stdcall;
		    function SetDefaultExtension(pszDefaultExtension:LPCWSTR):HRESULT;Stdcall;
		    function Close(hr:HRESULT):HRESULT;Stdcall;
		    function SetClientGuid(GUID:PGUID):HRESULT;Stdcall;
		    function ClearClientData:HRESULT;Stdcall;
		    function SetFilter(pfilter:IShellItemFilter):HRESULT;Stdcall;
		  end;

    IFileOperationProgressSink = interface(IUnknown)
      ['{04b0f1a7-9490-44bc-96e1-4296a31252e2}']
      function StartOperations: HResult; stdcall;
      function FinishOperations(hrResult: HResult): HResult; stdcall;
      function PreRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
      function PostRenameItem(dwFlags: DWORD; psiItem: IShellItem; pszNewName: LPCWSTR; hrRename: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
      function PreMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
      function PostMoveItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrMove: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
      function PreCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
      function PostCopyItem(dwFlags: DWORD; psiItem: IShellItem; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; hrCopy: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
      function PreDeleteItem(dwFlags: DWORD; psiItem: IShellItem): HResult; stdcall;
      function PostDeleteItem(dwFlags: DWORD; psiItem: IShellItem; hrDelete: HRESULT; psiNewlyCreated: IShellItem): HResult; stdcall;
      function PreNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR): HResult; stdcall;
      function PostNewItem(dwFlags: DWORD; psiDestinationFolder: IShellItem; pszNewName: LPCWSTR; pszTemplateName: LPCWSTR; dwFileAttributes: DWORD; hrNew: HRESULT; psiNewItem: IShellItem): HResult; stdcall;
      function UpdateProgress(iWorkTotal: UINT; iWorkSoFar: UINT): HResult; stdcall;
      function ResetTimer: HResult; stdcall;
      function PauseTimer: HResult; stdcall;
      function ResumeTimer: HResult; stdcall;
    end;

    IFileSaveDialog = interface(IFileDialog)
      ['{84bccd23-5fde-4cdb-aea4-af64b83d78ab}']
      function SetSaveAsItem(psi: IShellItem): HResult; stdcall;
      function SetProperties(pStore: IPropertyStore): HResult; stdcall;
      function SetCollectedProperties(pList: IPropertyDescriptionList; fAppendDefault: BOOL): HResult; stdcall;
      function GetProperties(var ppStore: IPropertyStore): HResult; stdcall;
      function ApplyProperties(psi: IShellItem; pStore: IPropertyStore; hwnd: HWND; pSink: IFileOperationProgressSink): HResult; stdcall;
    end;

    IFileOpenDialog = interface(IFileDialog)
      ['{d57c7288-d4ad-4768-be02-9d969532d960}']
      function GetResults(var ppenum: IShellItemArray): HResult; stdcall;
      function GetSelectedItems(var ppsai: IShellItemArray): HResult; stdcall;
    end;

const
    // CDCONTROLSTATEF enum
    CDCS_INACTIVE       = 0;
    CDCS_ENABLED        = $1;
    CDCS_VISIBLE        = $2;
    CDCS_ENABLEDVISIBLE = $3;

type
    CDCONTROLSTATEF = DWord;
    IFileDialogCustomize = interface(IUnknown)
      ['{e6fdd21a-163f-4975-9c8c-a69f1ba37034}']
      function EnableOpenDropDown(dwIDCtl: DWORD): HResult; stdcall;
      function AddMenu(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
      function AddPushButton(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
      function AddComboBox(dwIDCtl: DWORD): HResult; stdcall;
      function AddRadioButtonList(dwIDCtl: DWORD): HResult; stdcall;
      function AddCheckButton(dwIDCtl: DWORD; pszLabel: LPCWSTR; bChecked: BOOL): HResult; stdcall;
      function AddEditBox(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
      function AddSeparator(dwIDCtl: DWORD): HResult; stdcall;
      function AddText(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
      function SetControlLabel(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
      function GetControlState(dwIDCtl: DWORD; out pdwState: CDCONTROLSTATEF): HResult; stdcall;
      function SetControlState(dwIDCtl: DWORD; dwState: CDCONTROLSTATEF): HResult; stdcall;
      function GetEditBoxText(dwIDCtl: DWORD; out ppszText: WCHAR): HResult; stdcall;
      function SetEditBoxText(dwIDCtl: DWORD; pszText: LPCWSTR): HResult; stdcall;
      function GetCheckButtonState(dwIDCtl: DWORD; out pbChecked: BOOL): HResult; stdcall;
      function SetCheckButtonState(dwIDCtl: DWORD; bChecked: BOOL): HResult; stdcall;
      function AddControlItem(dwIDCtl: DWORD; dwIDItem: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
      function RemoveControlItem(dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
      function RemoveAllControlItems(dwIDCtl: DWORD): HResult; stdcall;
      function GetControlItemState(dwIDCtl: DWORD; dwIDItem: DWORD; out pdwState: CDCONTROLSTATEF): HResult; stdcall;
      function SetControlItemState(dwIDCtl: DWORD; dwIDItem: DWORD; dwState: CDCONTROLSTATEF): HResult; stdcall;
      function GetSelectedControlItem(dwIDCtl: DWORD; out pdwIDItem: DWORD): HResult; stdcall;
      function SetSelectedControlItem(dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
      function StartVisualGroup(dwIDCtl: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
      function EndVisualGroup: HResult; stdcall;
      function MakeProminent(dwIDCtl: DWORD): HResult; stdcall;
      function SetControlItemText(dwIDCtl: DWORD; dwIDItem: DWORD; pszLabel: LPCWSTR): HResult; stdcall;
    end;

    IFileDialogControlEvents = interface(IUnknown)
      ['{36116642-D713-4b97-9B83-7484A9D00433}']
      function OnItemSelected(pfdc: IFileDialogCustomize; dwIDCtl: DWORD; dwIDItem: DWORD): HResult; stdcall;
      function OnButtonClicked(pfdc: IFileDialogCustomize; dwIDCtl: DWORD): HResult; stdcall;
      function OnCheckButtonToggled(pfdc: IFileDialogCustomize; dwIDCtl: DWORD; bChecked: BOOL): HResult; stdcall;
      function OnControlActivating(pfdc: IFileDialogCustomize; dwIDCtl: DWORD): HResult; stdcall;
    end;

    IShellExtInit = Interface(IUnknown)
          [IID_IShellExtInit]
         function Initialize(pidlfolder: LPCITEMIDLIST; pdtobj : IDataObject;hkeyProgID : HKEY):HResult; stdcall;
         end;

function SHGetMalloc(out ppmalloc: IMalloc):HResult;StdCall; external 'shell32' name 'SHGetMalloc';
function SHGetDesktopFolder(out ppshf:IShellFolder):HResult;StdCall; external 'shell32' name 'SHGetDesktopFolder';

function  SHOpenFolderAndSelectItems(pidlFolder:LPCITEMIDLIST;cidl:UINT;var  apidl: LPCITEMIDLIST; dwflags: DWORD):HResult;StdCall; external 'shell32' name 'SHOpenFolderAndSelectItems';
//function  SHCreateShellItem( pidlParent:LPCITEMIDLIST; psfparent:IShellFolder; pidl: LPCITEMIDLIST pidl; out ppsi: IShellItem):HResult;StdCall; external 'shell32' name 'SHCreateShellItem';
function  SHGetSpecialFolderLocation( hwnd:HWND; csidl:longint;out ppidl: LPITEMIDLIST):HResult;StdCall; external 'shell32' name 'SHGetSpecialFolderLocation';
procedure SHFlushSFCache;StdCall; external 'shell32' name 'SHFlushSFCache';
function  SHCloneSpecialIDList(HWND:hwnd; csidl:longint;fcreate:BOOL):LPITEMIDLIST; StdCall; external 'shell32' name 'SHCloneSpecialIDList';
function  SHGetSpecialFolderPathA(HWND:hwnd;pszpath: LPSTR; csidl:Longint;fcreate:bool):bool;StdCall; external 'shell32' name 'SHGetSpecialFolderPathA';
function  SHGetSpecialFolderPath(HWND:hwnd;pszpath: LPSTR; csidl:Longint;fcreate:bool):bool;StdCall; external 'shell32' name 'SHGetSpecialFolderPathA';
function  SHGetSpecialFolderPathW(HWND:hwnd;pszpath: LPWSTR; csidl:Longint;fcreate:bool):bool;StdCall; external 'shell32' name 'SHGetSpecialFolderPathW';
function  SHGetFolderPathA(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszpath:lpstr):HResult;StdCall; external 'shell32' name 'SHGetFolderPathA';
function  SHGetFolderPath(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszpath:lpstr):HResult;StdCall; external 'shell32' name 'SHGetFolderPathA';
function  SHGetFolderPathW(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszpath:lpWstr):HResult;StdCall; external 'shell32' name 'SHGetFolderPathW';
function  SHGetFolderPathAndSubDirA(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszsubdir:LPCStr;pszpath:lpstr):HResult;StdCall; external 'shell32' name 'SHGetFolderPathAndSubDirA';
function  SHGetFolderPathAndSubDir(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszsubdir:LPCStr;pszpath:lpstr):HResult;StdCall; external 'shell32' name 'SHGetFolderPathAndSubDirA';
function  SHGetFolderPathAndSubDirW(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;pszsubdir:LPCWStr;pszpath:lpWstr):HResult; external 'shell32' name 'SHGetFolderPathAndSubDirW';
function  SHFolderLocation(HWND:hwnd;csidl:longint;htoken:THandle;dwflags:dword;var ppidl:LPITEMIDLIST):HRESULT;StdCall; external 'shell32' name 'SHFolderLocation';


Const External_Library = 'shell32';

  function SHAlloc(cb:SIZE_T):pointer;StdCall;external External_library name 'SHAlloc';
  procedure SHFree(pv:pointer);StdCall;external External_library name 'SHFree';
  function SHGetIconOverlayIndexA(pszIconPath:lpcstr; iIconIndex:Longint):Longint;StdCall;external External_library name 'SHGetIconOverlayIndexA';
  function SHGetIconOverlayIndexW(pszIconPath:lpcwstr; iIconIndex:Longint):Longint;StdCall;external External_library name 'SHGetIconOverlayIndexW';
  function SHGetPathFromIDListA(pidl:LPCITEMIDLIST; pszPath:LPStr):BOOL;StdCall;external External_library name 'SHGetPathFromIDListA';
  function SHGetPathFromIDListW(pidl:LPCITEMIDLIST; pszPath:LPWStr):BOOL;StdCall;external External_library name 'SHGetPathFromIDListW';
  function SHCreateDirectory(hwnd:HWND; pszPath:lpcwstr):Longint;StdCall;external External_library name 'SHCreateDirectory';
  function SHCreateDirectoryExA(hwnd:HWND; pszPath:lpcstr; psa:LPSECURITY_ATTRIBUTES):Longint;StdCall;external External_library name 'SHCreateDirectoryExA';
  function SHCreateDirectoryExW(hwnd:HWND; pszPath:lpcwstr; psa:LPSECURITY_ATTRIBUTES):Longint;StdCall;external External_library name 'SHCreateDirectoryExW';
{
  function SHOpenFolderAndSelectItems(pidlFolder:LPCITEMIDLIST; cidl:UINT; var apidl:LPCITEMIDLIST; dwFlags:DWord):HRESULT;StdCall;external External_library name 'SHOpenFolderAndSelectItems';
  function SHCreateShellItem(pidlParent:LPCITEMIDLIST; psfParent:IShellFolder; pidl:LPCITEMIDLIST;out ppsi:IShellItem):HRESULT;StdCall;external External_library name 'SHCreateShellItem';
  function SHGetSpecialFolderLocation(hwnd:HWND; csidl:Longint; var ppidl:LPITEMIDLIST):HRESULT;StdCall;external External_library name 'SHGetSpecialFolderLocation';
  procedure SHFlushSFCache;StdCall;external External_library name 'SHFlushSFCache';
  function SHCloneSpecialIDList(hwnd:HWND; csidl:Longint; fCreate:BOOL):LPITEMIDLIST;StdCall;external External_library name 'SHCloneSpecialIDList';
  function SHGetSpecialFolderPathA(hwnd:HWND; pszPath:LPStr; csidl:Longint; fCreate:BOOL):BOOL;StdCall;external External_library name 'SHGetSpecialFolderPathA';
  function SHGetSpecialFolderPathW(hwnd:HWND; pszPath:LPWStr; csidl:Longint; fCreate:BOOL):BOOL;StdCall;external External_library name 'SHGetSpecialFolderPathW';
  function SHGetFolderLocation(hwnd:HWND; csidl:Longint; hToken:THANDLE; dwFlags:DWord;var ppidl:LPITEMIDLIST):HRESULT;StdCall;external External_library name 'SHGetFolderLocation';
}
  function SHGetSetFolderCustomSettingsA(pfcs:LPSHFOLDERCUSTOMSETTINGSA; pszPath:lpcstr; dwReadWrite:DWord):HRESULT;StdCall;external External_library name 'SHGetSetFolderCustomSettingsA';
  function SHGetSetFolderCustomSettingsW(pfcs:LPSHFOLDERCUSTOMSETTINGSW; pszPath:lpcwstr; dwReadWrite:DWord):HRESULT;StdCall;external External_library name 'SHGetSetFolderCustomSettingsW';
  function SHBrowseForFolderA(lpbi:LPBROWSEINFOA):LPITEMIDLIST;StdCall;external External_library name 'SHBrowseForFolderA';
  function SHBrowseForFolderW(lpbi:LPBROWSEINFOW):LPITEMIDLIST;StdCall;external External_library name 'SHBrowseForFolderW';
  function SHLoadInProc(const rclsid:Tguid):HRESULT;StdCall;external External_library name 'SHLoadInProc';
  function SHEnableServiceObject(const rclsid:Tguid; fEnable:BOOL):HRESULT;StdCall;external External_library name 'SHEnableServiceObject';
//  function SHGetDesktopFolder(out ppshf:IShellFolder):HRESULT;StdCall;external External_library name 'SHGetDesktopFolder';
  procedure SHChangeNotify(wEventId:LONG; uFlags:UINT; dwItem1:POINTER; dwItem2:POINTER);StdCall;external External_library name 'SHChangeNotify';
  procedure SHAddToRecentDocs(uFlags:UINT; pv:POINTER);StdCall;external External_library name 'SHAddToRecentDocs';
  function SHHandleUpdateImage(pidlExtra:LPCITEMIDLIST):Longint;StdCall;external External_library name 'SHHandleUpdateImage';
  procedure SHUpdateImageA(pszHashItem:lpcstr; iIndex:Longint; uFlags:UINT; iImageIndex:Longint);StdCall;external External_library name 'SHUpdateImageA';
  procedure SHUpdateImageW(pszHashItem:lpcwstr; iIndex:Longint; uFlags:UINT; iImageIndex:Longint);StdCall;external External_library name 'SHUpdateImageW';
  function SHChangeNotifyRegister(hwnd:HWND; fSources:Longint; fEvents:LONG; wMsg:UINT; cEntries:Longint; 
             pshcne:PSHChangeNotifyEntry):ULONG;StdCall;external External_library name 'SHChangeNotifyRegister';
  function SHChangeNotifyDeregister(ulID:ulong):BOOL;StdCall;external External_library name 'SHChangeNotifyDeregister';
  function SHChangeNotification_Lock(hChangeNotification:THANDLE; dwProcessId:DWord; var pppidl:PLPITEMIDLIST; plEvent:PLONG):THANDLE;StdCall;external External_library name 'SHChangeNotification_Lock';
  function SHChangeNotification_Unlock(hLock:THANDLE):BOOL;StdCall;external External_library name 'SHChangeNotification_Unlock';
  function SHGetRealIDL(psf:IShellFolder; pidlSimple:LPCITEMIDLIST; var ppidlReal:LPITEMIDLIST):HRESULT;StdCall;external External_library name 'SHGetRealIDL';
  function SHGetInstanceExplorer(out ppunk:IUnknown):HRESULT;StdCall;external External_library name 'SHGetInstanceExplorer';
  function SHGetDataFromIDListA(psf:IShellFolder; pidl:LPCITEMIDLIST; nFormat:Longint; pv:pointer; cb:Longint):HRESULT;StdCall;external External_library name 'SHGetDataFromIDListA';
  function SHGetDataFromIDListW(psf:IShellFolder; pidl:LPCITEMIDLIST; nFormat:Longint; pv:pointer; cb:Longint):HRESULT;StdCall;external External_library name 'SHGetDataFromIDListW';
  function RestartDialog(hwnd:HWND; lpPrompt:lpcwstr; dwReturn:DWord):Longint;StdCall;external External_library name 'RestartDialog';
  function RestartDialogEx(hwnd:HWND; lpPrompt:lpcwstr; dwReturn:DWord; dwReasonCode:DWord):Longint;StdCall;external External_library name 'RestartDialogEx';
  function SHCoCreateInstance(pszCLSID:lpcwstr; pclsid:PCLSID; pUnkOuter:IUnknown; riid:TREFIID; ppv:Ppointer):HRESULT;StdCall;external External_library name 'SHCoCreateInstance';
//  function CallCPLEntry16(hinst:HINSTANCE; lpfnEntry:TFARPROC16; hwndCPL:HWND; msg:UINT; lParam1:lparam; lParam2:lparam):LRESULT;StdCall;external External_library name 'CallCPLEntry16';
  function SHCreateStdEnumFmtEtc(cfmt:UINT; afmt:array of TFORMATETC; var ppenumFormatEtc:IEnumFORMATETC):HRESULT;StdCall;external External_library name 'SHCreateStdEnumFmtEtc';
  function SHDoDragDrop(hwnd:HWND; pdata:IDataObject; pdsrc:IDropSource; dwEffect:DWord; pdwEffect:PDWORD):HRESULT;StdCall;external External_library name 'SHDoDragDrop';
  function DAD_SetDragImage(him:HIMAGELIST; pptOffset:PPOINT):BOOL;StdCall;external External_library name 'DAD_SetDragImage';
  function DAD_DragEnterEx(hwndTarget:HWND; ptStart:TPOINT):BOOL;StdCall;external External_library name 'DAD_DragEnterEx';
  function DAD_DragEnterEx2(hwndTarget:HWND; ptStart:TPOINT; pdtObject:IDataObject):BOOL;StdCall;external External_library name 'DAD_DragEnterEx2';
  function DAD_ShowDragImage(fShow:BOOL):BOOL;StdCall;external External_library name 'DAD_ShowDragImage';
  function DAD_DragMove(pt:TPOINT):BOOL;StdCall;external External_library name 'DAD_DragMove';
  function DAD_DragLeave:BOOL;StdCall;external External_library name 'DAD_DragLeave';
  function DAD_AutoScroll(hwnd:HWND; pad:PAUTO_SCROLL_DATA; pptNow:PPOINT):BOOL;StdCall;external External_library name 'DAD_AutoScroll';
  function ReadCabinetState(lpState:LPCABINETSTATE; iSize:Longint):BOOL;StdCall;external External_library name 'ReadCabinetState';
  function WriteCabinetState(lpState:LPCABINETSTATE):BOOL;StdCall;external External_library name 'WriteCabinetState';
  function PathMakeUniqueName(pszUniqueName:LPWStr; cchMax:UINT; pszTemplate:lpcwstr; pszLongPlate:lpcwstr; pszDir:lpcwstr):BOOL;StdCall;external External_library name 'PathMakeUniqueName';
  procedure PathQualify(psz:LPWStr);StdCall;external External_library name 'PathQualify';
  function PathIsExe(pszPath:lpcwstr):BOOL;StdCall;external External_library name 'PathIsExe';
  function PathIsSlowA(pszFile:lpcstr; dwAttr:DWord):BOOL;StdCall;external External_library name 'PathIsSlowA';
  function PathIsSlowW(pszFile:lpcwstr; dwAttr:DWord):BOOL;StdCall;external External_library name 'PathIsSlowW';
  function PathCleanupSpec(pszDir:lpcwstr; pszSpec:LPWStr):Longint;StdCall;external External_library name 'PathCleanupSpec';
  function PathResolve(pszPath:LPWStr; dirs:array of lpcwstr; fFlags:UINT):Longint;StdCall;external External_library name 'PathResolve';
  function GetFileNameFromBrowse(hwnd:HWND; pszFilePath:LPWStr; cbFilePath:UINT; pszWorkingDir:lpcwstr; pszDefExt:lpcwstr; 
             pszFilters:lpcwstr; pszTitle:lpcwstr):BOOL;StdCall;external External_library name 'GetFileNameFromBrowse';
  function DriveType(iDrive:Longint):Longint;StdCall;external External_library name 'DriveType';
  function RealDriveType(iDrive:Longint; fOKToHitNet:BOOL):Longint;StdCall;external External_library name 'RealDriveType';
  function IsNetDrive(iDrive:Longint):Longint;StdCall;external External_library name 'IsNetDrive';
  function Shell_MergeMenus(hmDst:HMENU; hmSrc:HMENU; uInsert:UINT; uIDAdjust:UINT; uIDAdjustMax:UINT; 
             uFlags:ULONG):UINT;StdCall;external External_library name 'Shell_MergeMenus';
  function SHObjectProperties(hwnd:HWND; dwType:DWord; lpObject:lpcwstr; lpPage:lpcwstr):BOOL;StdCall;external External_library name 'SHObjectProperties';
  function SHFormatDrive(hwnd:HWND; drive:UINT; fmtID:UINT; options:UINT):DWord;StdCall;external External_library name 'SHFormatDrive';
  function ILClone(pidl:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILClone';
  function ILGetNext(pidl:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILGetNext';
  function ILGetSize(pidl:LPCITEMIDLIST):UINT;StdCall;external External_library name 'ILGetSize';
  function ILFindLastID(pidl:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILFindLastID';
  function ILRemoveLastID(pidl:LPITEMIDLIST):BOOL;StdCall;external External_library name 'ILRemoveLastID';
  function ILAppendID(pidl:LPITEMIDLIST; pmkid:LPCSHITEMID; fAppend:BOOL):LPITEMIDLIST;StdCall;external External_library name 'ILAppendID';
  procedure ILFree(pidl:LPITEMIDLIST);StdCall;external External_library name 'ILFree';
  function ILCloneFirst(pidl:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILCloneFirst';
  function ILIsEqual(pidl1:LPCITEMIDLIST; pidl2:LPCITEMIDLIST):BOOL;StdCall;external External_library name 'ILIsEqual';
  function ILIsParent(pidl1:LPCITEMIDLIST; pidl2:LPCITEMIDLIST; fImmediate:BOOL):BOOL;StdCall;external External_library name 'ILIsParent';
  function ILFindChild(pidlParent:LPCITEMIDLIST; pidlChild:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILFindChild';
  function ILCombine(pidl1:LPCITEMIDLIST; pidl2:LPCITEMIDLIST):LPITEMIDLIST;StdCall;external External_library name 'ILCombine';
  function ILLoadFromStream(pstm:IStream; var pidl:LPITEMIDLIST):HRESULT;StdCall;external External_library name 'ILLoadFromStream';
  function ILSaveToStream(pstm:IStream; pidl:LPCITEMIDLIST):HRESULT;StdCall;external External_library name 'ILSaveToStream';
  function ILCreateFromPathA(pszPath:lpcstr):LPITEMIDLIST;StdCall;external External_library name 'ILCreateFromPathA';
  function ILCreateFromPathW(pszPath:lpcwstr):LPITEMIDLIST;StdCall;external External_library name 'ILCreateFromPathW';
  function ILCreateFromPath(pszPath:LPCTSTR):LPITEMIDLIST;StdCall;external External_library name 'ILCreateFromPath';
  function SHILCreateFromPath(szPath:lpcwstr;var ppidl:LPITEMIDLIST; rgfInOut:PDWORD):HRESULT;StdCall;external External_library name 'SHILCreateFromPath';
  function OpenRegStream(hkey:HKEY; pszSubkey:lpcwstr; pszValue:lpcwstr; grfMode:DWord):IStream;StdCall;external External_library name 'OpenRegStream';
  function SHFindFiles(pidlFolder:LPCITEMIDLIST; pidlSaveFile:LPCITEMIDLIST):BOOL;StdCall;external External_library name 'SHFindFiles';
  procedure PathGetShortPath(pszLongPath:LPWStr);StdCall;external External_library name 'PathGetShortPath';
  function PathYetAnotherMakeUniqueName(pszUniqueName:LPWStr; pszPath:lpcwstr; pszShort:lpcwstr; pszFileSpec:lpcwstr):BOOL;StdCall;external External_library name 'PathYetAnotherMakeUniqueName';
  function Win32DeleteFile(pszPath:lpcwstr):BOOL;StdCall;external External_library name 'Win32DeleteFile';
  function PathProcessCommand(lpSrc:lpcwstr; lpDest:LPWStr; iMax:Longint; dwFlags:DWord):LONG;StdCall;external External_library name 'PathProcessCommand';
  function SHRestricted(rest:TRESTRICTIONS):DWord;StdCall;external External_library name 'SHRestricted';
  function SignalFileOpen(pidl:LPCITEMIDLIST):BOOL;StdCall;external External_library name 'SignalFileOpen';
  function SHSimpleIDListFromPath(pszPath:lpcwstr):LPITEMIDLIST;StdCall;external External_library name 'SHSimpleIDListFromPath';
  function SHLoadOLE(lParam:lparam):HRESULT;StdCall;external External_library name 'SHLoadOLE';
  function SHStartNetConnectionDialogA(hwnd:HWND; pszRemoteName:lpcstr; dwType:DWord):HRESULT;StdCall;external External_library name 'SHStartNetConnectionDialogA';
  function SHStartNetConnectionDialogW(hwnd:HWND; pszRemoteName:lpcwstr; dwType:DWord):HRESULT;StdCall;external External_library name 'SHStartNetConnectionDialogW';
  function SHDefExtractIconA(pszIconFile:lpcstr; iIndex:Longint; uFlags:UINT; phiconLarge:PHICON; phiconSmall:PHICON; 
             nIconSize:UINT):HRESULT;StdCall;external External_library name 'SHDefExtractIconA';
  function SHDefExtractIconW(pszIconFile:lpcwstr; iIndex:Longint; uFlags:UINT; phiconLarge:PHICON; phiconSmall:PHICON; 
             nIconSize:UINT):HRESULT;StdCall;external External_library name 'SHDefExtractIconW';
  function Shell_GetImageLists(var phiml:HIMAGELIST; var phimlSmall:HIMAGELIST):BOOL;StdCall;external External_library name 'Shell_GetImageLists';
  function Shell_GetCachedImageIndex(pszIconPath:lpcwstr; iIconIndex:Longint; uIconFlags:UINT):Longint;StdCall;external External_library name 'Shell_GetCachedImageIndex';
  function SHValidateUNC(hwndOwner:HWND; pszFile:LPWStr; fConnect:UINT):BOOL;StdCall;external External_library name 'SHValidateUNC';
  function PifMgr_OpenProperties(pszApp:lpcwstr; pszPIF:lpcwstr; hInf:UINT; flOpt:UINT):THANDLE;StdCall;external External_library name 'PifMgr_OpenProperties';
  function PifMgr_GetProperties(hProps:THANDLE; pszGroup:lpcstr; lpProps:pointer; cbProps:Longint; flOpt:UINT):Longint;StdCall;external External_library name 'PifMgr_GetProperties';
  function PifMgr_SetProperties(hProps:THANDLE; pszGroup:lpcstr; lpProps:pointer; cbProps:Longint; flOpt:UINT):Longint;StdCall;external External_library name 'PifMgr_SetProperties';
  function PifMgr_CloseProperties(hProps:THANDLE; flOpt:UINT):THANDLE;StdCall;external External_library name 'PifMgr_CloseProperties';
  procedure SHSetInstanceExplorer(punk:IUnknown);StdCall;external External_library name 'SHSetInstanceExplorer';
  function IsUserAnAdmin:BOOL;StdCall;external External_library name 'IsUserAnAdmin';
  function SHShellFolderView_Message(hwndMain:HWND; uMsg:UINT; lParam:lparam):lresult;StdCall;external External_library name 'SHShellFolderView_Message';
  function SHCreateShellFolderView(pcsfv:PSFV_CREATE; out ppsv:IShellView):HRESULT;StdCall;external External_library name 'SHCreateShellFolderView';
  function CDefFolderMenu_Create2(pidlFolder:LPCITEMIDLIST; hwnd:HWND; cidl:UINT;var apidl:LPCITEMIDLIST; psf:IShellFolder; 
             lpfn:LPFNDFMCALLBACK; nKeys:UINT; ahkeyClsKeys:PHKEY; out ppcm:IContextMenu):HRESULT;StdCall;external External_library name 'CDefFolderMenu_Create2';
  function SHOpenPropSheetA(pszCaption:lpcstr; ahkeys:array of HKEY; cikeys:UINT; pclsidDefault:PCLSID; pdtobj:IDataObject; 
             psb:IShellBrowser; pStartPage:lpcstr):BOOL;StdCall;external External_library name 'SHOpenPropSheetA';
  function SHOpenPropSheetW(pszCaption:lpcwstr; ahkeys:array of HKEY; cikeys:UINT; pclsidDefault:PCLSID; pdtobj:IDataObject; 
             psb:IShellBrowser; pStartPage:lpcwstr):BOOL;StdCall;external External_library name 'SHOpenPropSheetW';
  function SHFind_InitMenuPopup(hmenu:HMENU; hwndOwner:HWND; idCmdFirst:UINT; idCmdLast:UINT):IContextMenu;StdCall;external External_library name 'SHFind_InitMenuPopup';
  function SHCreateShellFolderViewEx(pcsfv:LPCSFV; out ppsv:IShellView):HRESULT;StdCall;external External_library name 'SHCreateShellFolderViewEx';
  procedure SHGetSetSettings(lpss:LPSHELLSTATE; dwMask:DWord; bSet:BOOL);StdCall;external External_library name 'SHGetSetSettings';
  procedure SHGetSettings(lpsfs:LPSHELLFLAGSTATE; dwMask:DWord);StdCall;external External_library name 'SHGetSettings';
  function SHBindToParent(pidl:LPCITEMIDLIST; riid:TREFIID; ppv:Ppointer; var ppidlLast:LPCITEMIDLIST):HRESULT;StdCall;external External_library name 'SHBindToParent';
  function SHParseDisplayName(pszName:PCWSTR; pbc:IBindCtx; var ppidl:LPITEMIDLIST; sfgaoIn:TSFGAOF; psfgaoOut:PSFGAOF):HRESULT;StdCall;external External_library name 'SHParseDisplayName';
  function SHPathPrepareForWriteA(hwnd:HWND; punkEnableModless:IUnknown; pszPath:lpcstr; dwFlags:DWord):HRESULT;StdCall;external External_library name 'SHPathPrepareForWriteA';
  function SHPathPrepareForWriteW(hwnd:HWND; punkEnableModless:IUnknown; pszPath:lpcwstr; dwFlags:DWord):HRESULT;StdCall;external External_library name 'SHPathPrepareForWriteW';
{  function SHPropStgCreate(psstg:IPropertySetStorage; fmtid:TREFFMTID; pclsid:PCLSID; grfFlags:DWord; grfMode:DWord; 
             dwDisposition:DWord; out ppstg:IPropertyStorage; puCodePage:PUINT):HRESULT;StdCall;external External_library name 'SHPropStgCreate';
  function SHPropStgReadMultiple(pps:IPropertyStorage; uCodePage:UINT; cpspec:ULONG; rgpspec:array of TPROPSPEC; rgvar:array of TPROPVARIANT):HRESULT;StdCall;external External_library name 'SHPropStgReadMultiple';
  function SHPropStgWriteMultiple(pps:IPropertyStorage; puCodePage:PUINT; cpspec:ULONG; rgpspec:array of TPROPSPEC; rgvar:array of TPROPVARIANT; 
             propidNameFirst:TPROPID):HRESULT;StdCall;external External_library name 'SHPropStgWriteMultiple';
}
  function SHCreateFileExtractIconA(pszFile:lpcstr; dwFileAttributes:DWord; riid:TREFIID; ppv:Ppointer):HRESULT;StdCall;external External_library name 'SHCreateFileExtractIconA';
  function SHCreateFileExtractIconW(pszFile:lpcwstr; dwFileAttributes:DWord; riid:TREFIID; ppv:Ppointer):HRESULT;StdCall;external External_library name 'SHCreateFileExtractIconW';
  function SHLimitInputEdit(hwndEdit:HWND; psf:IShellFolder):HRESULT;StdCall;external External_library name 'SHLimitInputEdit';
  function SHMultiFileProperties(pdtobj:IDataObject; dwFlags:DWord):HRESULT;StdCall;external External_library name 'SHMultiFileProperties';
//  function SHMapIDListToImageListIndexAsync(pts:IShellTaskScheduler; psf:IShellFolder; pidl:LPCITEMIDLIST; flags:UINT; pfn:TPFNASYNCICONTASKBALLBACK; 
//             pvData:pointer; pvHint:pointer; piIndex:plongint; piIndexSel:plongint):HRESULT;StdCall;external External_library name 'SHMapIDListToImageListIndexAsync';
  function SHMapPIDLToSystemImageListIndex(pshf:IShellFolder; pidl:LPCITEMIDLIST; piIndexSel:plongint):Longint;StdCall;external External_library name 'SHMapPIDLToSystemImageListIndex';

implementation


end.