2013-03-21 4 views
1

응용 프로그램 (ex : excel.exe)에 대해 응용 프로그램 (excel.exe)에 모든 확장명 (예 : .xlt, .xlsx 등)이 등록되어 있는지 알고 싶습니다. . 그것을 성취하는 방법?응용 프로그램에 등록 된 확장명 목록

플랫폼 : 윈도우

언어 : C/C++/C#

답변

1

불행하게도, 파일 확장자 등록이 작업을하기 위해 약간 복잡 할 수 있습니다. 찾고있는 정보를 추출 할 수있는 명확한 API는 없습니다. IQueryAssociations 인터페이스가 있지만 쿼리 방법에있어 많은 유연성을 제공하지는 않습니다. 1 대 1 쿼리가 아니지만 대신 many-to-1 쿼리를 찾고 있습니다. 따라서 해당 정보를 레지스트리에서 직접 파헤쳐 야합니다.

RegOpenKeyEx()을 사용하여 HKEY_CLASSES_ROOT 하이브를 열고 RegEnumKeyEx() 인 모든 바로 밑의 하위 키를 열거하고 마침표로 시작하는 키 이름을 찾습니다. 그러면 알려진 파일 확장명 목록이 제공됩니다.

HKEY_CLASSES_ROOT\<ext> 키를 들어, 확인 :

  1. 공백이 아닌 문자열을 포함하는 (Default) 값. 파일 확장명은 ProgID입니다. HKEY_CLASSES_ROOT\<ProgID> 키를 열고 응용 프로그램 경로가 포함 된 shell\<verb>\command 하위 키가 있는지 확인할 수 있습니다 (복수 <verb> 값이있을 수 있으므로이를 열거해야합니다). 없는 경우 ProgID 키에 CLSID 하위 키가 있는지 확인하십시오. 있으면 (Default) 값은 해당 ProgID와 관련된 모든 것을 처리하는 COM 개체의 CLSID이됩니다. HKEY_CLASSES_ROOT\CLSID\<CLSID> 키를 열고 해당 COM 개체를 소유 한 EXE 또는 DLL 파일의 전체 경로가 포함 된 InprocHandler, InprocHandler32, InprocServer 또는 InprocServer32 하위 키가 있는지 확인할 수 있습니다.

  2. a PersistentHandler 하위 키. 있으면 해당 (Default) 값은 해당 파일 확장명을 처리하는 COM 개체의 CLSID이됩니다. 필요에 따라 CLSID를 확인할 수 있습니다.

  3. OpenWithProgIds 하위 키. 있으면 필요에 따라 확인할 수있는 ProgID 목록이 포함됩니다.

  4. OpenWithList 하위 키. 존재하는 경우 등록 된 앱 이름 목록을 포함합니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<AppName> 키를 열면 각 앱의 전체 경로를 확인할 수 있습니다.

다른 몇 가지 가능성이 있습니다 (ShellEx 키, DDE 키, 다른 Shell 관련 COM 개체 키 등).하지만 그 점을 생각해보십시오. 주어진 파일 확장자를 처리하는 앱을 파악하기 위해 잠재적으로 파기가 많습니다.

관련 문제