Sciezka do Program Files

0

Witam

Prosze o wskazówkę - jak wydobyć z systemu aktualną ścieżkę do Program Files. Chcę aby mój program odczytywał sobie jej ustawienie i wpisywał się tam sam w procesie instalowania.

Nawiasem mowiac - forum ma FATALNĄ wyszukiwarkę! Nie wiem czy ktoś już pisał na ten temat co ja, bo dostalem jako wynik wyszukiwania 122 strony całkiem bezsensownych wyników i wymiękłem po przejrzeniu ich do 14 strony. Twórcy Coyota pomyślcie nad sensownym wyszukiwaniem! Jakby co - pomogę w PHPie :)

Dzieki z góry

0

http://4programmers.net/Forum/viewtopic.html?id=46507
Z tym ze wywolanie w funkcji dla CSIDL_PROGRAMS

0

No coz - to juz SAM sprawdzilem ZANIM napisalem na forum. Niestety, zwraca to sciezke do Menu Start/Programy (wygenerowany dowod: C:\Documents and Settings\Romek\Menu Start\Programy) a nie do C:\Program Files - chociaz to najbardziej prawdopodobna ale nie jedyna mozliwa lokalizacja. Chcialbym zeby moj program nie zawracal glowy i sprawdzal ta lokalizacje chocby byla najglupsza :)

Dzieki za juz i prosze o jeszcze :)

Romek

0
  if ListBox1.Selected[0] then Edit1.Text:=PobierzSciezke(CSIDL_DESKTOPDIRECTORY);
  if ListBox1.Selected[1] then Edit1.Text:=PobierzSciezke(CSIDL_FONTS);
  if ListBox1.Selected[2] then Edit1.Text:=PobierzSciezke(CSIDL_NETHOOD);
  if ListBox1.Selected[3] then Edit1.Text:=PobierzSciezke(CSIDL_PERSONAL);
  if ListBox1.Selected[4] then Edit1.Text:=PobierzSciezke(CSIDL_PROGRAMS);
  if ListBox1.Selected[5] then Edit1.Text:=PobierzSciezke(CSIDL_RECENT);
  if ListBox1.Selected[6] then Edit1.Text:=PobierzSciezke(CSIDL_SENDTO);
  if ListBox1.Selected[7] then Edit1.Text:=PobierzSciezke(CSIDL_STARTMENU);
  if ListBox1.Selected[8] then Edit1.Text:=PobierzSciezke(CSIDL_STARTUP);
  if ListBox1.Selected[9] then Edit1.Text:=PobierzSciezke(CSIDL_TEMPLATES);

//to fragment oryginalu Adama

0

rownie dobrze mozesz pobrac scizke do windowsa i pobrac litere dysku, potem dodajesz program files i masz. W wiekszosci wypadkow to dziala.
info w FAQ

0

a GetSpecialFolder czy jakos tak w WinApi??

0

Hmmmm

Szanowni Koledzy chyba nie zwracaja uwagi na istote problemu.

Istota nie jest uzycie funkcji SHGetSpecialFolderLocation czy funkcji Adama, ale PARAMETR ktory odnosi sie do C:\Program Files. Niestety poki co nie znalazlem jego nazwy :-(

W podanym przykladzie Adama sa uzyte rozne identyfikatory/parametry, zaden nie jest jednak powiazany z katalogiem o ktory mi chodzi. Byc moze jakims rozwiazaniem jest pobranie dysku z katalogiem windowsa, no ale... sam mialem wiele lat ustawione Program Files calkiem gdzie indziej niz windows i mialy inna nazwe!

Oczywiscie, moge sobie odpowiedziec - przeszukaj wszystkie dyski :))) wolalbym jednak chocby odrobine madrzejsza podpowiedz.

Jak wyzej - dzieki za juz i prosze o wiecej.

Romek

0

Kolega Gal Anonim przytoczyl pozycje gdzie po raz kolejny pojawiaja sie identyfikatory wszystkich folderow specjalnych windows ale NIE Program Files. Przytocze to co tam jest, zadna z opcji nie dotyczy Program Files.

uses ShlObj;

function GetFolderPath(Folder: Integer): string;
var
Path: array[0..MAX_PATH] of Char;
begin
SHGetSpecialFolderPath(0, Path, Folder , False);
Result := Path;
end;

Przykład:
AutoStart: GetFolderPath(CSIDL_STARTUP);
Dane aplikacji: GetFolderPath(CSIDL_APPDATA);
Kosz'+GetFolderPath(CSIDL_BITBUCKET);
Ikony dla Panelu Sterowania: GetFolderPath(CSIDL_CONTROLS);
Cookies (Internet): GetFolderPath(CSIDL_COOKIES);
Wirtualny pulpit: GetFolderPath(CSIDL_DESKTOP);
Fizyczny pulpit: GetFolderPath(CSIDL_DESKTOPDIRECTORY);
Mój komputer: GetFolderPath(CSIDL_DRIVES);
Ulubione: GetFolderPath(CSIDL_FAVORITES);
Czcionki: GetFolderPath(CSIDL_FONTS);
Historia (Internet): GetFolderPath(CSIDL_HISTORY);
Wirtualny internet: GetFolderPath(CSIDL_INTERNET);
Tymczasowy internet: GetFolderPath(CSIDL_INTERNET_CACHE);
Otoczenie sieciowe: GetFolderPath(CSIDL_NETHOOD);
Dokumenty: GetFolderPath(CSIDL_PERSONAL);
Drukarki: GetFolderPath(CSIDL_PRINTERS);

//----------------------------------------------------------
// pozycja podejrzewana o to ze zwraca sciezke do
// program files a tak naprawde zwraca (co napisano) sciezke
// do Sekcji Programy w Menu start.
// ---------------------------------------------------------
Programy Menu Start: GetFolderPath(CSIDL_PROGRAMS);

Ostanio używane dokumenty: GetFolderPath(CSIDL_RECENT);
Wyślij do...: GetFolderPath(CSIDL_SENDTO);
Opcje Menu Start: GetFolderPath(CSIDL_STARTMENU);
Wzorce dokumentów: GetFolderPath(CSIDL_TEMPLATES);

uffffffffff a w Biblii mowia, ze szukajcie a znajdziecie...

:)

0

Ścieżka ta znajduje się w rejestrze, w (chyba) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current Version\Shell Folders (Piszę z pamięci). Na swissdelphicenter.com znajdziesz dokładniejszą odpowiedź.

0

Wypis z MSDN:

CSIDL_PROGRAM_FILES (0x0026)

CSIDL_PROGRAM_FILES_COMMON (0x002b)

Dostępne tylko gdy w systemie jest IE 5.0 już wyższy...

0

Można pobrać ścieżkę do Windowsa, a nastęnie odczytać z niej literę dysku. Do tej litery wystarczy później dopidać 'Program Files'.

0

Dzieki wszystkim, mam nadzieje, ze to sie nie tylko mi przyda.

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1