smartphone 下读取快捷方式 (2)
使用系统的api读取快捷方式是没有问题的SHGetShortcutTarget,下面给了,自己写得读取的例子,虽然自己写的很辛苦,但最后还是使用的系统的~~
1
TCHAR* 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
}
37
void 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
}
TCHAR* 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 data8
DWORD dwNumOfBytesRead; // pointer to number of bytes read9
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
022
);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
}37
void CMainDlg::LoadShortCut()38
{39
//DO key short press' shortcut40
//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' shortcut48
//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' shortcut55
//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' shortcut63
//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' shortcut70
//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' shortcut77
//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_DOSHORT85
}



浙公网安备 33010602011771号