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}
原文地址:https://www.cnblogs.com/iHqq/p/843974.html