使用系统的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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85
