Консультация № 72066
22.01.2007, 12:14
0.00 руб.
0 5 5
как узнать путь к системной директории Windows (C:\WINDOWS\system32\) без копания в реестре
Буду признателен за пример

Обсуждение

Неизвестный
22.01.2007, 12:19
общий
это ответ
Здравствуйте, source!

var
Dir: String;
begin
setlength(Dir, MaxPath);
GetWindowsDirectory(PChar(Dir), MaxPath);
Dir := String(PChar(Dir));
...
end;
Неизвестный
22.01.2007, 12:25
общий
это ответ
Здравствуйте, source!
Есть функция GetSystemDirectory.
UINT GetSystemDirectory(
LPTSTR lpBuffer, // address of buffer for system directory
UINT uSize // size of directory buffer
);
Неизвестный
22.01.2007, 12:34
общий
это ответ
Здравствуйте, source!
Поправлю предыдущий пост в том плане, что там получаем путь к папке Windows (она же WinNT), а для system32 надо использовать GetSystemDirectory:

{$APPTYPE CONSOLE}

uses Windows;

const MaxPath=65000;

var Dir: array [0..MaxPath] of char;
begin
GetSystemDirectory(Dir,MaxPath);
WriteLn(Dir);
ReadLn;
end.

У меня выдало c:\Windows\system32
Неизвестный
22.01.2007, 12:36
общий
это ответ
Здравствуйте, source!
Можно использовать вмсето прямых путей переменные среды. Например путь к system32 будет выглядеть так:

%windir%\system32

Подробнее о переменных среды можно прочитать здесь: http://oszone.net/3673
Неизвестный
24.01.2007, 10:57
общий
это ответ
Здравствуйте, source!
Сегодня уже отвечал на похожий вопрос. Можно например так:
function GetHomePath: string;
var ps : PChar;
begin
Result := ‘‘;
ps := AllocMem(256);
If GetEnvironmentVariable(‘SystemRoot‘, ps, 256) > 0 then
Result := ps + ‘\system32\‘;
// После использования освобождаем занятую память
FreeMem(ps);
end;
Форма ответа