| 
| 
 | Вопрос # 915/ вопрос открыт / | 
 |  Здравствуйте!Как использовать %SystemRoot% в программе?
 То есть надо открыть файл из этого какталога. Путь в виде \'C:\Windows\' не известен программе. Чтение из реестра ключа Software\Microsoft\Windows NT\CurrentVersion\SystemRoot нельзя использовать, так как там может быть ложное значение!?
 
|  |   Вопрос задал: Ilia Ermakov (статус: 1-ый класс)Вопрос отправлен: 11 сентября 2007, 22:36
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, Ilia Ermakov!Это очень легко. Есть пару функций, которые возвращают пути к папкам Windows и Windows\System32. См. пример в приложении.
 Приложение:Переключить в обычный режим Type TSystemPath=(Desktop,StartMenu,Programs,Startup,Personal, WinRoot, WinSys,Temp);... Function GetSystemPath(SystemPath:TSystemPath):string;  var p:pchar;  begin    with TRegistry.Create do        try           RootKey := HKEY_CURRENT_USER;           OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', True);           case SystemPath of              Desktop: Result:=ReadString('Desktop');              StartMenu:Result:=ReadString('Start Menu');              Programs:Result:=ReadString('Programs');              Startup:Result:=ReadString('Startup');              Personal:Result:=ReadString('Personal');              WinRoot:begin                         GetMem(p,255);                         GetWindowsDirectory(p,254);                         result:=Strpas(p);                         Freemem(p);                      end;              WinSys:begin                        GetMem(p,255);                        GetSystemDirectory(p,254);                        result:=Strpas(p);                        Freemem(p);                     end;             Temp: begin                        GetMem(p,255);                        GetTempPath(254, p);                        result:=Strpas(p);                        Freemem(p);                     end;           end;        finally           CloseKey;           free;        end;     if (result<>'') and (result[length(result)]<>'\') then result:=result+'\';  end;
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 12 сентября 2007, 15:21
 Оценка за ответ: 5
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |