Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Куда установлена система [D7, WinXP]


dron-s ©   (2005-04-23 12:44:00) 

Как узнать букву диска, куда была установлена система?


Набережных С.   (2005-04-24 11:38:00) [1]


> Юрий Зотов ©   (24.04.05 01:11) [15]

Может, может:)))Попробуйте вот такой пример:

procedure TForm1.Button1Click(Sender: TObject);
var
 SI: TStartupInfo;
 PI: TProcessInformation;
 Env: Char;
begin
 FillChar(SI, SizeOf(SI), 0);
 SI.cb:=SizeOf(SI);
 Env:=#0;
 if CreateProcess(nil, 'SysDrv.exe', nil, nil, false,
      CREATE_NEW_CONSOLE, @Env, nil, SI, PI) then
 begin
   CloseHandle(PI.hProcess);
   CloseHandle(PI.hThread);
 end else
   RaiseLastOSError;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 SI: TStartupInfo;
 PI: TProcessInformation;
 Buf: array[0..15] of Char;
 C: Char;
begin
 GetEnvironmentVariable('SYSTEMDRIVE', @Buf, SizeOf(Buf));
 C:=buf[0];
 Buf[0]:='U';
 SetEnvironmentVariable('SYSTEMDRIVE', @Buf);
 try
   FillChar(SI, SizeOf(SI), 0);
   SI.cb:=SizeOf(SI);
   if CreateProcess(nil, 'SysDrv.exe', nil, nil, false,
        CREATE_NEW_CONSOLE, nil, nil, SI, PI) then
   begin
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
   end else
     RaiseLastOSError;
 finally
   Buf[0]:=C;
   SetEnvironmentVariable('SYSTEMDRIVE', @Buf);
 end;
end;

Вот запускаемое приложение:

program SysDrv;

{$APPTYPE CONSOLE}

uses
 Windows,
 SysUtils;

function GetSystemDrive1: char;
var
Buff: array[0..2] of char;
begin
if GetEnvironmentVariable('SYSTEMDRIVE', @Buff, 3) = 2 then
  Result := Buff[0]
else
  Result := #0
end;

function GetSystemDrive2: char;
var
Buff: array[0..1023] of char;
begin
 FillChar(Buff, SizeOf(Buff), 0);
 GetWindowsDirectory(@Buff, SizeOf(Buff));
 Result:=Buff[0];
end;

var
 c: Char;
begin
 c:=GetSystemDrive1;
 if c <> #0 then WriteLn('1 System drive: ' + c)
 else WriteLn('1 System drive: unknown');
 c:=GetSystemDrive2;
 if c <> #0 then WriteLn('2 System drive: ' + c)
 else WriteLn('2 System drive: unknown');
 ReadLn;
end.

Разумеется, вероятность невелика, но зачем, если риска ничего не стоит избежать?


Marser   (2005-04-24 01:34:00) [2]


trop   (23.04.05 21:24) [14]

Под PChar нужно ещё память выделить. Иначе [15].


Юрий Зотов   (2005-04-24 01:11:00) [3]

> Набережных С. ©   (23.04.05 15:50) [13]
ИМХО, эту переменную система сама и выставляет. Так что ничего другого там оказаться не может.

> trop   (23.04.05 21:24) [14]
И получили Access Violation.


trop   (2005-04-23 21:24:00) [4]

Можно сделать еще проще:
Procedure getsysdick;
var
p:Pchar;
Disk:string[1];
begin
getwindowsdirectory(p, max_path);
disk:=strpas(p)[1];
end;


Набережных С.   (2005-04-23 15:50:00) [5]

Имхо, на переменные окружения завязываться не стоит - мало ли что там может оказаться. GetWindowsDirectory вроде как для того и предназчена. Ну или там GetSystemDirectory.


dron-s   (2005-04-23 14:11:00) [6]

Огромное спасибо, Юрий!!!


Юрий Зотов   (2005-04-23 14:01:00) [7]

> dron-s ©   (23.04.05 13:34) [8]

function GetSystemDrive: char;
var
 Buff: array[0..2] of char;
begin
 if GetEnvironmentVariable('SYSTEMDRIVE', @Buff, 3) = 2 then
   Result := Buff[0]
 else
   Result := #0
end;


dron-s   (2005-04-23 13:45:00) [8]

I>
> загрузочную запись


и причём тут загрузочная запись...<


Eraser   (2005-04-23 13:36:00) [9]

dron-s ©
Как узнать букву диска, куда была установлена система?


Посмотреть загрузочную запись, а там уже в зависимости от системы. В XP на загрузочном диске должен быть файл boot.ini.


dron-s   (2005-04-23 13:34:00) [10]


> Юрий Зотов


Можно пример... срочно надо...


Юрий Зотов   (2005-04-23 13:24:00) [11]

Гм... а что, разве нельзя взять диск из GetWindowsDirectory, или из SHGetFolderPath, или из переменных окружения SYSTEMROOT или SYSTEMDRIVE?


dron-s   (2005-04-23 13:09:00) [12]


> Неправда.
> Диска C может и не быть.


Вот и про тоже...


Gero   (2005-04-23 13:05:00) [13]


> Одназначно на диск С

Неправда.
Диска C может и не быть.


dron-s   (2005-04-23 13:03:00) [14]


> Какая система?


Windows XP...


dron-s   (2005-04-23 13:02:00) [15]

Да не обязательно на диск С, может на любой другой диск, например на Е!!!! Как определить что она установлена на диск Е?


Anatoly Podgoretsky   (2005-04-23 12:56:00) [16]

Одназначно на диск С, остальные части где угодно и не обязательно на одном диске. Тебя какая часть интересует?


VMcL   (2005-04-23 12:49:00) [17]

Какая система?


Наверх

Титульная страница Поиск, карта сайта Написать письмо