응용 프로그램 (ex : excel.exe)에 대해 응용 프로그램 (excel.exe)에 모든 확장명 (예 : .xlt, .xlsx 등)이 등록되어 있는지 알고 싶습니다. . 그것을 성취하는 방법?응용 프로그램에 등록 된 확장명 목록
플랫폼 : 윈도우
언어 : C/C++/C#
응용 프로그램 (ex : excel.exe)에 대해 응용 프로그램 (excel.exe)에 모든 확장명 (예 : .xlt, .xlsx 등)이 등록되어 있는지 알고 싶습니다. . 그것을 성취하는 방법?응용 프로그램에 등록 된 확장명 목록
플랫폼 : 윈도우
언어 : C/C++/C#
불행하게도, 파일 확장자 등록이 작업을하기 위해 약간 복잡 할 수 있습니다. 찾고있는 정보를 추출 할 수있는 명확한 API는 없습니다. IQueryAssociations
인터페이스가 있지만 쿼리 방법에있어 많은 유연성을 제공하지는 않습니다. 1 대 1 쿼리가 아니지만 대신 many-to-1 쿼리를 찾고 있습니다. 따라서 해당 정보를 레지스트리에서 직접 파헤쳐 야합니다.
RegOpenKeyEx()
을 사용하여 HKEY_CLASSES_ROOT
하이브를 열고 RegEnumKeyEx()
인 모든 바로 밑의 하위 키를 열거하고 마침표로 시작하는 키 이름을 찾습니다. 그러면 알려진 파일 확장명 목록이 제공됩니다.
각 HKEY_CLASSES_ROOT\<ext>
키를 들어, 확인 :
공백이 아닌 문자열을 포함하는 (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
하위 키가 있는지 확인할 수 있습니다.
a PersistentHandler
하위 키. 있으면 해당 (Default)
값은 해당 파일 확장명을 처리하는 COM 개체의 CLSID
이됩니다. 필요에 따라 CLSID를 확인할 수 있습니다.
OpenWithProgIds
하위 키. 있으면 필요에 따라 확인할 수있는 ProgID 목록이 포함됩니다.
OpenWithList
하위 키. 존재하는 경우 등록 된 앱 이름 목록을 포함합니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<AppName>
키를 열면 각 앱의 전체 경로를 확인할 수 있습니다.
다른 몇 가지 가능성이 있습니다 (ShellEx 키, DDE 키, 다른 Shell 관련 COM 개체 키 등).하지만 그 점을 생각해보십시오. 주어진 파일 확장자를 처리하는 앱을 파악하기 위해 잠재적으로 파기가 많습니다.