Шлях і ім'я папки my computer - delphi sources faq

Раздолбая якось комп'ютерний вірус черговий вінчестер і на уламках написав: знання - страшна сила.

Це досить складний матеріал, тому якщо це не актуально для вашого застосування, то попередньо попереджу про те, щоб ви не витрачали ваш дорогоцінний час в нетрях складною і заплутаною інформації. Проте зацікавлених я направлю на шлях істинний.

Операційна система windows 32 грунтується на оболонці, яка використовує віртуальні папки, такі, як 'my computer' (Мій комп'ютер), 'desktop' (Робочий Стіл) і 'recycle bin' (Кошик). Деякі з них є частиною фізичної файлової системи. Іншими словами, вони мають відповідний реальний каталог у файловій системі. Це відноситься, наприклад, до системних папок 'desktop' і 'recycle bin'. Дані каталоги можуть бути використані як InitialDir в TOpenDialog, але спочатку ви повинні отримати їх фізичне розташування, яке може відрізнятися на інших комп'ютерах. Щоб дізнатися їх реальне місце розташування на локальному диску, ви повинні скористатися деякими спеціальними викликами API (дивись приклад нижче). Інші папки, типу 'my computer' і 'printers' не є частиною файлової системи, вони чисто віртуальні. Звертаю вашу увагу на те, що такі папки можна використовувати в TOpenDialog, але ніяк не в InitialDir.

Ось приклад, який показує як отримати шлях до 'recent documents' (останні документи) і використовувати його в якості InitialDir:

Я думаю вам необхідно створити клас-оболонку для цих викликів API. Вони розташовуються в shell32.dll. Найкращий порада, яку я можу дати при вивченні цього питання - копнути глибше файл ShlObj.h. Я також не програмую в C, але почерпнув звідти чимало цінної інформації.

Ось деякі константи, які вам можуть знадобитися: