Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как получить описание типа файла по его расширению - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Borland c++ 3.1 на Windows7 64-bit через DosBox http://www.cyberforum.ru/cpp-beginners/thread514453.html
программа выводит на экран всякие линии, кружочки и т.п одним словом графику. у меня W7 64битка, запускаю через Borland c++ 3.1 с помощью DosBox. сначала все работало хорошо, компилировало, запускало...
C++ помогите отличить разыменование от указателя люди помогите отличить разыменование от указателя.дайте ссылку ,книгу хот что угодно.я читал много книг но ни в одном не нашел чтоб там было и разыменование и указатель.у всех один ест а другой нету( http://www.cyberforum.ru/cpp-beginners/thread514452.html
C++ Даны два неотрицательных числа a и b. Найти их среднее геометрическое...
Даны два неотрицательных числа a и b. Найти их среднее геометрическое, т. е. квадратный корень из их произведения: (a·b)1/2
Теория вероятности C++
Для участия в судебном процессе из 20 потенциальных кандидатов, среди которых 8 женщин и 12 мужчин, выбирают 6 присяжных заседателей. После отбора в группе осталась только 1 женжина. Имеется ли...
C++ Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и... http://www.cyberforum.ru/cpp-beginners/thread514390.html
Дан текст и некоторые два слова. Определить, сколько раз они входят в текст и сколько раз они располагаются непосредственно друг за другом.
C++ Найти объем куба как писать?? Дана длина ребра куба a. Найти объем куба V = a3 и площадь его поверхности S = 6·a2?? подробнее

Показать сообщение отдельно
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1

Как получить описание типа файла по его расширению - C++

08.03.2012, 16:23. Просмотров 684. Ответов 1
Метки (Все метки)

Подскажите пожалуйста какие есть функции (например WINAPI) с помощью которых можно получить описание типа файла (т.е. описание которое дает программа с которой файл ассоциирован в системе, например *.txt - текстовый документ, и т.д.).

Я нашел один способ - данные из реестра. Но вот только строка с описанием типа файла на английском языке. И почему-то не удается получить описание *.xml файла (как я понял что-то не так с функцией RegQueryValueEx. Ветку HKEY_CLASSES_ROOT\.xml читает нормально, а вот HKEY_CLASSES_ROOT\xmlfile не хочет.), получаю пустую строку. Вот часть кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CString type = PathFindExtension(m_File);
HKEY rKey;
 
if (type == "")
    type = "File";
else
{
    if(RegOpenKeyEx(HKEY_CLASSES_ROOT, type, 0, KEY_QUERY_VALUE, &rKey) == ERROR_SUCCESS)
    {
        HKEY fKey;
        DWORD pcbData = 255;
        char* pvData = new char[pcbData];
 
        RegQueryValueEx(rKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData);
        if(RegOpenKeyEx(HKEY_CLASSES_ROOT, pvData, 0, KEY_QUERY_VALUE, &fKey) == ERROR_SUCCESS)
        {
            memset(pvData, 0, pcbData);
            RegQueryValueEx(fKey, "", NULL, NULL, (LPBYTE)pvData, &pcbData);
            type = pvData;
        }
        else
            type = "";
        RegCloseKey(fKey);
        delete[] pvData;
    }
    else
        type = PathFindExtension(m_File);
    RegCloseKey(rKey);
}
m_ListCtrl->SetItemText(nNum, 1, type);
Вот данные реестра:
Код
[HKEY_CLASSES_ROOT\.xml]
@="xmlfile"
"Content Type"="text/xml"
"PerceivedType"="text"

[HKEY_CLASSES_ROOT\.xml\OpenWithList]

[HKEY_CLASSES_ROOT\.xml\OpenWithList\vsta.exe]
@=""

[HKEY_CLASSES_ROOT\.xml\OpenWithList\winword.exe]
@=""

[HKEY_CLASSES_ROOT\.xml\OpenWithProgids]
"InfoPath.Document.3"=""
"VSTA.xml.8.0"=""
"VisualStudio.xml.10.0"=""

[HKEY_CLASSES_ROOT\.xml\PersistentHandler]
@="{7E9D8D44-6926-426F-AA2B-217A819A5CCE}"
Код
[HKEY_CLASSES_ROOT\xmlfile]
@="XML Document"
"EditFlags"=hex:00,00,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
  00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
  32,00,5c,00,6d,00,73,00,78,00,6d,00,6c,00,33,00,72,00,2e,00,64,00,6c,00,6c,\
  00,2c,00,2d,00,31,00,00,00

[HKEY_CLASSES_ROOT\xmlfile\BrowseInPlace]

[HKEY_CLASSES_ROOT\xmlfile\CLSID]
@="{48123BC4-99D9-11D1-A6B3-00C04FD91555}"

[HKEY_CLASSES_ROOT\xmlfile\DefaultIcon]
@="\"%1\""

[HKEY_CLASSES_ROOT\xmlfile\shell]
@="open"

[HKEY_CLASSES_ROOT\xmlfile\shell\edit]

[HKEY_CLASSES_ROOT\xmlfile\shell\edit\command]
@="\"C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSOXMLED.EXE\" /verb edit \"%1\""

[HKEY_CLASSES_ROOT\xmlfile\shell\open]

[HKEY_CLASSES_ROOT\xmlfile\shell\open\command]
@="\"C:\\Program Files\\Common Files\\Microsoft Shared\\OFFICE14\\MSOXMLED.EXE\" /verb open \"%1\""

[HKEY_CLASSES_ROOT\xmlfile\ShellEx]

[HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler]
@="{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru