https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c0f340bca567c5ae6ab49…
commit c0f340bca567c5ae6ab4906459b62e2ef26f226f
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Tue Nov 12 16:47:36 2019 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Tue Nov 12 16:47:36 2019 +0900
[SHELL32] Implement 'Open file location' of shortcut files (#2028)
"Open file location" is a feature to open the location of the target of a
shortcut file.
Ideally we should probably use SHOpenFolderAndSelectItems here, but that is not 100%
implemented in ros yet... CORE-12770
---
dll/win32/shell32/CShellLink.cpp | 67 +++++++++++++++++++++++++++++++++-------
dll/win32/shell32/CShellLink.h | 13 ++++++--
dll/win32/shell32/lang/bg-BG.rc | 1 +
dll/win32/shell32/lang/ca-ES.rc | 1 +
dll/win32/shell32/lang/cs-CZ.rc | 1 +
dll/win32/shell32/lang/da-DK.rc | 1 +
dll/win32/shell32/lang/de-DE.rc | 1 +
dll/win32/shell32/lang/el-GR.rc | 1 +
dll/win32/shell32/lang/en-GB.rc | 1 +
dll/win32/shell32/lang/en-US.rc | 1 +
dll/win32/shell32/lang/es-ES.rc | 1 +
dll/win32/shell32/lang/et-EE.rc | 1 +
dll/win32/shell32/lang/fi-FI.rc | 1 +
dll/win32/shell32/lang/fr-FR.rc | 1 +
dll/win32/shell32/lang/he-IL.rc | 1 +
dll/win32/shell32/lang/hi-IN.rc | 1 +
dll/win32/shell32/lang/hu-HU.rc | 1 +
dll/win32/shell32/lang/id-ID.rc | 1 +
dll/win32/shell32/lang/it-IT.rc | 1 +
dll/win32/shell32/lang/ja-JP.rc | 1 +
dll/win32/shell32/lang/ko-KR.rc | 1 +
dll/win32/shell32/lang/nl-NL.rc | 1 +
dll/win32/shell32/lang/no-NO.rc | 1 +
dll/win32/shell32/lang/pl-PL.rc | 1 +
dll/win32/shell32/lang/pt-BR.rc | 1 +
dll/win32/shell32/lang/pt-PT.rc | 1 +
dll/win32/shell32/lang/ro-RO.rc | 1 +
dll/win32/shell32/lang/ru-RU.rc | 1 +
dll/win32/shell32/lang/sk-SK.rc | 1 +
dll/win32/shell32/lang/sl-SI.rc | 1 +
dll/win32/shell32/lang/sq-AL.rc | 1 +
dll/win32/shell32/lang/sv-SE.rc | 1 +
dll/win32/shell32/lang/tr-TR.rc | 1 +
dll/win32/shell32/lang/uk-UA.rc | 1 +
dll/win32/shell32/lang/zh-CN.rc | 1 +
dll/win32/shell32/lang/zh-TW.rc | 1 +
dll/win32/shell32/shresdef.h | 2 ++
37 files changed, 101 insertions(+), 15 deletions(-)
diff --git a/dll/win32/shell32/CShellLink.cpp b/dll/win32/shell32/CShellLink.cpp
index 3d7051d9699..8883e801c69 100644
--- a/dll/win32/shell32/CShellLink.cpp
+++ b/dll/win32/shell32/CShellLink.cpp
@@ -278,9 +278,9 @@ CShellLink::CShellLink()
m_pDBList = NULL;
m_bInInit = FALSE;
m_hIcon = NULL;
+ m_idCmdFirst = 0;
m_sLinkPath = NULL;
- m_iIdOpen = -1;
/**/sProduct = sComponent = NULL;/**/
}
@@ -2578,7 +2578,9 @@ HRESULT STDMETHODCALLTYPE CShellLink::Initialize(PCIDLIST_ABSOLUTE
pidlFolder, I
HRESULT STDMETHODCALLTYPE CShellLink::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
idCmdFirst, UINT idCmdLast, UINT uFlags)
{
- int id = 1;
+ INT id = 0;
+
+ m_idCmdFirst = idCmdFirst;
TRACE("%p %p %u %u %u %u\n", this,
hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
@@ -2586,31 +2588,54 @@ HRESULT STDMETHODCALLTYPE CShellLink::QueryContextMenu(HMENU
hMenu, UINT indexMe
if (!hMenu)
return E_INVALIDARG;
- WCHAR wszOpen[20];
- if (!LoadStringW(shell32_hInstance, IDS_OPEN_VERB, wszOpen, _countof(wszOpen)))
- *wszOpen = L'\0';
+ CStringW strOpen(MAKEINTRESOURCEW(IDS_OPEN_VERB));
+ CStringW strOpenFileLoc(MAKEINTRESOURCEW(IDS_OPENFILELOCATION));
MENUITEMINFOW mii;
ZeroMemory(&mii, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
- mii.dwTypeData = wszOpen;
+ mii.dwTypeData = strOpen.GetBuffer();
mii.cch = wcslen(mii.dwTypeData);
mii.wID = idCmdFirst + id++;
mii.fState = MFS_DEFAULT | MFS_ENABLED;
mii.fType = MFT_STRING;
- if (!InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
+ if (!InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii))
+ return E_FAIL;
+
+ mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
+ mii.dwTypeData = strOpenFileLoc.GetBuffer();
+ mii.cch = wcslen(mii.dwTypeData);
+ mii.wID = idCmdFirst + id++;
+ mii.fState = MFS_ENABLED;
+ mii.fType = MFT_STRING;
+ if (!InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii))
return E_FAIL;
- m_iIdOpen = 1;
+
+ UNREFERENCED_PARAMETER(indexMenu);
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, id);
}
-HRESULT STDMETHODCALLTYPE CShellLink::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
+HRESULT CShellLink::DoOpenFileLocation()
{
- LPWSTR args = NULL;
- LPWSTR path = NULL;
+ WCHAR szParams[MAX_PATH + 64];
+ StringCbPrintfW(szParams, sizeof(szParams), L"/select,%s", m_sPath);
+
+ INT_PTR ret;
+ ret = reinterpret_cast<INT_PTR>(ShellExecuteW(NULL, NULL,
L"explorer.exe", szParams,
+ NULL, m_Header.nShowCommand));
+ if (ret <= 32)
+ {
+ ERR("ret: %08lX\n", ret);
+ return E_FAIL;
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE CShellLink::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
+{
TRACE("%p %p\n", this, lpici);
if (lpici->cbSize < sizeof(CMINVOKECOMMANDINFO))
@@ -2627,7 +2652,25 @@ HRESULT STDMETHODCALLTYPE
CShellLink::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
return hr;
}
- path = strdupW(m_sPath);
+ UINT idCmd = LOWORD(lpici->lpVerb);
+ TRACE("idCmd: %d\n", idCmd);
+
+ switch (idCmd)
+ {
+ case IDCMD_OPEN:
+ return DoOpen(lpici);
+ case IDCMD_OPENFILELOCATION:
+ return DoOpenFileLocation();
+ default:
+ return E_NOTIMPL;
+ }
+}
+
+HRESULT CShellLink::DoOpen(LPCMINVOKECOMMANDINFO lpici)
+{
+ HRESULT hr;
+ LPWSTR args = NULL;
+ LPWSTR path = strdupW(m_sPath);
if ( lpici->cbSize == sizeof(CMINVOKECOMMANDINFOEX) &&
(lpici->fMask & CMIC_MASK_UNICODE) )
diff --git a/dll/win32/shell32/CShellLink.h b/dll/win32/shell32/CShellLink.h
index dac5369fedf..7ad131c0284 100644
--- a/dll/win32/shell32/CShellLink.h
+++ b/dll/win32/shell32/CShellLink.h
@@ -51,16 +51,20 @@ public:
/* Link file formats */
#include "pshpack1.h"
-
struct volume_info
{
DWORD type;
DWORD serial;
WCHAR label[12]; /* assume 8.3 */
};
-
#include "poppack.h"
+ enum IDCMD
+ {
+ IDCMD_OPEN = 0,
+ IDCMD_OPENFILELOCATION
+ };
+
private:
/* Cached link header */
SHELL_LINK_HEADER m_Header;
@@ -83,13 +87,13 @@ private:
LPDBLIST m_pDBList; /* Optional data block list (in the extra data section) */
BOOL m_bInInit; // in initialization or not
HICON m_hIcon;
+ UINT m_idCmdFirst;
/* Pointers to strings inside Logo3/Darwin info blocks, cached for debug info
purposes only */
LPWSTR sProduct;
LPWSTR sComponent;
LPWSTR m_sLinkPath;
- INT m_iIdOpen; /* ID of the "Open" entry in the context menu
*/
CComPtr<IUnknown> m_site;
CComPtr<IDropTarget> m_DropTarget;
@@ -102,6 +106,9 @@ private:
HRESULT SetTargetFromPIDLOrPath(LPCITEMIDLIST pidl, LPCWSTR pszFile);
HICON CreateShortcutIcon(LPCWSTR wszIconPath, INT IconIndex);
+ HRESULT DoOpen(LPCMINVOKECOMMANDINFO lpici);
+ HRESULT DoOpenFileLocation();
+
public:
CShellLink();
~CShellLink();
diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc
index ac083431deb..e61b6c675fb 100644
--- a/dll/win32/shell32/lang/bg-BG.rc
+++ b/dll/win32/shell32/lang/bg-BG.rc
@@ -770,6 +770,7 @@ BEGIN
IDS_PASTE "Вмъкване"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc
index 1a4ba5be874..b2e25f93076 100644
--- a/dll/win32/shell32/lang/ca-ES.rc
+++ b/dll/win32/shell32/lang/ca-ES.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc
index eb4da556af9..b5f4c2c2616 100644
--- a/dll/win32/shell32/lang/cs-CZ.rc
+++ b/dll/win32/shell32/lang/cs-CZ.rc
@@ -775,6 +775,7 @@ BEGIN
IDS_PASTE "Vložit"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Složku '%1' nebylo možné vytvořit"
IDS_CREATEFOLDER_CAPTION "Složku nebylo možné vytvořit"
diff --git a/dll/win32/shell32/lang/da-DK.rc b/dll/win32/shell32/lang/da-DK.rc
index 445c85a043e..7a063778cab 100644
--- a/dll/win32/shell32/lang/da-DK.rc
+++ b/dll/win32/shell32/lang/da-DK.rc
@@ -775,6 +775,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/de-DE.rc b/dll/win32/shell32/lang/de-DE.rc
index 0061ff76d81..f0145f348be 100644
--- a/dll/win32/shell32/lang/de-DE.rc
+++ b/dll/win32/shell32/lang/de-DE.rc
@@ -770,6 +770,7 @@ BEGIN
IDS_PASTE "Einfügen"
IDS_EJECT "Auswerfen"
IDS_DISCONNECT "Trennen"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED " Der Ordner kann nicht erstellt werden
'%1'"
IDS_CREATEFOLDER_CAPTION " Der Ordner kann nicht erstellt werden."
diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc
index 0240442978f..aaf9db3c3b7 100644
--- a/dll/win32/shell32/lang/el-GR.rc
+++ b/dll/win32/shell32/lang/el-GR.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/en-GB.rc b/dll/win32/shell32/lang/en-GB.rc
index 80ae4fdfb72..7eb8229884e 100644
--- a/dll/win32/shell32/lang/en-GB.rc
+++ b/dll/win32/shell32/lang/en-GB.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/en-US.rc b/dll/win32/shell32/lang/en-US.rc
index 3e049ea5877..bce8bc31278 100644
--- a/dll/win32/shell32/lang/en-US.rc
+++ b/dll/win32/shell32/lang/en-US.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/es-ES.rc b/dll/win32/shell32/lang/es-ES.rc
index 95c57999784..1464b4d14f0 100644
--- a/dll/win32/shell32/lang/es-ES.rc
+++ b/dll/win32/shell32/lang/es-ES.rc
@@ -777,6 +777,7 @@ BEGIN
IDS_PASTE "Insertar"
IDS_EJECT "Extraer"
IDS_DISCONNECT "Desconectar"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "No se pudo crear la carpeta '%1'"
IDS_CREATEFOLDER_CAPTION "No se pudo crear la carpeta"
diff --git a/dll/win32/shell32/lang/et-EE.rc b/dll/win32/shell32/lang/et-EE.rc
index 295b6f3a4a8..e2e8cf41e28 100644
--- a/dll/win32/shell32/lang/et-EE.rc
+++ b/dll/win32/shell32/lang/et-EE.rc
@@ -776,6 +776,7 @@ BEGIN
IDS_PASTE "Kleebi"
IDS_EJECT "Väljuta"
IDS_DISCONNECT "Katkesta ühendus"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Ei saa luua kausta '%1'"
IDS_CREATEFOLDER_CAPTION "Ei saa kausta luua"
diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc
index c3d16d96d90..f6cd13e6878 100644
--- a/dll/win32/shell32/lang/fi-FI.rc
+++ b/dll/win32/shell32/lang/fi-FI.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc
index b28d8770a58..58464c856ff 100644
--- a/dll/win32/shell32/lang/fr-FR.rc
+++ b/dll/win32/shell32/lang/fr-FR.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Insérer"
IDS_EJECT "Éjecter"
IDS_DISCONNECT "Déconnecter"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Impossible de créer le dossier '%1'"
IDS_CREATEFOLDER_CAPTION "Impossible de créer un dossier"
diff --git a/dll/win32/shell32/lang/he-IL.rc b/dll/win32/shell32/lang/he-IL.rc
index ff7da470c61..9e63d54b428 100644
--- a/dll/win32/shell32/lang/he-IL.rc
+++ b/dll/win32/shell32/lang/he-IL.rc
@@ -771,6 +771,7 @@ BEGIN
IDS_PASTE "הכנס"
IDS_EJECT "הוצא"
IDS_DISCONNECT "נתק"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/hi-IN.rc b/dll/win32/shell32/lang/hi-IN.rc
index 76e7cc2a6d0..6903fe2372e 100644
--- a/dll/win32/shell32/lang/hi-IN.rc
+++ b/dll/win32/shell32/lang/hi-IN.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "पैस्ट"
IDS_EJECT "इजेक्ट"
IDS_DISCONNECT "डिस्कनेक्ट"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "फ़ोल्डर '%1' बनाने में असमर्थ"
IDS_CREATEFOLDER_CAPTION "फ़ोल्डर बनाने में असमर्थ"
diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc
index d840240b990..037d7f8e4c9 100644
--- a/dll/win32/shell32/lang/hu-HU.rc
+++ b/dll/win32/shell32/lang/hu-HU.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/id-ID.rc b/dll/win32/shell32/lang/id-ID.rc
index 4e9a7c654e2..4d5abb5d14e 100644
--- a/dll/win32/shell32/lang/id-ID.rc
+++ b/dll/win32/shell32/lang/id-ID.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Tempel"
IDS_EJECT "Keluarkan"
IDS_DISCONNECT "Putuskan"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Tidak bisa membuat folder folder '%1'"
IDS_CREATEFOLDER_CAPTION "Tidak bisa membuat folder"
diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc
index a109c0d74fc..fa5cd0d287e 100644
--- a/dll/win32/shell32/lang/it-IT.rc
+++ b/dll/win32/shell32/lang/it-IT.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Inserisci"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc
index ac55db842ff..56a7ca99a3d 100644
--- a/dll/win32/shell32/lang/ja-JP.rc
+++ b/dll/win32/shell32/lang/ja-JP.rc
@@ -766,6 +766,7 @@ BEGIN
IDS_PASTE "挿入"
IDS_EJECT "取り出し"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "フォルダ '%1' を作成できません"
IDS_CREATEFOLDER_CAPTION "フォルダを作成できません"
diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc
index 3647553a1f0..4239b7e3da5 100644
--- a/dll/win32/shell32/lang/ko-KR.rc
+++ b/dll/win32/shell32/lang/ko-KR.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc
index db458b1b9e1..cb9ec3ef3e9 100644
--- a/dll/win32/shell32/lang/nl-NL.rc
+++ b/dll/win32/shell32/lang/nl-NL.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/no-NO.rc b/dll/win32/shell32/lang/no-NO.rc
index 8dfeb901bba..16c0a4333ea 100644
--- a/dll/win32/shell32/lang/no-NO.rc
+++ b/dll/win32/shell32/lang/no-NO.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Sett inn"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc
index 66461af8b7b..38724ea0bbd 100644
--- a/dll/win32/shell32/lang/pl-PL.rc
+++ b/dll/win32/shell32/lang/pl-PL.rc
@@ -774,6 +774,7 @@ BEGIN
IDS_PASTE "Włóż"
IDS_EJECT "Wysuń"
IDS_DISCONNECT "Odłącz"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Nie można utworzyć folderu '%1'"
IDS_CREATEFOLDER_CAPTION "Nie można utworzyć folderu"
diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc
index 2e9abdc3702..035a4ae514a 100644
--- a/dll/win32/shell32/lang/pt-BR.rc
+++ b/dll/win32/shell32/lang/pt-BR.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Inserir"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc
index 26e26d915cf..685f86cf1bc 100644
--- a/dll/win32/shell32/lang/pt-PT.rc
+++ b/dll/win32/shell32/lang/pt-PT.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Inserir"
IDS_EJECT "Eject"
IDS_DISCONNECT "Desligar"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Impossivel de criar pasta '%1'"
IDS_CREATEFOLDER_CAPTION "Impossivel de criar pasta"
diff --git a/dll/win32/shell32/lang/ro-RO.rc b/dll/win32/shell32/lang/ro-RO.rc
index a53281668b8..5d6c56c8a7c 100644
--- a/dll/win32/shell32/lang/ro-RO.rc
+++ b/dll/win32/shell32/lang/ro-RO.rc
@@ -771,6 +771,7 @@ BEGIN
IDS_PASTE "&Lipește"
IDS_EJECT "S&coate"
IDS_DISCONNECT "Deconectea&ză"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Nu poate fi creat un dosar cu numele „%1”"
IDS_CREATEFOLDER_CAPTION "Nu poate fi creat dosar"
diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc
index 2072afb9558..36002d87d62 100644
--- a/dll/win32/shell32/lang/ru-RU.rc
+++ b/dll/win32/shell32/lang/ru-RU.rc
@@ -776,6 +776,7 @@ BEGIN
IDS_PASTE "Вставить"
IDS_EJECT "Извлечь"
IDS_DISCONNECT "Отсоединить"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Невозможно создать папку '%1'"
IDS_CREATEFOLDER_CAPTION "Невозможно создать папку"
diff --git a/dll/win32/shell32/lang/sk-SK.rc b/dll/win32/shell32/lang/sk-SK.rc
index 96f9637d067..165f210a79d 100644
--- a/dll/win32/shell32/lang/sk-SK.rc
+++ b/dll/win32/shell32/lang/sk-SK.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Vložiť"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc
index 01c5658256d..678c5f5f7be 100644
--- a/dll/win32/shell32/lang/sl-SI.rc
+++ b/dll/win32/shell32/lang/sl-SI.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Paste"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/sq-AL.rc b/dll/win32/shell32/lang/sq-AL.rc
index a7718e6dab9..f65bf86b3f2 100644
--- a/dll/win32/shell32/lang/sq-AL.rc
+++ b/dll/win32/shell32/lang/sq-AL.rc
@@ -773,6 +773,7 @@ BEGIN
IDS_PASTE "Fut"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Unable to create the folder '%1'"
IDS_CREATEFOLDER_CAPTION "Unable to create folder"
diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc
index 029468c5ea6..e17328ecc79 100644
--- a/dll/win32/shell32/lang/sv-SE.rc
+++ b/dll/win32/shell32/lang/sv-SE.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Klistra in"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Kunde inte skapa mappen '%1'"
IDS_CREATEFOLDER_CAPTION "Kunde inte skapa mapp"
diff --git a/dll/win32/shell32/lang/tr-TR.rc b/dll/win32/shell32/lang/tr-TR.rc
index 6b491372bf9..bc6addfed2b 100644
--- a/dll/win32/shell32/lang/tr-TR.rc
+++ b/dll/win32/shell32/lang/tr-TR.rc
@@ -771,6 +771,7 @@ BEGIN
IDS_PASTE "Yapıştır"
IDS_EJECT "Eject"
IDS_DISCONNECT "Disconnect"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED """%1"" dizini
oluşturulamıyor."
IDS_CREATEFOLDER_CAPTION "Dizin Oluşturulamıyor"
diff --git a/dll/win32/shell32/lang/uk-UA.rc b/dll/win32/shell32/lang/uk-UA.rc
index 96b20ade200..97ec05510e7 100644
--- a/dll/win32/shell32/lang/uk-UA.rc
+++ b/dll/win32/shell32/lang/uk-UA.rc
@@ -769,6 +769,7 @@ BEGIN
IDS_PASTE "Вставити"
IDS_EJECT "Витягнути"
IDS_DISCONNECT "Відключити"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "Не вдалося створити папку '%1'"
IDS_CREATEFOLDER_CAPTION "Не вдалося створити папку"
diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc
index b8881df8db0..f3debf50826 100644
--- a/dll/win32/shell32/lang/zh-CN.rc
+++ b/dll/win32/shell32/lang/zh-CN.rc
@@ -777,6 +777,7 @@ BEGIN
IDS_PASTE "贴上"
IDS_EJECT "弹出"
IDS_DISCONNECT "断开"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "无法创建文件夹 '%1'"
IDS_CREATEFOLDER_CAPTION "无法创建文件夹"
diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc
index f3d35038a32..31faf69e845 100644
--- a/dll/win32/shell32/lang/zh-TW.rc
+++ b/dll/win32/shell32/lang/zh-TW.rc
@@ -778,6 +778,7 @@ BEGIN
IDS_PASTE "插入"
IDS_EJECT "退出"
IDS_DISCONNECT "中斷"
+ IDS_OPENFILELOCATION "Open f&ile location"
IDS_CREATEFOLDER_DENIED "無法建立資料夾 '%1'"
IDS_CREATEFOLDER_CAPTION "無法建立資料夾"
diff --git a/dll/win32/shell32/shresdef.h b/dll/win32/shell32/shresdef.h
index 766f32f07dc..2b729d6a2ea 100644
--- a/dll/win32/shell32/shresdef.h
+++ b/dll/win32/shell32/shresdef.h
@@ -227,6 +227,8 @@
#define IDS_EJECT 339
#define IDS_DISCONNECT 340
+#define IDS_OPENFILELOCATION 341
+
#define IDS_MENU_EMPTY 34561
/* Note: those strings are referenced from the registry */