Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Диск с системными папками


Автор: Михалыч 14.6.2009, 18:18
Подскажите как узнать букву диска на который установлена ОС,например мне надо узнать полный путь до system32\notepad.exe

Автор: Данкинг 14.6.2009, 18:29
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders

Автор: kami 14.6.2009, 18:29
Цитата(Михалыч @  14.6.2009,  18:18 Найти цитируемый пост)
как узнать букву диска на который установлена ОС

Цитата(Михалыч @  14.6.2009,  18:18 Найти цитируемый пост)
мне надо узнать полный путь до system32\notepad.exe

Несколько разные задачи, не кажется?
Система может быть установлена не в папку Windows, а к примеру в mySuperWinXP.
По второму вопросу:
http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx с CSIDL=CSIDL_SYSTEM

Автор: Данкинг 14.6.2009, 18:32
Цитата(kami @  14.6.2009,  19:29 Найти цитируемый пост)
Система может быть установлена не в папку Windows

А где написано, что Михалыч хочет найти именно папку Windows? smile 

Автор: kami 14.6.2009, 18:36
он хочет узнать 
Цитата(Михалыч @  14.6.2009,  18:18 Найти цитируемый пост)
полный путь до system32\notepad.exe
.
Если покажете пример, где system32 (официальная, само собой. обозвать любую папку этим именем может любой) находится не в папке, в которую установлена система - обещаю что-нибудь с собой сделать  smile.

Автор: Данкинг 14.6.2009, 18:55
kami, всё правильно, только снова не понял, при чём тут название папки, в которую установлена система. smile Ну вот в реестре мы и прочитали инфу о том, куда она установлена...

Автор: kami 14.6.2009, 19:13
Цитата(Данкинг @  14.6.2009,  18:55 Найти цитируемый пост)
 Ну вот в реестре мы и прочитали инфу о том, куда она установлена...

Дык, когда я писал ответ, Вашего не видел (тема была еще в Общих вопросах).
Я не против - пускай читает из реестра, по большому счету это без разницы.

p.s. на сайте Delphimaster как-то был холивар (вроде по этой же теме, или близко к ней) по поводу того, чем правильнее пользоваться - функциями API или реестром. К окончательному решению (afair) не пришли smile

Добавлено через 3 минуты и 16 секунд
А начал я за это говорить потому, что телепатор мне сообщил о том, что Михалыч скорее всего считает, что узнав 
Цитата(Михалыч @  14.6.2009,  18:18 Найти цитируемый пост)
букву диска на который установлена ОС
 и добавив к ней "стандартные" Windows\System32 можно решить все проблемы.

Автор: Keeper89 14.6.2009, 19:28
Цитата(kami @  14.6.2009,  20:13 Найти цитируемый пост)
А начал я за это говорить потому, что телепатор мне сообщил о том, что Михалыч скорее всего считает, что узнав 
Цитата(Михалыч @  14.6.2009,  18:18 Найти цитируемый пост)
букву диска на который установлена ОС
 и добавив к ней "стандартные" Windows\System32 можно решить все проблемы.

Я тоже так подумал smile Иначе зачем задавать 2 разных по сути вопроса...

Продолжая холиварную  smile тему, скажу, что я бы воспользовался API, нежели реестром. Далее все ИМХО:
  • Плюс функции - не надо думать по поводу прав пользователей. Так, программа при использовании реестра вылетит, если брать значения реестра не указав режим только для чтения для ограниченных пользователей в ОС Windows.
  • Плюс реестра - обращаться к реестру куда проще, чем к функции API. Нет ни выделения и освобождения памяти, ни специфических (для тесно не работающих с ОС) типов данных (тот же PChar).
Так что, каждый выбирает исходя из своих предпочтений. Может кто еще дополнит мое мнение или опровергнет  smile 

Автор: Данкинг 14.6.2009, 19:29
Цитата(kami @  14.6.2009,  20:13 Найти цитируемый пост)
А начал я за это говорить потому, что телепатор мне сообщил о том,

А, вот теперь понял. smile В общем, ждём, что ответит топикстартер.

Автор: Михалыч 14.6.2009, 19:33
Сделал так ,если некорректно так узнать путь ,то подскажите
Код

function GetSysDir(): String;
var
  buffer: String;
  len: UINT;
begin
  SetLength(buffer, MAX_PATH + 1);
  len := GetSystemDirectory(PAnsiChar(buffer), MAX_PATH);
  SetLength(buffer, len);
  GetSysDir := buffer;
end;


Код

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Edit2.Text := GetSysDir()+'\'+'notepad.exe';
end;

Автор: kami 14.6.2009, 19:43
Цитата(Михалыч @  14.6.2009,  19:33 Найти цитируемый пост)
если некорректно 

Цитата(Михалыч @  14.6.2009,  19:33 Найти цитируемый пост)
GetSystemDirectory

Ха!
Слона то мы и не приметили...
Правильно, почему нет.
Есть пара мелких рекомендаций по коду, но к сути вопроса и получаемому результату не относящихся.

Автор: Данкинг 14.6.2009, 20:45
Вопрос решён, как я понимаю. smile 

Автор: Михалыч 14.6.2009, 20:51
Да,всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)