View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000961 | Far Manager 1.7x | File associations | public | 2009-07-03 19:03 | 2009-11-08 20:08 |
Reporter | Ariman | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 1.75 | ||||
Summary | 0000961: Неполная проверка на наличие файловых ассоциаций в реестре. | ||||
Description | На данный момент проверка файлового расширения на наличие ассоциации с программой в реестре идет в ключе HKEY_CLASSES_ROOT. Но для эксплорера существует еще одна ветка, в которой прописаны расширения (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\). И некоторые программы прописываются только там. При нажатии на таком файле в экслорере происходит запуск приписаной программы, а в фаре ничего не происходит. Что заставляет пользоваться командой start. Функция запуска отрабатывает нормально с такими файлами, но облом идет раньше, на проверке ключа в реестре. Приложенный патч добавляет еще одну проверку в другом ключе, если первая проверка по HKEY_CLASSES_ROOT не прошла. После патча Фар будет работать с внешними ассоциациями более сходно с эксплорером. | ||||
Additional Information | Примером программы с таим типом прописывания ассоциаций является XnView. Нестандартные типы файлов она в HKEY_CLASSES_ROOT не прописывает. | ||||
Tags | No tags attached. | ||||
Build | 1062 | ||||
2009-07-03 19:03
|
far_fileext_check_patch.diff (730 bytes)
Index: . =================================================================== --- . (revision 3219) +++ . (working copy) @@ -330,8 +330,14 @@ if ((ExtPtr=wcsrchr(Name,L'.'))==NULL) return(FALSE); - if (RegOpenKey(HKEY_CLASSES_ROOT,ExtPtr,&hClassesKey)!=ERROR_SUCCESS) - return(FALSE); + if (RegOpenKey(HKEY_CLASSES_ROOT,ExtPtr,&hClassesKey) != ERROR_SUCCESS) + { + string strExplorerTypeKey(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\"); + strExplorerTypeKey.Append(ExtPtr); + + if (RegOpenKey(HKEY_CURRENT_USER, strExplorerTypeKey, &hClassesKey) != ERROR_SUCCESS) + return(FALSE); + } /* if (RegQueryStringValueEx(hClassesKey,L"",strValue)!=ERROR_SUCCESS) |
|
Не принимается - не полный патч Hint: GetShellType, GetShellAction |
2009-07-08 18:50
|
far_fileext_check_patch_v2.diff (1,991 bytes)
Index: execute.cpp =================================================================== --- execute.cpp (revision 3248) +++ execute.cpp (working copy) @@ -200,21 +200,32 @@ if (!bVistaType) { HKEY hKey; - if (RegOpenKey(HKEY_CLASSES_ROOT,Ext,&hKey)!=ERROR_SUCCESS) - return false; - if(aType==AT_URLPROTOCOL) + + // ���� ��� �� ��������� ���������, �� ������ �������� � ���. ����� ���������� + if (aType == AT_FILEEXTENSION) { - strType=Ext; + string strExplorerTypeKey(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\"); + strExplorerTypeKey.Append(Ext); + + if (RegOpenKey(HKEY_CURRENT_USER, strExplorerTypeKey, &hKey) == ERROR_SUCCESS) + { + RegQueryStringValue(hKey, L"ProgID", strType, L""); + RegCloseKey(hKey); + } } - else + + if (strType.IsEmpty() && (RegOpenKey(HKEY_CLASSES_ROOT,Ext,&hKey) == ERROR_SUCCESS)) { - if (RegQueryStringValue(hKey,L"",strType,L"")!=ERROR_SUCCESS) + if(aType==AT_URLPROTOCOL) { - RegCloseKey(hKey); - return false; + strType=Ext; } + else + { + RegQueryStringValue(hKey,L"",strType,L""); + } + RegCloseKey(hKey); } - RegCloseKey(hKey); } return !strType.IsEmpty(); Index: filetype.cpp =================================================================== --- filetype.cpp (revision 3248) +++ filetype.cpp (working copy) @@ -325,22 +325,13 @@ { string strValue; const wchar_t *ExtPtr; - HKEY hClassesKey; if ((ExtPtr=wcsrchr(Name,L'.'))==NULL) return(FALSE); - if (RegOpenKey(HKEY_CLASSES_ROOT,ExtPtr,&hClassesKey)!=ERROR_SUCCESS) - return(FALSE); - -/* - if (RegQueryStringValueEx(hClassesKey,L"",strValue)!=ERROR_SUCCESS) - { - RegCloseKey(hClassesKey); - return(FALSE); - } -*/ - RegCloseKey(hClassesKey); + string strType; + if (!GetShellType(ExtPtr, strType, AT_FILEEXTENSION)) + return(FALSE); string strFullName; |
|
Переделал. Теперь вроде все по феншую. см. far_fileext_check_patch_v2.diff (первый файл теперь не актуален). |
|
Вторая попытка. Неудачная. У меня, например, в HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts есть ".mpeg", у него в подветке OpenWithProgids есть 2 значения: "mpegfile" и "mplayerc.mpeg". Причем в HCR значение "mplayerc.mpeg" отсутствует (есть только "mpegfile"). Но твой алгоритм хватает второй значение... что приводит к тому же сообщению об ошибке. Надо бы усовершенствовать. |
|
Уточнение небольшое. Мой код в OpenWithProgids вообще не заходит. Я только дефолтные значения проверяю. Предлагаешь там тоже значения доставать? |
|
И что за сообщение возникает? По идее, если значение ProgID не существует, то GetShellAction выйдет дальше на проверке. |
|
Хмм... Для ".mpeg" у меня нет ProgID: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mpeg] [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mpeg\OpenWithProgids] "mpegfile"=hex(0): "mplayerc.mpeg"=hex(0): Но в тоже время "mplayerc.mpeg" - это значение по умолчанию в HCR (которого нет). ...может действительно добавить просмотр OpenWithProgids. И тот, кто первый откликнется (найдется в HCR) - того и отдавать. |
|
Так с HKCR значение и подтянулось, т.к. ProgID не было найдено. А что открывается, если жмакнуть на mpeg файле в эксплорере? Интересно, как он обрабатывает такие случаи. Проверку по OpenWithProgids добавлю, не проблема. Т.е. останавливаемся на таком алгоритме: 1. [HKCU\...\Explorer\FileExts\.ext] ProgID 2. [HKCU\...\Explorer\FileExts\.ext] OpenWithProgids до первого попадания 3. [HKСR\.ext] дефолтное значение 4. [HKCR\.ext] OpenWithProgids до первого попадания Ага? |
2009-07-10 09:39
|
|
|
А я все ровно не понимаю зачем поддерживать расширения эксплорера. Системные расширения поддерживаются, зачем поддерживать ещё какую то левую прогу? |
|
> А что открывается, если жмакнуть на mpeg файле в эксплорере? картинку приаттачил > Ага? Ага! |
|
> А я все ровно не понимаю зачем поддерживать расширения эксплорера. Системные расширения поддерживаются, зачем поддерживать ещё какую то левую прогу? Ну тут скорее поддержка еще целой кучи левых прог, которые регистрируются именно в этой ветке. Уж куда проще сделать эту поддержку в Фаре (благо не много работы), чем париться с каждой проблемной софтиной отдельно. Мешать то все равно не будет, а кому-то и поможет (как, например, мне). |
|
alexy, ты не прав. По крайней мере этот патч "вылечит" те неудобства, которые я испытываю иногда ;-) |
|
Господа, а может ну его лесом, этот ручной шаманский анализ реестра? Давайте делать, как все: sei.lpVerb = NULL - и вперёд. |
|
а смысл, если ЭТО не пашет, по прихоти M$? |
|
Что "ЭТО"? MS прямым текстом рекомендует NULL использовать для выполнения дефолтного действия, и оно таки пашет. А руками реестр читать, в котором формат поменяться может в любой момент - это очень большое кю. С вистой уже проблемы поимели, с большой вероятностью поимеем ещё. |
|
Использование NULL вместо поиска verb-а имеет смысл. Но еще вроде как есть кусок, определяющий гуевая прога прописана или нет. Есть, правда, еще потенциальная альтернатива. AssocQueryString возвращает команду по verb-у. Можно выцепить путь к программе и проверить ее. Тогда, в сумме, парсинг реестра не понадобится. Фича с OpenWithProgids естественно не получится, сама винда оттуда ничего не берет, если нет в дефолтных местах. |
|
> Но еще вроде как есть кусок, определяющий гуевая прога прописана или нет. Ага, я ждал этого вопроса :) А теперь посчитайте, сколько у вас НЕГУЕВЫХ прог прописано в виндовых ассоциациях. Я вот почему-то такого чуда не видел ни разу. > AssocQueryString возвращает команду по verb-у. Это куда лучше, чем руками. Но, опять же, системные ассоциации - отнюдь не то место, где критически важно знать гуевость проги. |
|
> А теперь посчитайте, сколько у вас НЕГУЕВЫХ прог прописано в виндовых ассоциациях. Я вот почему-то такого чуда не видел ни разу. Ну так на вскидку, интерпретатор питона. Это консольная программа. Но учитывая, что в этом случае стартует отдельная консоль, а не аттачится а фаровой, то это не особенно важно. Вообще, я не отстаиваю идею проверки программы на гуевость. Я и так весьма смутно представляю назначение этого куска кода. Как и куска с поиском дефолтного verb-а. Но поскольку я не разработчик фара, то все предлагаемые патчи в основе несут идею "не сломать существующий функционал". Меня и ShellExecute с NULL вместо verb-а устроит, это фиксит проблему, ради которой создавался этот тикет. Но я же не могу предложить "давайте выкинем все что уже есть", писалось же это для чего-то. В итоге хотелось бы прийти к консенсусу по вопросу обработки ассоциаций. Мне то патч написать не сложно, но я так смотрю мнения авторского коллектива резделились, причем заметно. И как именно стоит реализовать этот функционал не понятно. |
|
таки предлагаю этот патч доделать. он, по крайней мере, ничего не рушит. а потом (как обычно лет через 100) будет смотреть что удалить/соптимизировать Ariman, ты только немного откомментируй свой код, чтобы было понятно "на кой ляд это нужно" |
2009-07-17 10:33
|
far_fileext_check_patch_v3.diff (4,318 bytes)
Index: execute.cpp =================================================================== --- execute.cpp (revision 3280) +++ execute.cpp (working copy) @@ -175,6 +175,72 @@ return Result; } +bool IsProperProgID(const wchar_t* ProgID) +{ + HKEY hProgID; + if (RegOpenKey(HKEY_CLASSES_ROOT, ProgID, &hProgID) == ERROR_SUCCESS) + { + int nResult = RegQueryValueEx(hProgID, L"IsShortcut", NULL, NULL, NULL, NULL); + RegCloseKey(hProgID); + return (nResult != ERROR_SUCCESS); + } + return false; +} + +// ��� ������� ProgID �� ��������� �������� +// hRootKey - �������� �� �� ������, ������ �� HKCR ��� HKCU +// wszExtSubKey - �� ����� ��������� �������� +// wszDefValueName - �� ���������� ���, ��� ������� �������� ID �� ������� �������� (����� NULL �� ������ � HKCR � ProgID �� HKCU) +// strType - ��� ������� ��������, ���� ����� ������ +bool SearchExtHandlerProgID(HKEY hRootKey, const wchar_t* wszExtSubKey, const wchar_t* wszDefValueName, string &strType) +{ + HKEY hExtKey; + + if (RegOpenKey(hRootKey, wszExtSubKey, &hExtKey) == ERROR_SUCCESS) + { + string strProgID; + if (RegQueryStringValue(hExtKey, wszDefValueName, strProgID) == ERROR_SUCCESS) + if (IsProperProgID(strProgID)) + { + strType = strProgID; + RegCloseKey(hExtKey); + return true; + } + + // ���� ��������� ������� �� ������� ��� �� ������ ����������������� ClassID � �������, + // ����� ������ ������ � �������� (��� ������ ��������� ����������� �� ������ Open with) + HKEY hExtIDListSubKey; + if (RegOpenKey(hExtKey, L"OpenWithProgids", &hExtIDListSubKey) == ERROR_SUCCESS) + { + DWORD nValueIndex = 0; + LONG nRet; + wchar_t wszValueName[64]; + DWORD nValueNameSize = 64; + DWORD nValueType; + + while ((nRet = RegEnumValue(hExtIDListSubKey, nValueIndex, wszValueName, &nValueNameSize, NULL, &nValueType, NULL, NULL)) != ERROR_NO_MORE_ITEMS) + { + if (nRet != ERROR_SUCCESS) break; + if ((nValueType == REG_SZ || nValueType == REG_NONE) && IsProperProgID(wszValueName)) + { + strType = wszValueName; + + RegCloseKey(hExtIDListSubKey); + RegCloseKey(hExtKey); + return true; + } + nValueIndex++; + } + + RegCloseKey(hExtIDListSubKey); + } + + RegCloseKey(hExtKey); + } + + return false; +} + bool GetShellType(const wchar_t *Ext, string &strType,ASSOCIATIONTYPE aType) { bool bVistaType = false; @@ -200,22 +266,16 @@ if (!bVistaType) { - HKEY hKey; - if (RegOpenKey(HKEY_CLASSES_ROOT,Ext,&hKey)!=ERROR_SUCCESS) - return false; - if(aType==AT_URLPROTOCOL) + if (aType == AT_FILEEXTENSION) { - strType=Ext; - } - else - { - if (RegQueryStringValue(hKey,L"",strType,L"")!=ERROR_SUCCESS) - { - RegCloseKey(hKey); - return false; - } + string strExplorerTypeKey(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\"); + strExplorerTypeKey.Append(Ext); + + SearchExtHandlerProgID(HKEY_CURRENT_USER, strExplorerTypeKey, L"ProgID", strType); } - RegCloseKey(hKey); + + if (strType.IsEmpty()) + SearchExtHandlerProgID(HKEY_CLASSES_ROOT, Ext, NULL, strType); } return !strType.IsEmpty(); @@ -242,13 +302,6 @@ return NULL; HKEY hKey; - if(RegOpenKeyEx(HKEY_CLASSES_ROOT,strValue,0,KEY_QUERY_VALUE,&hKey)==ERROR_SUCCESS) - { - int nResult=RegQueryValueEx(hKey,L"IsShortcut",NULL,NULL,NULL,NULL); - RegCloseKey(hKey); - if(nResult==ERROR_SUCCESS) - return NULL; - } strValue += L"\\shell"; Index: filetype.cpp =================================================================== --- filetype.cpp (revision 3280) +++ filetype.cpp (working copy) @@ -325,22 +325,13 @@ { string strValue; const wchar_t *ExtPtr; - HKEY hClassesKey; if ((ExtPtr=wcsrchr(Name,L'.'))==NULL) return(FALSE); - if (RegOpenKey(HKEY_CLASSES_ROOT,ExtPtr,&hClassesKey)!=ERROR_SUCCESS) - return(FALSE); - -/* - if (RegQueryStringValueEx(hClassesKey,L"",strValue)!=ERROR_SUCCESS) - { - RegCloseKey(hClassesKey); - return(FALSE); - } -*/ - RegCloseKey(hClassesKey); + string strType; + if (!GetShellType(ExtPtr, strType, AT_FILEEXTENSION)) + return(FALSE); string strFullName; |
|
Подправил патч с учетом пожеланий. Я тут между делом посмотрел на тему оптимизации все этого хозяйства. И таки можно удалить много ненужного кода (в том числе и того, что я в патче добавил :) ) и избавиться от ручного просмотра реестра. С сохранением всего функционала. Но вылез небольшой конфликт с другим существующим кодом. Тут надо бы обсудить изменения с авторским коллективом (надо кое-что изменить будет). Дайте знать, если это вам интересно. |
|
что-то не прет... 1. Комп навернулся, перезалил (читай, "чистый") 2. Попробовал патч - работает (вызываем M$ выигрыватель) 3. Поставил медиаплейеркласик и сказал ему "mpeg ассоциируй на себя" 4. Explorer на mpeg-файле запустил (как и положено) mplayerc.exe 5. FAR сказал "неа": No application is associated with the specified file for this operation Cannot execute C:\movie\tcp-ip-protocol.mpeg В аттаче (mpeg.rar) кусок реестра... |
2009-07-17 15:25
|
|
|
Тут, кстати, выползает небольшой нюанс выбранного алгоритма поиска. Фар запустит M$-совский плеер. Т.к. в HKCU ассоциации нет, но список OpenWithProgids есть, а там первым идет тип от стандартного виндового плеера. Эксплорер в этот список совсем не смотрит и перескочит на HKEY_CLASSES_ROOT, где уже прописан классик. Может имеет смысл поменять порядок обхода на 1. [HKCU\...\Explorer\FileExts\.ext] ProgID 2. [HKСR\.ext] дефолтное значение 3. [HKCU\...\Explorer\FileExts\.ext] OpenWithProgids до первого попадания 4. [HKCR\.ext] OpenWithProgids до первого попадания ? Чтобы хотябы открывало с эксплорером одну программу, а не разные. |
|
давай так попробуем :-) на счет "хозяйства" чуть погодя поговорим... |
2009-07-20 11:06
|
far_fileext_check_patch_v4.diff (4,572 bytes)
Index: execute.cpp =================================================================== --- execute.cpp (revision 3290) +++ execute.cpp (working copy) @@ -175,6 +175,59 @@ return Result; } +bool IsProperProgID(const wchar_t* ProgID) +{ + if (ProgID && *ProgID) + { + HKEY hProgID; + if (RegOpenKey(HKEY_CLASSES_ROOT, ProgID, &hProgID) == ERROR_SUCCESS) + { + int nResult = RegQueryValueEx(hProgID, L"IsShortcut", NULL, NULL, NULL, NULL); + RegCloseKey(hProgID); + return (nResult != ERROR_SUCCESS); + } + } + return false; +} + +// ��� ������� ProgID �� ��������� �������� �� ������ ������� +// hExtKey - �������� �� �� ������ (�� ��������) +// strType - ��� ������� ��������, ���� ����� ������ +bool SearchExtHandlerFromList(HKEY hExtKey, string &strType) +{ + const DWORD dwNameBufSize = 64; + + HKEY hExtIDListSubKey; + if (RegOpenKey(hExtKey, L"OpenWithProgids", &hExtIDListSubKey) == ERROR_SUCCESS) + { + DWORD nValueIndex = 0; + LONG nRet; + wchar_t wszValueName[dwNameBufSize]; + DWORD nValueNameSize = dwNameBufSize; + DWORD nValueType; + + // �������� �� ���� ������� � �������� ����� �� ������������� � ������� ����� + while ((nRet = RegEnumValue(hExtIDListSubKey, nValueIndex, wszValueName, &nValueNameSize, NULL, &nValueType, NULL, NULL)) != ERROR_NO_MORE_ITEMS) + { + if (nRet != ERROR_SUCCESS) break; + if ((nValueType == REG_SZ || nValueType == REG_NONE) && IsProperProgID(wszValueName)) + { + strType = wszValueName; + + RegCloseKey(hExtIDListSubKey); + return true; + } + + nValueIndex++; + nValueNameSize = dwNameBufSize; // ������� ������� �� ������� ������� ������ (����� ������ ��� ����� ������ ������) + } + + RegCloseKey(hExtIDListSubKey); + } + + return false; +} + bool GetShellType(const wchar_t *Ext, string &strType,ASSOCIATIONTYPE aType) { bool bVistaType = false; @@ -200,22 +253,42 @@ if (!bVistaType) { - HKEY hKey; - if (RegOpenKey(HKEY_CLASSES_ROOT,Ext,&hKey)!=ERROR_SUCCESS) - return false; - if(aType==AT_URLPROTOCOL) + HKEY hCRKey = 0, hUserKey = 0; + string strFoundValue; + + if (aType == AT_FILEEXTENSION) { - strType=Ext; + string strExplorerTypeKey(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\"); + strExplorerTypeKey.Append(Ext); + + // ������� �������� ��������� �������� � HKEY_CURRENT_USER + if (RegOpenKey(HKEY_CURRENT_USER, strExplorerTypeKey, &hUserKey) == ERROR_SUCCESS) + if ((RegQueryStringValue(hUserKey, L"ProgID", strFoundValue) == ERROR_SUCCESS) && IsProperProgID(strFoundValue)) + { + strType = strFoundValue; + } } - else - { - if (RegQueryStringValue(hKey,L"",strType,L"")!=ERROR_SUCCESS) + + // ������� �������� ��������� �������� � HKEY_CLASSES_ROOT + if (strType.IsEmpty() && (RegOpenKey(HKEY_CLASSES_ROOT, Ext, &hCRKey) == ERROR_SUCCESS)) + if ((RegQueryStringValue(hCRKey, L"", strFoundValue) == ERROR_SUCCESS) && IsProperProgID(strFoundValue)) { - RegCloseKey(hKey); - return false; + strType = strFoundValue; } + + if (strType.IsEmpty() && hUserKey) + { + SearchExtHandlerFromList(hUserKey, strType); } - RegCloseKey(hKey); + if (strType.IsEmpty() && hCRKey) + { + SearchExtHandlerFromList(hCRKey, strType); + } + + if (hUserKey) + RegCloseKey(hUserKey); + if (hCRKey) + RegCloseKey(hCRKey); } return !strType.IsEmpty(); @@ -242,13 +315,6 @@ return NULL; HKEY hKey; - if(RegOpenKeyEx(HKEY_CLASSES_ROOT,strValue,0,KEY_QUERY_VALUE,&hKey)==ERROR_SUCCESS) - { - int nResult=RegQueryValueEx(hKey,L"IsShortcut",NULL,NULL,NULL,NULL); - RegCloseKey(hKey); - if(nResult==ERROR_SUCCESS) - return NULL; - } strValue += L"\\shell"; Index: filetype.cpp =================================================================== --- filetype.cpp (revision 3290) +++ filetype.cpp (working copy) @@ -325,22 +325,13 @@ { string strValue; const wchar_t *ExtPtr; - HKEY hClassesKey; if ((ExtPtr=wcsrchr(Name,L'.'))==NULL) return(FALSE); - if (RegOpenKey(HKEY_CLASSES_ROOT,ExtPtr,&hClassesKey)!=ERROR_SUCCESS) - return(FALSE); - -/* - if (RegQueryStringValueEx(hClassesKey,L"",strValue)!=ERROR_SUCCESS) - { - RegCloseKey(hClassesKey); - return(FALSE); - } -*/ - RegCloseKey(hClassesKey); + string strType; + if (!GetShellType(ExtPtr, strType, AT_FILEEXTENSION)) + return(FALSE); string strFullName; |
|
Продолжаем стремление к прогрессу (far_fileext_check_patch_v4.diff) :) Поменял порядок просмотра + пофиксил баг с обходом списка. |
|
хмм... это уже лучше :-) build 1052 |
|
Ariman, может ты уж заодно попробуешь сделать что бы pdf-ы из фара-а нормально открывались в Adobe Reader-е при наличии на машине Adobe Acrobat-а? А то там хитрый shell extension. |
|
DiRTy_GaRRy, я так понимаю, что это в тему про "остальное хозяйство". |
|
vskirdin, очень на это надеюсь, так как уж очень надоело. |
|
DiRTy_GaRRy, хмм... тут подумалось... а разве в 1052 ОНО не пашет? если нет - покажи куски реестра... |
|
Не пашет. Что конкретно показать? |
|
2 DiRTy_GaRRy. Тут есть приаттаченый файл mpeg.rar. Вот нужно то же самое, но для pdf-а. 2 vskirdin Зря ты меня с contributors добавил. Я там уж есть выше по списку, под реальными данными. :) |
2009-07-20 19:38
|
|
|
Сделал + скрин конекстного меню. |
|
> Зря ты меня с contributors добавил. Я там уж есть выше по списку, под реальными данными. в следующем патче удалю ;-) |
|
2 DiRTy_GaRRy Это скорее на Shell Extension похоже, судя по данным с реестра. Ассоциация таки на сам Acrobat прописана. Похоже тут поможет только та самая тема про "остальное хозяйство" :) Попробуй дернуть ShellExecute на любом pdf-е с NULL вместо verb-a. Если откроется ридер, то будем знать точно как лечить. |
|
Да, дайствительно, если в lpOperation передавать null, то открывается Reader, а если open, то Acrobat. |
|
Ну тогда надо сделать то, о чем упоминал DrKnS выше, т.е. выкинуть ручной поиск дефолтного верба и ставить всегда NULL. Это решит проблему, да и код красивее станет :). Господа разработчики, тут уж слово за вами. |
|
"В копилку" :-) http://forum.farmanager.com/viewtopic.php?f=9&t=4333&start=0 |
|
В своё время была та же проблема с плагином Smart Launch (http://forum.farmanager.com/viewtopic.php?p=15753#p15753), после установки NULL всё нормально работает уже несколько лет... |
|
far_lnk_patch.diff (773 bytes)
Index: . =================================================================== --- . (revision 3317) +++ . (working copy) @@ -182,9 +182,8 @@ HKEY hProgID; if (RegOpenKey(HKEY_CLASSES_ROOT, ProgID, &hProgID) == ERROR_SUCCESS) { - int nResult = RegQueryValueEx(hProgID, L"IsShortcut", NULL, NULL, NULL, NULL); RegCloseKey(hProgID); - return (nResult != ERROR_SUCCESS); + return true; } } return false; @@ -315,6 +314,13 @@ return NULL; HKEY hKey; + if(RegOpenKeyEx(HKEY_CLASSES_ROOT,strValue,0,KEY_QUERY_VALUE,&hKey)==ERROR_SUCCESS) + { + int nResult=RegQueryValueEx(hKey,L"IsShortcut",NULL,NULL,NULL,NULL); + RegCloseKey(hKey); + if(nResult==ERROR_SUCCESS) + return NULL; + } strValue += L"\\shell"; |
|
Починил косяк с .lnk файлами (far_lnk_patch.diff). Одно из изменений в предыдущем патче оказалось не удачным :( |
|
build 1062 |
|
Это уже исправлено? |
|
> Это уже исправлено? Да, работает как и хотелось. А раз вопрос с причесыванием кода завял, то можно, наверное, закрывать. |
|
Ну мой баг с pdf так и не исправлен. |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-07-03 19:03 | Ariman | New Issue | |
2009-07-03 19:03 | Ariman | File Added: far_fileext_check_patch.diff | |
2009-07-08 10:05 | vskirdin | Status | new => assigned |
2009-07-08 10:05 | vskirdin | Assigned To | => vskirdin |
2009-07-08 10:06 | vskirdin | Note Added: 0003682 | |
2009-07-08 18:50 | Ariman | File Added: far_fileext_check_patch_v2.diff | |
2009-07-08 18:52 | Ariman | Note Added: 0003691 | |
2009-07-09 18:05 | vskirdin | Note Added: 0003695 | |
2009-07-09 20:19 | Ariman | Note Added: 0003697 | |
2009-07-09 20:24 | Ariman | Note Added: 0003698 | |
2009-07-10 08:34 | vskirdin | Note Added: 0003699 | |
2009-07-10 08:59 | Ariman | Note Added: 0003700 | |
2009-07-10 09:39 | vskirdin | File Added: 2009-07-10_123834.gif | |
2009-07-10 09:40 | alexy | Note Added: 0003701 | |
2009-07-10 09:40 | vskirdin | Note Added: 0003702 | |
2009-07-10 13:32 | Ariman | Note Added: 0003703 | |
2009-07-10 14:09 | vskirdin | Note Added: 0003704 | |
2009-07-10 18:13 | DrKnS | Note Added: 0003705 | |
2009-07-10 20:25 | vskirdin | Note Added: 0003706 | |
2009-07-10 20:37 | DrKnS | Note Added: 0003707 | |
2009-07-10 21:09 | Ariman | Note Added: 0003708 | |
2009-07-10 21:10 | Ariman | Note Edited: 0003708 | |
2009-07-10 21:22 | DrKnS | Note Added: 0003709 | |
2009-07-11 15:20 | Ariman | Note Added: 0003713 | |
2009-07-13 16:17 | vskirdin | Note Added: 0003719 | |
2009-07-17 10:33 | Ariman | File Added: far_fileext_check_patch_v3.diff | |
2009-07-17 10:39 | Ariman | Note Added: 0003750 | |
2009-07-17 15:25 | vskirdin | Note Added: 0003753 | |
2009-07-17 15:25 | vskirdin | File Added: mpeg.rar | |
2009-07-17 15:25 | vskirdin | Note Edited: 0003753 | |
2009-07-17 15:52 | Ariman | Note Added: 0003755 | |
2009-07-17 15:54 | vskirdin | Note Added: 0003756 | |
2009-07-20 11:06 | Ariman | File Added: far_fileext_check_patch_v4.diff | |
2009-07-20 11:09 | Ariman | Note Added: 0003760 | |
2009-07-20 15:32 | vskirdin | Note Added: 0003761 | |
2009-07-20 15:32 | vskirdin | Status | assigned => feedback |
2009-07-20 16:32 | DiRTy_GaRRy | Note Added: 0003763 | |
2009-07-20 16:53 | vskirdin | Note Added: 0003764 | |
2009-07-20 16:54 | DiRTy_GaRRy | Note Added: 0003765 | |
2009-07-20 17:00 | vskirdin | Note Added: 0003766 | |
2009-07-20 17:45 | DiRTy_GaRRy | Note Added: 0003769 | |
2009-07-20 18:58 | Ariman | Note Added: 0003770 | |
2009-07-20 19:38 | DiRTy_GaRRy | File Added: pdf.rar | |
2009-07-20 19:39 | DiRTy_GaRRy | Note Added: 0003771 | |
2009-07-21 09:42 | vskirdin | Note Added: 0003772 | |
2009-07-21 14:45 | Ariman | Note Added: 0003775 | |
2009-07-24 10:47 | DiRTy_GaRRy | Note Added: 0003784 | |
2009-07-24 14:17 | Ariman | Note Added: 0003787 | |
2009-07-31 06:06 | vskirdin | Note Added: 0003829 | |
2009-07-31 09:03 | Px | Note Added: 0003830 | |
2009-07-31 10:10 | Ariman | File Added: far_lnk_patch.diff | |
2009-07-31 10:12 | Ariman | Note Added: 0003831 | |
2009-07-31 10:52 | vskirdin | Note Added: 0003832 | |
2009-11-03 19:20 | alexy | Note Added: 0004487 | |
2009-11-08 10:46 | Ariman | Note Added: 0004526 | |
2009-11-08 16:32 | alexy | Build | => 1062 |
2009-11-08 16:32 | alexy | Status | feedback => closed |
2009-11-08 16:32 | alexy | Fixed in Version | => 1.75 |
2009-11-08 16:32 | alexy | Resolution | open => fixed |
2009-11-08 20:08 | DiRTy_GaRRy | Note Added: 0004527 | |
2009-11-08 20:09 | DiRTy_GaRRy | Note Edited: 0004527 |