Смотри тему "[Delphi]/[Pascal] Задай вопрос, получи ответ", последние 2-3странички. Вопрос уже задавался ..
Code: function GetSysCD: string; var S: array[0..MAX_PATH] of Char; begin GetWindowsDirectory(S,SizeOf(S)); Result:=copy(S,0,1); end;
{var path: array[0..max_path]of char;} GetWindowsDirectory(path,max_path); ShowMessage(copy(path,0,2)); По моему самый простой способ.
Можешь сделать еще легче. Я делфи не знаю, но принцип думаю один и тот же: GetFileList("%WINDIR%"); Таким образом я получил список каталогов в папке Windows. %WINDIR% в данном случае является переменной среды. т.е. глобальная системная переменная. Таких переменных существует много. Зная их, чаще всего не требуется знать диск с ос. К примеру так: ReadFile(@"%WINDIR%\explorer.exe");
А вообще самый быстрый способ - это юзая PEB, найти полные пути до имен загруженных библиотек. Первые либы - это ntdll и kernel32, а они всегда находятся в папке с виндой. И вот просто взять первую букву этого пути, вот и получится буква системного диска. Пример: Code: function SysDisk:char;assembler; asm mov eax,FS:[30h] // PEB mov eax,[eax+12] // PPEB_LDR_DATA mov eax,[eax+28] // LIST_ENTRY mov eax,[eax] // LDR_DATA_TABLE_ENTRY mov eax,[eax+24] // FULL_NAME mov al,[eax] end;