View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000961 | Far Manager 1.7x | File associations | public | 2009-07-03 18: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 18: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 17: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 08: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 09: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 14: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 10: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 18: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 18:03 | Ariman | New Issue | |
| 2009-07-03 18:03 | Ariman | File Added: far_fileext_check_patch.diff | |
| 2009-07-08 09:05 | vskirdin | Status | new => assigned |
| 2009-07-08 09:05 | vskirdin | Assigned To | => vskirdin |
| 2009-07-08 09:06 | vskirdin | Note Added: 0003682 | |
| 2009-07-08 17:50 | Ariman | File Added: far_fileext_check_patch_v2.diff | |
| 2009-07-08 17:52 | Ariman | Note Added: 0003691 | |
| 2009-07-09 17:05 | vskirdin | Note Added: 0003695 | |
| 2009-07-09 19:19 | Ariman | Note Added: 0003697 | |
| 2009-07-09 19:24 | Ariman | Note Added: 0003698 | |
| 2009-07-10 07:34 | vskirdin | Note Added: 0003699 | |
| 2009-07-10 07:59 | Ariman | Note Added: 0003700 | |
| 2009-07-10 08:39 | vskirdin | File Added: 2009-07-10_123834.gif | |
| 2009-07-10 08:40 | alexy | Note Added: 0003701 | |
| 2009-07-10 08:40 | vskirdin | Note Added: 0003702 | |
| 2009-07-10 12:32 | Ariman | Note Added: 0003703 | |
| 2009-07-10 13:09 | vskirdin | Note Added: 0003704 | |
| 2009-07-10 17:13 | DrKnS | Note Added: 0003705 | |
| 2009-07-10 19:25 | vskirdin | Note Added: 0003706 | |
| 2009-07-10 19:37 | DrKnS | Note Added: 0003707 | |
| 2009-07-10 20:09 | Ariman | Note Added: 0003708 | |
| 2009-07-10 20:10 | Ariman | Note Edited: 0003708 | |
| 2009-07-10 20:22 | DrKnS | Note Added: 0003709 | |
| 2009-07-11 14:20 | Ariman | Note Added: 0003713 | |
| 2009-07-13 15:17 | vskirdin | Note Added: 0003719 | |
| 2009-07-17 09:33 | Ariman | File Added: far_fileext_check_patch_v3.diff | |
| 2009-07-17 09:39 | Ariman | Note Added: 0003750 | |
| 2009-07-17 14:25 | vskirdin | Note Added: 0003753 | |
| 2009-07-17 14:25 | vskirdin | File Added: mpeg.rar | |
| 2009-07-17 14:25 | vskirdin | Note Edited: 0003753 | |
| 2009-07-17 14:52 | Ariman | Note Added: 0003755 | |
| 2009-07-17 14:54 | vskirdin | Note Added: 0003756 | |
| 2009-07-20 10:06 | Ariman | File Added: far_fileext_check_patch_v4.diff | |
| 2009-07-20 10:09 | Ariman | Note Added: 0003760 | |
| 2009-07-20 14:32 | vskirdin | Note Added: 0003761 | |
| 2009-07-20 14:32 | vskirdin | Status | assigned => feedback |
| 2009-07-20 15:32 | DiRTy_GaRRy | Note Added: 0003763 | |
| 2009-07-20 15:53 | vskirdin | Note Added: 0003764 | |
| 2009-07-20 15:54 | DiRTy_GaRRy | Note Added: 0003765 | |
| 2009-07-20 16:00 | vskirdin | Note Added: 0003766 | |
| 2009-07-20 16:45 | DiRTy_GaRRy | Note Added: 0003769 | |
| 2009-07-20 17:58 | Ariman | Note Added: 0003770 | |
| 2009-07-20 18:38 | DiRTy_GaRRy | File Added: pdf.rar | |
| 2009-07-20 18:39 | DiRTy_GaRRy | Note Added: 0003771 | |
| 2009-07-21 08:42 | vskirdin | Note Added: 0003772 | |
| 2009-07-21 13:45 | Ariman | Note Added: 0003775 | |
| 2009-07-24 09:47 | DiRTy_GaRRy | Note Added: 0003784 | |
| 2009-07-24 13:17 | Ariman | Note Added: 0003787 | |
| 2009-07-31 05:06 | vskirdin | Note Added: 0003829 | |
| 2009-07-31 08:03 | Px | Note Added: 0003830 | |
| 2009-07-31 09:10 | Ariman | File Added: far_lnk_patch.diff | |
| 2009-07-31 09:12 | Ariman | Note Added: 0003831 | |
| 2009-07-31 09: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 |