Главная страница
    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.46 MB
Время: 0.045 c
2-1158512716
POP
2006-09-17 21:05
2006.10.08
WaitCommEvent(ComFile,Mask,@Overlapped)


2-1159123064
vain
2006-09-24 22:37
2006.10.08
запуск прграммы


9-1137021348
Buffer
2006-01-12 02:15
2006.10.08
GLScene Buffer Как узнать видна ли такая то точка или нет?


6-1146062611
Ragim
2006-04-26 18:43
2006.10.08
PGP


15-1158163659
OSokin
2006-09-13 20:07
2006.10.08
День Программиста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский