Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Расширения файлов [D7, WinXP]


Handle ©   (2006-08-24 10:11:00) 

Подскажите пожалуйста как получить все расширения файлов в системе не ассоциированных ни с одним приложением?


Handle   (2006-08-24 11:21:00) [1]


> clickmaker ©   (24.08.06 10:55) [6]


Спасибо большое.

Делаю так

var
 Res: integer;
 Path: array[0..MAX_PATH] of Char;
begin
 Path:= 'C:\WINDOWS\system32\notepad.exe' ;
 Res := ShellExecute(Application.Handle, 'open', Path, nil, nil, SW_SHOWNORMAL);
 if (Res = SE_ERR_NOASSOC) or (Res = SE_ERR_ASSOCINCOMPLETE) then begin
 ShellExecute(Application.Handle, 'open', PChar('rundll32.exe'),
 PChar('shell32.dll,OpenAs_RunDLL ' + Path) , nil, SW_SHOWNORMAL);
end;


То есть если у файла нет "хозяина" то запускается диалог Open With...


clickmaker   (2006-08-24 10:55:00) [2]

Res := ShellExecute(Application.Handle, 'open', PChar(Path), nil, nil, SW_SHOWNORMAL);
if (Res = SE_ERR_NOASSOC) or (Res = SE_ERR_ASSOCINCOMPLETE) then begin
 Path := 'shell32.dll,OpenAs_RunDLL ' + Path;

 ShellExecute(Application.Handle, 'open', 'Rundll32.exe', PChar(Path),nil,SW_SHOWNORMAL);
end;


Handle   (2006-08-24 10:41:00) [3]

Проблема собственно вот в чём:

Делаю так

if  ShellExecute(0, 0, PChar('filename'), nil, nil, SW_SHOWNORMAL) = 0 then
          begin
           ShellExecute(Application.Handle, 'open', PChar('rundll32.exe'),
           PChar('shell32.dll,OpenAs_RunDLL ' + PChar('filename'), nil, SW_SHOWNORMAL)


Если расрирение файла типа DLL, RES и т.д. то должен появится диалог типа Open With...  , но ничего.


StriderMan   (2006-08-24 10:36:00) [4]

имеется ввиду существующих на дисках или вообще?
если первое, то нужно бегать по всем дискам (FindFirst, FindNext, FindClose) и для каждого файла искать запись в [1] (TRegistry).  

Если второе, то [3], смысла не вижу перебирать всевозможные варианты расширений, на это не хватит многих лет, не считая отладку :)


Ketmar   (2006-08-24 10:27:00) [5]

ого. учитывая максимальную длину имени файла, это ОЧЕНЬ дофига получится. а если вспомнить, что в unicode имя и побольше может быть... однако, памяти не хватит всё это хранить.


Handle   (2006-08-24 10:24:00) [6]


> clickmaker ©   (24.08.06 10:15) [1]


Как же всё это дело обработать и вывести например в TStringList


clickmaker   (2006-08-24 10:15:00) [7]

HKKEY_CLASSES_ROOT
.xxx -> (Default) -> .XXXFile, у которых нет Shell -> Open -> Command


Наверх

Титульная страница Поиск, карта сайта Написать письмо