Merge pull request #807 from ONLYOFFICE/feature/context_menu_37924_r1

Add feature 37924: add .docxf to context menu
This commit is contained in:
maxkadushkin
2023-04-05 17:49:16 +03:00
committed by GitHub

View File

@ -1807,61 +1807,46 @@ end;
procedure AddContextMenuNewItems;
var
langs: TArrayOfValues;
args, regpath: String;
progpath, oldValue: String;
argsArray: TArrayOfString;
dir, regpath, progpath, oldValue: String;
langs, args, values: TArrayOfString;
version: TWindowsVersion;
i: Integer;
begin
AddKeyValue(langs, 'cs', 'cs-CZ:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'de', 'de-DE:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'es', 'es-ES:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'fr', 'fr-FR:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'it_IT', 'it-IT:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'pt_BR', 'pt-BR:new.docx:new.pptx:new.xlsx');
AddKeyValue(langs, 'ru', 'ru-RU:new.docx:new.pptx:new.xlsx');
langs := ['az-Latn-AZ', 'bg-BG', 'cs-CZ', 'de-DE', 'el-GR', 'en-GB', 'en-US', 'es-ES',
'eu-ES', 'fr-FR', 'gl-ES', 'hy-AM', 'it-IT', 'ja-JP', 'ko-KR', 'lv-LV',
'ms-MY', 'nl-NL', 'pl-PL', 'pt-BR', 'pt-PT', 'ru-RU', 'sk-SK', 'sv-SE',
'tr-TR', 'uk-UA', 'vi-VN', 'zh-CN', 'zh-TW'];
if not TryGetValue(langs, ExpandConstant('{language}'), args) then
args := '.:mm_new.docx:mm_new.pptx:mm_new.xlsx';
Explode(argsArray, args, ':');
if argsArray[0] = '.' then
progpath := ExpandConstant('{app}\converter\empty')
else progpath := ExpandConstant('{app}\converter\empty\' + argsArray[0]);
regpath := ExpandConstant('Software\Classes\.docx\{#ASCC_REG_PREFIX}.Document.12\ShellNew');
if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},7'));
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[1]);
end;
regpath := ExpandConstant('Software\Classes\.pptx\{#ASCC_REG_PREFIX}.Show.12\ShellNew');
if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},9'));
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[2]);
end;
regpath := ExpandConstant('Software\Classes\.xlsx\{#ASCC_REG_PREFIX}.Sheet.12\ShellNew');
if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then
begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},10'));
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + argsArray[3]);
dir := 'en-US';
for i := 0 to GetArrayLength(langs) - 1 do begin
if langs[i] = ExpandConstant('{language}') then begin
dir := langs[i];
break;
end;
end;
args := ['new.docx:.docx:.Document.12:7',
'new.pptx:.pptx:.Show.12:9',
'new.xlsx:.xlsx:.Sheet.12:10'
#ifdef _ONLYOFFICE
,'new.docxf:.docxf:.Docxf:13'
#endif
];
GetWindowsVersionEx(version);
if version.Major = 10 then begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '{#ASCC_REG_PREFIX}', oldValue);
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '{#ASCC_REG_PREFIX}', oldValue);
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '', '{#ASCC_REG_PREFIX}.Document.12')
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', '{#ASCC_REG_PREFIX}.Sheet.12')
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', '{#ASCC_REG_PREFIX}.Show.12')
progpath := ExpandConstant('{app}\converter\empty\' + dir);
for i := 0 to GetArrayLength(args) - 1 do begin
Explode(values, args[i],':');
regpath := ExpandConstant('Software\Classes\' + values[1] + '\{#ASCC_REG_PREFIX}' + values[2] + '\ShellNew');
if not RegKeyExists(HKEY_LOCAL_MACHINE, regpath) then begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'IconPath', ExpandConstant('{app}\{#iconsExe},' + values[3]));
RegWriteStringValue(HKEY_LOCAL_MACHINE, regpath, 'FileName', progpath + '\' + values[0]);
end;
if version.Major = 10 then begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '{#ASCC_REG_PREFIX}', oldValue);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\' + values[1], '', '{#ASCC_REG_PREFIX}' + values[2]);
end;
end;
end;
@ -2012,6 +1997,9 @@ begin
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.docx\{#ASCC_REG_PREFIX}.Document.12'));
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.pptx\{#ASCC_REG_PREFIX}.Show.12'));
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.xlsx\{#ASCC_REG_PREFIX}.Sheet.12'));
#ifdef _ONLYOFFICE
RegDeleteKeyIncludingSubkeys(HKEY_LOCAL_MACHINE, ExpandConstant('Software\Classes\.docxf\{#ASCC_REG_PREFIX}.Docxf'));
#endif
GetWindowsVersionEx(version);
if version.Major = 10 then begin
@ -2021,6 +2009,11 @@ begin
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '', oldValue);
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}', oldValue) then
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '', oldValue);
#ifdef _ONLYOFFICE
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '{#ASCC_REG_PREFIX}', oldValue) then
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '', oldValue);
RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docxf', '{#ASCC_REG_PREFIX}');
#endif
RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.docx', '{#ASCC_REG_PREFIX}');
RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.xlsx', '{#ASCC_REG_PREFIX}');
RegDeleteValue(HKEY_LOCAL_MACHINE, 'Software\Classes\.pptx', '{#ASCC_REG_PREFIX}');