Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.039 c
3-1115457174
Geka
2005-05-07 13:12
2005.06.14
Удаление одинаковых позиций SQL


4-1113731899
3k
2005-04-17 13:58
2005.06.14
Добавить текст в чужой RichEdit 2.0


14-1116842750
Petr V. Abramov
2005-05-23 14:05
2005.06.14
Несправедливость!


4-1114245891
dron-s
2005-04-23 12:44
2005.06.14
Куда установлена система


14-1116840081
DiamondShark
2005-05-23 13:21
2005.06.14
Вопрос по CSS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский