快捷方式的讀取和創(chuàng)建
一、快捷方式的獲取
SHGetShortcutTarget
功能:
獲取快捷方式的目標(biāo)路徑
原型:
BOOL SHGetShortcutTarget(
LPTSTR szShortcut,
LPTSTR szTarget,
int cbMax
);
參數(shù):
szShortcut :包含快捷方式名字的字符串
szTarget :包含快捷方式目標(biāo)路徑的字符串, 字符串的大小至少是cbMax。
cbMax :將被拷貝到緩存szTarget的最大字符串
返回值:
成功返回TRUE,否則返回FALSE。
示例代碼:
TCHAR StartMenuFilePath[MAX_PATH];
::SHGetSpecialFolderPath(NULL, StartMenuFilePath, CSIDL_PROGRAMS, FALSE);
TCHAR szShortPath[MAX_PATH];
wsprintf(szShortPath, _T("%s\\%s"), StartMenuFilePath, _T("搜索.lnk"));
TCHAR szFilePath[MAX_PATH];
:SHGetShortcutTarget(szShortPath, szFilePath, sizeof(szFilePath));
執(zhí)行完畢后,
szFilePath 的值為shfind.exe
二、快捷方式的創(chuàng)建
SHCreateShortcut
功能:
創(chuàng)建快捷方式。
原型:
DWORD WINAPI SHCreateShortcut(
LPTSTR szShortcut,
LPTSTR szTarget
);
參數(shù):
szShortcut :包含快捷方式名字和路徑的字符串。在路徑指定的位置創(chuàng)建快捷方式。
szTarget: 包含快捷方式目標(biāo)路徑和參數(shù)的字符串。大小限定在256個(gè)字符以內(nèi)。
返回值:
成功返回TRUE,否則返回FALSE。如果指定的快捷方式已經(jīng)存在的話將返回FALSE。
示例代碼:
SHCreateShortcut(_T("\\搜索.lnk"), _T("shfind.exe"));
執(zhí)行結(jié)果為在根目錄下創(chuàng)建了“搜索.lnk”這個(gè)快捷方式文件。
三、補(bǔ)充說明
這里主要針對獲取快捷方式的內(nèi)容進(jìn)行幾點(diǎn)說明:
我們獲取快捷方式的時(shí)候,內(nèi)容不一定只包含路徑,有可能存在一下的情況,如:
1、路徑后跟隨名稱
\Windows\“開始”菜單\程序\任務(wù).lnk
2、縮寫名
poutlook.exe tasks
\Windows\“開始”菜單\程序\ActiveSync.lnk
:MSSYNCAPP
3、路徑后跟隨數(shù)字
\Windows\“開始”菜單\程序\游戲\icon.lnk
shellres.dll,-8229
考慮以上這幾種情況,我們在獲取快捷方式路徑時(shí),需要對路徑做一些特殊處理。這里重點(diǎn)說一下第二種情況,這個(gè)縮寫代表什么意思?在網(wǎng)上搜索了一下,原來我們可以在[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Rai\]鍵值下找到名為:MSSYNCAPP的子鍵,鍵值為1的子鍵數(shù)值指明了名為:MSSYNCAPP的程序名稱。但我們從這里獲得的值,有時(shí)也不是路徑,還會(huì)再次出現(xiàn)上述三種情況。所以,如果我們想從快捷方式中獲取路徑的話,就需要留意一些了。
至于為什么會(huì)這樣,我還不是很明白。
posted on 2009-07-23 18:13
Sandy 閱讀(1632)
評論(1) 編輯 收藏 引用 所屬分類:
Windows Mobile