CAPTION "Shell Integration"\r
FONT 8, "MS Shell Dlg", 0, 0, 0x1\r
BEGIN\r
- GROUPBOX "Explorer",IDC_STATIC,7,6,238,80\r
+ GROUPBOX "Explorer",IDC_STATIC,7,6,238,112\r
CONTROL "E&nable advanced menu",IDC_EXPLORER_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,27,30,210,10\r
CONTROL "&Add to context menu",IDC_EXPLORER_CONTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,18,220,10\r
PUSHBUTTON "&Register shell extension",IDC_REGISTER_SHELLEXTENSION,17,48,220,14\r
PUSHBUTTON "&Unregister shell extension",IDC_UNREGISTER_SHELLEXTENSION,17,64,220,14\r
+ PUSHBUTTON "Register shell extension for current user &only",IDC_REGISTER_SHELLEXTENSION_PERUSER,17,80,220,14\r
+ PUSHBUTTON "Unregister shell extension for current user on&ly",IDC_UNREGISTER_SHELLEXTENSION_PERUSER,17,96,220,14\r
END\r
\r
IDD_PROPPAGE_COMPARE_FOLDER DIALOGEX 0, 0, 255, 205\r
static LPCTSTR f_RegValueEnabled = _T("ContextMenuEnabled");
static LPCTSTR f_RegValuePath = _T("Executable");
-static bool IsShellExtensionRegistered()
+static bool IsShellExtensionRegistered(bool peruser)
{
HKEY hKey;
#ifdef _WIN64
auto Is64BitWindows = []() { BOOL f64 = FALSE; return IsWow64Process(GetCurrentProcess(), &f64) && f64; };
DWORD ulOptions = KEY_QUERY_VALUE | (Is64BitWindows() ? KEY_WOW64_64KEY : 0);
#endif
- if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("CLSID\\{4E716236-AA30-4C65-B225-D68BBA81E9C2}"), 0, ulOptions, &hKey)) {
+ if (ERROR_SUCCESS == RegOpenKeyEx(peruser ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, _T("Software\\Classes\\CLSID\\{4E716236-AA30-4C65-B225-D68BBA81E9C2}"), 0, ulOptions, &hKey))
+ {
RegCloseKey(hKey);
return true;
}
return false;
}
-static bool RegisterShellExtension(bool unregister)
+static bool RegisterShellExtension(bool unregister, bool peruser)
{
TCHAR szSystem32[260] = { 0 };
TCHAR szSysWow64[260] = { 0 };
String progpath = env::GetProgPath();
String regsvr32 = paths::ConcatPath(szSystem32, _T("regsvr32.exe"));
String args;
+ String options = (unregister ? _T("/s /u") : _T("/s"));
+ options += peruser ? _T(" /n /i:user") : _T("");
SHELLEXECUTEINFO sei = { sizeof(sei) };
- sei.lpVerb = _T("runas");
+ if (!peruser)
+ sei.lpVerb = _T("runas");
if (szSysWow64[0])
{
- args = (unregister ? _T("/s /u \"") : _T("/s \"")) + paths::ConcatPath(progpath, _T("ShellExtensionX64.dll")) + _T("\"");
+ args = options + _T(" \"") + paths::ConcatPath(progpath, _T("ShellExtensionX64.dll")) + _T("\"");
+
sei.lpFile = regsvr32.c_str();
sei.lpParameters = args.c_str();
ShellExecuteEx(&sei);
regsvr32 = paths::ConcatPath(szSysWow64, _T("regsvr32.exe"));
- args = (unregister ? _T("/s /u \"") : _T("/s \"")) + paths::ConcatPath(progpath, _T("ShellExtensionU.dll")) + _T("\"");
+ args = options + _T("\"") + paths::ConcatPath(progpath, _T("ShellExtensionU.dll")) + _T("\"");
sei.lpFile = regsvr32.c_str();
sei.lpParameters = args.c_str();
return !!ShellExecuteEx(&sei);
}
else
{
- args = (unregister ? _T("/s /u \"") : _T("/s \"")) + paths::ConcatPath(progpath, _T("ShellExtensionU.dll")) + _T("\"");
+ args = options + _T(" \"") + paths::ConcatPath(progpath, _T("ShellExtensionU.dll")) + _T("\"");
sei.lpFile = regsvr32.c_str();
sei.lpParameters = args.c_str();
return !!ShellExecuteEx(&sei);
ON_BN_CLICKED(IDC_EXPLORER_CONTEXT, OnAddToExplorer)
ON_BN_CLICKED(IDC_REGISTER_SHELLEXTENSION, OnRegisterShellExtension)
ON_BN_CLICKED(IDC_UNREGISTER_SHELLEXTENSION, OnUnregisterShellExtension)
+ ON_BN_CLICKED(IDC_REGISTER_SHELLEXTENSION_PERUSER, OnRegisterShellExtensionPerUser)
+ ON_BN_CLICKED(IDC_UNREGISTER_SHELLEXTENSION_PERUSER, OnUnregisterShellExtensionPerUser)
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void PropShell::UpdateButtons()
{
- bool registered = IsShellExtensionRegistered();
- EnableDlgItem(IDC_EXPLORER_CONTEXT, registered);
+ bool registered = IsShellExtensionRegistered(false);
+ bool registeredPerUser = IsShellExtensionRegistered(true);
+ EnableDlgItem(IDC_EXPLORER_CONTEXT, registered || registeredPerUser);
EnableDlgItem(IDC_REGISTER_SHELLEXTENSION, !registered);
EnableDlgItem(IDC_UNREGISTER_SHELLEXTENSION, registered);
+ EnableDlgItem(IDC_REGISTER_SHELLEXTENSION_PERUSER, !registeredPerUser);
+ EnableDlgItem(IDC_UNREGISTER_SHELLEXTENSION_PERUSER, registeredPerUser);
EnableDlgItem(IDC_EXPLORER_ADVANCED,
- registered && IsDlgButtonChecked(IDC_EXPLORER_CONTEXT));
+ (registered || registeredPerUser) && IsDlgButtonChecked(IDC_EXPLORER_CONTEXT));
}
void PropShell::OnRegisterShellExtension()
{
- RegisterShellExtension(false);
+ RegisterShellExtension(false, false);
}
void PropShell::OnUnregisterShellExtension()
{
- RegisterShellExtension(true);
+ RegisterShellExtension(true, false);
+}
+
+void PropShell::OnRegisterShellExtensionPerUser()
+{
+ RegisterShellExtension(false, true);
+}
+
+void PropShell::OnUnregisterShellExtensionPerUser()
+{
+ RegisterShellExtension(true, true);
}
void PropShell::OnTimer(UINT_PTR nIDEvent)
afx_msg void OnAddToExplorer();
afx_msg void OnRegisterShellExtension();
afx_msg void OnUnregisterShellExtension();
+ afx_msg void OnRegisterShellExtensionPerUser();
+ afx_msg void OnUnregisterShellExtensionPerUser();
afx_msg void OnTimer(UINT_PTR nIDEvent);
void GetContextRegValues();
#define IDC_MARGIN_COLOR_LABEL 1351\r
#define IDC_MARGIN_BKGD_COLOR 1352\r
#define IDC_COMPARE_BINARYC_LIMIT 1353\r
+#define IDC_REGISTER_SHELLEXTENSION_PERUSER 1354\r
+#define IDC_UNREGISTER_SHELLEXTENSION_PERUSER 1355\r
#define IDC_EDIT_WHOLE_WORD 8603\r
#define IDC_EDIT_MATCH_CASE 8604\r
#define IDC_EDIT_FINDTEXT 8605\r
#ifdef APSTUDIO_INVOKED\r
#ifndef APSTUDIO_READONLY_SYMBOLS\r
#define _APS_3D_CONTROLS 1\r
-#define _APS_NEXT_RESOURCE_VALUE 250\r
+#define _APS_NEXT_RESOURCE_VALUE 251\r
#define _APS_NEXT_COMMAND_VALUE 33660\r
#define _APS_NEXT_CONTROL_VALUE 8830\r
#define _APS_NEXT_SYMED_VALUE 116\r
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "&Tirar o registro da extensão do shell"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "取消注册到外壳扩展(&U)"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "註銷右鍵快顯功能表(&U)"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "Shell-extensie de-registreren"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgstr ""
"Project-Id-Version: WinMerge\n"
"Report-Msgid-Bugs-To: http://bugs.winmerge.org/\n"
-"POT-Creation-Date: 2019-05-11 09:49+0000\n"
+"POT-Creation-Date: 2019-05-19 10:55+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: English <winmerge-translate@lists.sourceforge.net>\n"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
msgid "Folder"
msgstr ""
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "シェル拡張の登録を解除(&U)"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr "現在のユーザーのみシェル拡張を登録(&O)"
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr "現在のユーザーのみシェル拡張の登録を解除(&L)"
+
#: Merge.rc:7262BE24
msgid "Folder"
msgstr "フォルダー"
msgid "&Unregister shell extension"
msgstr "쉘 확장자 등록 해제(&U)"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "&Išregistruoti aplinkos plėtinį"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
msgid "Folder"
msgstr "Katalogų"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "Extensão shell não registada"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "Avregistrera GränssnittsIntegration"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr "Kab&uk Uzantısı Kaydını Sil"
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"
msgid "&Unregister shell extension"
msgstr ""
+#: Merge.rc:2D682DC2
+msgid "Register shell extension for current user &only"
+msgstr ""
+
+#: Merge.rc:5C3A0110
+msgid "Unregister shell extension for current user on&ly"
+msgstr ""
+
#: Merge.rc:7262BE24
#, c-format
msgid "Folder"