smartphone 下读取快捷方式 (2)
使用系统的api读取快捷方式是没有问题的SHGetShortcutTarget,下面给了,自己写得读取的例子,虽然自己写的很辛苦,但最后还是使用的系统的~~
1TCHAR* CMainDlg::GetShortCut(LPCTSTR strFileName)
2{
3 HANDLE hFile = CreateFile(strFileName,GENERIC_READ,FILE_SHARE_READ,
4 NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
5 if(hFile != INVALID_HANDLE_VALUE)
6 {
7 char szBuffer[255]; // buffer for receives data
8 DWORD dwNumOfBytesRead; // pointer to number of bytes read
9 ZeroMemory(szBuffer, sizeof(szBuffer));
10 if(ReadFile(hFile,szBuffer,255, &dwNumOfBytesRead, NULL))
11 {
12 CloseHandle(hFile);
13 if(dwNumOfBytesRead != 0)
14 {
15 char* pLastChar = strchr(szBuffer,'#');
16 pLastChar++;
17 int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
18 CP_ACP,MB_COMPOSITE,pLastChar, //要转换的Ansi字符串
19 -1, //自动计算长度
20 0,
21 0
22 );
23 wchar_t *pwText;
24 pwText = new wchar_t[widecharlen];
25 MultiByteToWideChar( //从Ansi转换到Unicode字符
26 CP_ACP,
27 MB_COMPOSITE,
28 pLastChar,
29 -1,
30 pwText,widecharlen);
31 return pwText;
32 }
33 }
34 }
35 return NULL;
36}
37void CMainDlg::LoadShortCut()
38{
39 //DO key short press' shortcut
40 //SetDlgItemText(IDC_DOSHORT,GetShortCut(_T("\\Storage\\Keys\\DoKeySp.lnk")));
41
42 TCHAR szBuffer[MAX_PATH];
43 ZeroMemory(szBuffer,MAX_PATH);
44 SHGetShortcutTarget(_T("\\Storage\\Keys\\DoKeySp.lnk"),szBuffer,MAX_PATH);
45 SetDlgItemText(IDC_DOSHORT,szBuffer);
46
47 //DO key long press' shortcut
48 //SetDlgItemText(IDC_DOLONG,GetShortCut(_T("\\Storage\\Keys\\DoKeyLp.lnk")));
49
50 ZeroMemory(szBuffer,MAX_PATH);
51 SHGetShortcutTarget(__T("\\Storage\\Keys\\DoKeyLp.lnk"),szBuffer,MAX_PATH);
52 SetDlgItemText(IDC_DOLONG,szBuffer);
53
54 //MO key short press' shortcut
55 //SetDlgItemText(IDC_MOSHORT,GetShortCut(_T("\\Storage\\Keys\\MoSp.lnk")));
56
57 ZeroMemory(szBuffer,MAX_PATH);
58 SHGetShortcutTarget(_T("\\Storage\\Keys\\MoSp.lnk"),szBuffer,MAX_PATH);
59 SetDlgItemText(IDC_MOSHORT,szBuffer);
60
61
62 //MO key long press' shortcut
63 //SetDlgItemText(IDC_MOLONG,GetShortCut(_T("\\Storage\\Keys\\MoLp.lnk")));
64
65 ZeroMemory(szBuffer,MAX_PATH);
66 SHGetShortcutTarget(_T("\\Storage\\Keys\\MoLp.lnk"),szBuffer,MAX_PATH);
67 SetDlgItemText(IDC_MOLONG,szBuffer);
68
69 //Camera key short press' shortcut
70 //SetDlgItemText(IDC_CAMERASHORT,GetShortCut(_T("\\Storage\\Keys\\CameraSp.lnk")));
71
72 ZeroMemory(szBuffer,MAX_PATH);
73 SHGetShortcutTarget(_T("\\Storage\\Keys\\CameraSp.lnk"),szBuffer,MAX_PATH);
74 SetDlgItemText(IDC_CAMERASHORT,szBuffer);
75
76 //Camera key long press' shortcut
77 //SetDlgItemText(IDC_CAMERALONG,GetShortCut(_T("\\Storage\\Keys\\CameraLp.lnk")));
78
79 ZeroMemory(szBuffer,MAX_PATH);
80 SHGetShortcutTarget(_T("\\Storage\\Keys\\CameraLp.lnk"),szBuffer,MAX_PATH);
81 SetDlgItemText(IDC_CAMERALONG,szBuffer);
82
83 CEdit edit(GetDlgItem(IDC_DOSHORT));
84 edit.SetFocus(); //set focus on IDC_DOSHORT
85}
2{
3 HANDLE hFile = CreateFile(strFileName,GENERIC_READ,FILE_SHARE_READ,
4 NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
5 if(hFile != INVALID_HANDLE_VALUE)
6 {
7 char szBuffer[255]; // buffer for receives data
8 DWORD dwNumOfBytesRead; // pointer to number of bytes read
9 ZeroMemory(szBuffer, sizeof(szBuffer));
10 if(ReadFile(hFile,szBuffer,255, &dwNumOfBytesRead, NULL))
11 {
12 CloseHandle(hFile);
13 if(dwNumOfBytesRead != 0)
14 {
15 char* pLastChar = strchr(szBuffer,'#');
16 pLastChar++;
17 int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
18 CP_ACP,MB_COMPOSITE,pLastChar, //要转换的Ansi字符串
19 -1, //自动计算长度
20 0,
21 0
22 );
23 wchar_t *pwText;
24 pwText = new wchar_t[widecharlen];
25 MultiByteToWideChar( //从Ansi转换到Unicode字符
26 CP_ACP,
27 MB_COMPOSITE,
28 pLastChar,
29 -1,
30 pwText,widecharlen);
31 return pwText;
32 }
33 }
34 }
35 return NULL;
36}
37void CMainDlg::LoadShortCut()
38{
39 //DO key short press' shortcut
40 //SetDlgItemText(IDC_DOSHORT,GetShortCut(_T("\\Storage\\Keys\\DoKeySp.lnk")));
41
42 TCHAR szBuffer[MAX_PATH];
43 ZeroMemory(szBuffer,MAX_PATH);
44 SHGetShortcutTarget(_T("\\Storage\\Keys\\DoKeySp.lnk"),szBuffer,MAX_PATH);
45 SetDlgItemText(IDC_DOSHORT,szBuffer);
46
47 //DO key long press' shortcut
48 //SetDlgItemText(IDC_DOLONG,GetShortCut(_T("\\Storage\\Keys\\DoKeyLp.lnk")));
49
50 ZeroMemory(szBuffer,MAX_PATH);
51 SHGetShortcutTarget(__T("\\Storage\\Keys\\DoKeyLp.lnk"),szBuffer,MAX_PATH);
52 SetDlgItemText(IDC_DOLONG,szBuffer);
53
54 //MO key short press' shortcut
55 //SetDlgItemText(IDC_MOSHORT,GetShortCut(_T("\\Storage\\Keys\\MoSp.lnk")));
56
57 ZeroMemory(szBuffer,MAX_PATH);
58 SHGetShortcutTarget(_T("\\Storage\\Keys\\MoSp.lnk"),szBuffer,MAX_PATH);
59 SetDlgItemText(IDC_MOSHORT,szBuffer);
60
61
62 //MO key long press' shortcut
63 //SetDlgItemText(IDC_MOLONG,GetShortCut(_T("\\Storage\\Keys\\MoLp.lnk")));
64
65 ZeroMemory(szBuffer,MAX_PATH);
66 SHGetShortcutTarget(_T("\\Storage\\Keys\\MoLp.lnk"),szBuffer,MAX_PATH);
67 SetDlgItemText(IDC_MOLONG,szBuffer);
68
69 //Camera key short press' shortcut
70 //SetDlgItemText(IDC_CAMERASHORT,GetShortCut(_T("\\Storage\\Keys\\CameraSp.lnk")));
71
72 ZeroMemory(szBuffer,MAX_PATH);
73 SHGetShortcutTarget(_T("\\Storage\\Keys\\CameraSp.lnk"),szBuffer,MAX_PATH);
74 SetDlgItemText(IDC_CAMERASHORT,szBuffer);
75
76 //Camera key long press' shortcut
77 //SetDlgItemText(IDC_CAMERALONG,GetShortCut(_T("\\Storage\\Keys\\CameraLp.lnk")));
78
79 ZeroMemory(szBuffer,MAX_PATH);
80 SHGetShortcutTarget(_T("\\Storage\\Keys\\CameraLp.lnk"),szBuffer,MAX_PATH);
81 SetDlgItemText(IDC_CAMERALONG,szBuffer);
82
83 CEdit edit(GetDlgItem(IDC_DOSHORT));
84 edit.SetFocus(); //set focus on IDC_DOSHORT
85}