Определить зарегистрированную заявку на продление - PullRequest
2 голосов
/ 03 июня 2009

У меня есть расширение файла, и я хотел бы получить имя приложения (если оно есть), которое будет вызываться при выполнении ShellExecute для файла этого типа. Это приложение WTL / C ++. Есть ли какой-нибудь пример кода, который это делает?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 03 июня 2009

TWK

Возможно, вы ищете функцию Win32 AssocQueryStringByKey.
http://msdn.microsoft.com/en-us/library/bb773473(VS.85).aspx

Значение ASSOCSTR, которое указывает тип возвращаемой строки:

typedef enum {
    ASSOCSTR_COMMAND = 1,
    ASSOCSTR_EXECUTABLE,
    ASSOCSTR_FRIENDLYDOCNAME,
    ASSOCSTR_FRIENDLYAPPNAME,
    ASSOCSTR_NOOPEN,
    ASSOCSTR_SHELLNEWVALUE,
    ASSOCSTR_DDECOMMAND,
    ASSOCSTR_DDEIFEXEC,
    ASSOCSTR_DDEAPPLICATION,
    ASSOCSTR_DDETOPIC,
    ASSOCSTR_INFOTIP,
    ASSOCSTR_QUICKTIP,
    ASSOCSTR_TILEINFO,
    ASSOCSTR_CONTENTTYPE,
    ASSOCSTR_DEFAULTICON,
    ASSOCSTR_SHELLEXTENSION,
    ASSOCSTR_DROPTARGET,
    ASSOCSTR_DELEGATEEXECUTE,
    ASSOCSTR_MAX
} ASSOCSTR;

Полагаю, вам нужно имя ASSOCSTR_FRIENDLYAPPNAME.

2 голосов
/ 20 июля 2011
DWORD dwSize = 255;
TCHAR sBuffer[MAX_PATH] = {0};
HRESULT hr = AssocQueryString(0, ASSOCSTR_EXECUTABLE, _T(".htm"), _T("Open"), sBuffer, &dwSize);
CString csExt;
csExt.Format(_T("%s"), sBuffer);
AfxMessageBox(csExt);
0 голосов
/ 04 июня 2009

FAQ по Win32 с 1995 года (Shell, см. Группы Google, Win32)

0 голосов
/ 03 июня 2009

Извините, код отсутствует, но есть полезная информация. См. Этот связанный вопрос: как приложение создает значок для документов, связанных с моим приложением

Он спрашивал о значках, но оказалось, что программа, связанная с расширением, хранится в том же месте в реестре, что и значок для этого расширения.

...