![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Куда установлена система [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]Какая система?