Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Расширения файлов   Найти похожие ветки 

 
Handle ©   (2006-08-24 10:11) [0]

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


 
clickmaker ©   (2006-08-24 10:15) [1]

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


 
Handle ©   (2006-08-24 10:24) [2]


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


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


 
Ketmar ©   (2006-08-24 10:27) [3]

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


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

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

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


 
Handle ©   (2006-08-24 10:41) [5]

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

Делаю так

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...  , но ничего.


 
clickmaker ©   (2006-08-24 10:55) [6]

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 11:21) [7]


> 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...



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
1-1156877965
maxistent
2006-08-29 22:59
2006.10.08
Как получить права админа для работы с реестром?


2-1158755581
Dr. Genius
2006-09-20 16:33
2006.10.08
Длина hint’ов


2-1158765927
Makcim
2006-09-20 19:25
2006.10.08
ListBox


9-1136934366
GLMaterialLibrary1
2006-01-11 02:06
2006.10.08
GLScene Как сделать тоже самое только в поток?


15-1158579571
PHPDeveloper
2006-09-18 15:39
2006.10.08
Проблема при установке Windows a