我正在建立關於filecontextmenu的dll,我需要在鼠標右鍵單擊時獲取執行路徑和快捷方式displaynem。現在我可以找到路徑,但不知道如何獲取顯示名稱。 EX:桌面上的IE快捷方式,我需要用戶可以編輯的名稱「IE」,而不是「iexplore.exe」。當鼠標右鍵單擊(C++/c#)時,如何獲得快捷方式顯示名稱
這裏是一個reference非常相似,但我無法找到我應該做的,當桌面
快捷方式,如果有任何建議,我將非常感激,這裏是我的代碼和感謝。
IFACEMETHODIMP FileContextMenuExt::Initialize(
LPCITEMIDLIST pidlFolder, LPDATAOBJECT pDataObj, HKEY hKeyProgID)
if (NULL == pDataObj)
return E_INVALIDARG;
HRESULT hr = E_FAIL;
FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stm;
// The pDataObj pointer contains the objects being acted upon. In this
// example, we get an HDROP handle for enumerating the selected files and
// folders.
if (SUCCEEDED(pDataObj->GetData(&fe, &stm)))
{
// Get an HDROP handle.
HDROP hDrop = static_cast<HDROP>(GlobalLock(stm.hGlobal));
if (hDrop != NULL)
{
UINT nFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
if (nFiles > 0)
{
vecSelectFiles.clear();
std::vector<std::wstring> vecTotalFiles;
vecTotalFiles.clear();
for(int i=0; i<(int)nFiles; ++i)
{
wchar_t wszThisFile[MAX_PATH];
memset(wszThisFile, 0, MAX_PATH*2);
// Here get excution path
if(DragQueryFileW(hDrop, i, wszThisFile, MAX_PATH) != 0)
{
vecTotalFiles.push_back(wszThisFile);
hr = S_OK;
}
}
}
GlobalUnlock(stm.hGlobal);
}
ReleaseStgMedium(&stm);
}
// If any value other than S_OK is returned from the method, the context
// menu item is not displayed.
return hr;
顯示類型是我對這個接下來的學習,我會嘗試。真的非常感謝 – Tauz
我嘗試這種方式,但GetDisplayName()獲取文件路徑執行名稱 例如:VS2008快捷方式將得到「devenv.exe」 – Tauz
使用SIGDN_NORMALDISPLAY它應該返回快捷方式名稱,你用過那個嗎? –