Узнать главный диск [Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Sin3v, 28 Mar 2009.

  1. Sin3v

    Sin3v Banned

    Joined:
    16 Jul 2008
    Messages:
    11
    Likes Received:
    95
    Reputations:
    9
    Нужно узнать главный локальный диск на котором лежит винда. Например у меня лежит винда в C:
     
    2 people like this.
  2. Amper128

    Amper128 New Member

    Joined:
    23 Nov 2008
    Messages:
    5
    Likes Received:
    1
    Reputations:
    0
    GETSYSTEMDRIVE
    посмотри что-то в этом роде
    щас на память не скажу точнее
     
  3. gLuk!

    gLuk! New Member

    Joined:
    27 Mar 2009
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Смотри тему "[Delphi]/[Pascal] Задай вопрос, получи ответ", последние 2-3странички. Вопрос уже задавался ..
     
  4. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    Code:
    function GetSysCD: string;
    var S: array[0..MAX_PATH] of Char;
    begin
    GetWindowsDirectory(S,SizeOf(S));
    Result:=copy(S,0,1);
    end;
     
    1 person likes this.
  5. [K4t]

    [K4t] New Member

    Joined:
    15 Feb 2009
    Messages:
    53
    Likes Received:
    4
    Reputations:
    1
    {var path: array[0..max_path]of char;}
    GetWindowsDirectory(path,max_path);
    ShowMessage(copy(path,0,2));

    По моему самый простой способ.
     
  6. procedure

    procedure Elder - Старейшина

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    Можешь сделать еще легче.

    Я делфи не знаю, но принцип думаю один и тот же:

    GetFileList("%WINDIR%");

    Таким образом я получил список каталогов в папке Windows. %WINDIR% в данном случае является переменной среды. т.е. глобальная системная переменная. Таких переменных существует много. Зная их, чаще всего не требуется знать диск с ос.

    К примеру так:

    ReadFile(@"%WINDIR%\explorer.exe");
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 eLWAux Result:=copy(S,0,1); можно заменить на result:=S[0]; :)
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А вообще самый быстрый способ - это юзая 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;