108 lines
10 KiB
JavaScript
108 lines
10 KiB
JavaScript
const Registry = require('rage-edit').Registry;
|
|
const SOFTWARE_CLASSES = 'HKCU\\Software\\Classes\\';
|
|
export const registerCommand = async (options) => {
|
|
if (!options)
|
|
throw new Error('options are empty');
|
|
const { name, icon, command, menu } = options;
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
if (!command)
|
|
throw new Error('command is not specified');
|
|
if (!menu)
|
|
throw new Error('menuName is not specified');
|
|
try {
|
|
await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`);
|
|
await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`, '', menu);
|
|
if (icon)
|
|
await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}`, 'Icon', (icon.endsWith('.exe') ? `${icon},0` : icon));
|
|
await Registry.set(`${SOFTWARE_CLASSES}*\\shell\\${name}\\command`, '', `"${command}" "%1"`);
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
export const registerDirectoryCommand = async (options) => {
|
|
if (!options)
|
|
throw new Error('options are empty');
|
|
const { name, icon, command, menu } = options;
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
if (!command)
|
|
throw new Error('command is not specified');
|
|
if (!menu)
|
|
throw new Error('menu is not specified');
|
|
try {
|
|
await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`);
|
|
await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`, '', menu);
|
|
if (icon)
|
|
await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`, 'Icon', (icon.endsWith('.exe') ? `${icon},0` : icon));
|
|
await Registry.set(`${SOFTWARE_CLASSES}Directory\\shell\\${name}\\command`, '', `"${command}" "%1"`);
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
export const registerOpenWithCommand = async (extensions, options) => {
|
|
if (!extensions || !extensions.length)
|
|
throw new Error('extensions is not specified');
|
|
if (!options)
|
|
throw new Error('options are empty');
|
|
const { name, command } = options;
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
if (!command)
|
|
throw new Error('command is not specified');
|
|
try {
|
|
await Promise.all((await findExtensionNames(extensions)).map(async (n) => {
|
|
await Registry.set(`${SOFTWARE_CLASSES}${n}`);
|
|
await Registry.set(`${SOFTWARE_CLASSES}${n}\\shell\\${name}`);
|
|
await Registry.set(`${SOFTWARE_CLASSES}${n}\\shell\\${name}\\command`, '', `"${command}" "%1"`);
|
|
}));
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
export const removeCommand = async (name) => {
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
try {
|
|
await Registry.delete(`${SOFTWARE_CLASSES}*\\shell\\${name}`);
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
export const removeDirectoryCommand = async (name) => {
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
try {
|
|
await Registry.delete(`${SOFTWARE_CLASSES}Directory\\shell\\${name}`);
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
export const removeOpenWithCommand = async (extensions, name) => {
|
|
if (!extensions)
|
|
throw new Error('extensions is not specified');
|
|
if (!name)
|
|
throw new Error('name is not specified');
|
|
try {
|
|
await Promise.all((await findExtensionNames(extensions)).map(async (n) => await Registry.delete(`${SOFTWARE_CLASSES}${n}\\shell\\${name}`)));
|
|
}
|
|
catch (e) {
|
|
return Promise.reject(e);
|
|
}
|
|
return Promise.resolve();
|
|
};
|
|
async function findExtensionNames(exts) {
|
|
const { ses_root } = await Registry.get('HKCR');
|
|
return Promise.all(Object.keys(ses_root).filter(e => exts.includes(e)).map(async (k) => (await Registry.get(`HKCR\\${k}`)).$values['']));
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXJfY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29zL2NvbnRleHRfbWVudS9yZWdpc3Rlcl9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTyxRQUFRLEdBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUVqRCxNQUFNLGdCQUFnQixHQUFHLDJCQUEyQixDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7SUFDOUMsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbkQsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM5QyxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsT0FBTztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsSUFBSTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUV4RCxJQUFJLENBQUM7UUFDSixNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixhQUFhLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLElBQUk7WUFBRSxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsYUFBYSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxD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
|