Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизКуда установлена система Найти похожие ветки
← →
dron-s © (2005-04-23 12:44) [0]Как узнать букву диска, куда была установлена система?
← →
VMcL © (2005-04-23 12:49) [1]Какая система?
← →
Anatoly Podgoretsky © (2005-04-23 12:56) [2]Одназначно на диск С, остальные части где угодно и не обязательно на одном диске. Тебя какая часть интересует?
← →
dron-s © (2005-04-23 13:02) [3]Да не обязательно на диск С, может на любой другой диск, например на Е!!!! Как определить что она установлена на диск Е?
← →
dron-s © (2005-04-23 13:03) [4]
> Какая система?
Windows XP...
← →
Gero © (2005-04-23 13:05) [5]
> Одназначно на диск С
Неправда.
Диска C может и не быть.
← →
dron-s © (2005-04-23 13:09) [6]
> Неправда.
> Диска C может и не быть.
Вот и про тоже...
← →
Юрий Зотов © (2005-04-23 13:24) [7]Гм... а что, разве нельзя взять диск из GetWindowsDirectory, или из SHGetFolderPath, или из переменных окружения SYSTEMROOT или SYSTEMDRIVE?
← →
dron-s © (2005-04-23 13:34) [8]
> Юрий Зотов
Можно пример... срочно надо...
← →
Eraser © (2005-04-23 13:36) [9]dron-s ©
Как узнать букву диска, куда была установлена система?
Посмотреть загрузочную запись, а там уже в зависимости от системы. В XP на загрузочном диске должен быть файл boot.ini.
← →
dron-s © (2005-04-23 13:45) [10]I>
> загрузочную запись
и причём тут загрузочная запись...<
← →
Юрий Зотов © (2005-04-23 14:01) [11]> 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 14:11) [12]Огромное спасибо, Юрий!!!
← →
Набережных С. © (2005-04-23 15:50) [13]Имхо, на переменные окружения завязываться не стоит - мало ли что там может оказаться. GetWindowsDirectory вроде как для того и предназчена. Ну или там GetSystemDirectory.
← →
trop (2005-04-23 21:24) [14]Можно сделать еще проще:
Procedure getsysdick;
var
p:Pchar;
Disk:string[1];
begin
getwindowsdirectory(p, max_path);
disk:=strpas(p)[1];
end;
← →
Юрий Зотов © (2005-04-24 01:11) [15]> Набережных С. © (23.04.05 15:50) [13]
ИМХО, эту переменную система сама и выставляет. Так что ничего другого там оказаться не может.
> trop (23.04.05 21:24) [14]
И получили Access Violation.
← →
Marser © (2005-04-24 01:34) [16]
trop (23.04.05 21:24) [14]
Под PChar нужно ещё память выделить. Иначе [15].
← →
Набережных С. © (2005-04-24 11:38) [17]
> Юрий Зотов © (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.
Разумеется, вероятность невелика, но зачем, если риска ничего не стоит избежать?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c