如何刪除SP Home介面的Recent Programs表徵圖

來源:互聯網
上載者:User

來自:http://blog.csdn.net/zxjl0214/archive/2008/10/10/3051928.aspx

一位高手說只要修改註冊表索引值就可以去掉Home介面上的Recent Programs表徵圖:

[HKEY_CURRENT_USER/System/State/Shell]

"Start MRU"

我試了一下,果然可以,特發帖share一下。

 

e.g. 我想刪除簡訊表徵圖,代碼如下:

RemoveRecentPrograms(_T("//Windows//Start Menu//Messaging.lnk"));

  1. BOOL RemoveRecentPrograms(TCHAR *szLnkPath)
  2. {
  3.     BOOL bRet = FALSE;
  4.     HKEY hKey = NULL;
  5.     BYTE *pData = NULL;
  6.     BYTE *pDataNew = NULL;
  7.     BYTE *pIndex = NULL;
  8.     DWORD dwType;
  9.     DWORD cbData;
  10.     int iLnkCount = 0;
  11.     int iCurLen = 0;
  12.     if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_CURRENT_USER, _T("System//State//Shell"), 0, 0,&hKey))
  13.     {
  14.         goto Exit;
  15.     }
  16.     if(ERROR_SUCCESS != RegQueryValueEx(hKey, _T("Start MRU"), NULL, &dwType, NULL, &cbData))
  17.     {
  18.         goto Exit;
  19.     }
  20.     pData = new BYTE[cbData];
  21.     if (!pData)
  22.     {
  23.         goto Exit;
  24.     }
  25.     if(ERROR_SUCCESS != RegQueryValueEx(hKey, _T("Start MRU"), NULL, &dwType, pData, &cbData))
  26.     {
  27.         goto Exit;
  28.     }
  29.     iLnkCount = pData[0];
  30.     pIndex = pData + 4;
  31.     iCurLen = 4;
  32.     for (int i = 0; i < iLnkCount; i++)
  33.     {
  34.         int iLnkLen = pIndex[0];
  35.         if (!_tcscmp(szLnkPath, (TCHAR *)(pIndex + 12)))
  36.         {
  37.             pDataNew = new BYTE[cbData - iLnkLen];
  38.             if (!pDataNew)
  39.             {
  40.                 goto Exit;
  41.             }
  42.             memcpy(pDataNew, pData, iCurLen);
  43.             if (iCurLen + iLnkLen < cbData)
  44.             {
  45.                 memcpy(pDataNew + iCurLen, pData + iCurLen + iLnkLen, cbData - iCurLen - iLnkLen);
  46.             }
  47.             
  48.             pDataNew[0]--;
  49.             if (ERROR_SUCCESS != RegSetValueEx(hKey, _T("Start MRU"), 0, dwType, pDataNew, cbData - iLnkLen))
  50.             {
  51.                 goto Exit;
  52.             }
  53.             bRet = TRUE;
  54.             break;
  55.         }
  56.         pIndex += iLnkLen;
  57.         iCurLen +=iLnkLen;
  58.     }
  59. Exit:
  60.     if (pData)
  61.     {
  62.         delete [] pData;
  63.     }
  64.      (pDataNew)
  65.     {
  66.         delete [] pDataNew;
  67.     }
  68.     
  69.     if (hKey)
  70.     {
  71.         RegCloseKey(hKey);
  72.     }
  73.     return bRet;
  74. }

引用一下bearbrotherji的研究成果:

1.開始四個BYTE,比如0A 00 00 00,
第一個BYTE為當前最近使用過的捷徑的個數,也就是在主介面裡顯示的個數。這個通常在用過一段時間以後都是0xA(十個);
2.這四個Byte之後,則是所有捷徑,我們只舉例說明其中一個,比如:
        0x50, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
        0xFF, 0xFF, 0xFF, 0xFF, 0x5C, 0x00, 0x57, 0x00,
        0x69, 0x00, 0x6E, 0x00, 0x64, 0x00, 0x6F, 0x00,
        0x77, 0x00, 0x73, 0x00, 0x5C, 0x00, 0x53, 0x00,
        0x74, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00,
        0x20, 0x00, 0x4D, 0x00, 0x65, 0x00, 0x6E, 0x00,
        0x75, 0x00, 0x5C, 0x00, 0x53, 0x00, 0x69, 0x00,
        0x6D, 0x00, 0x54, 0x00, 0x6B, 0x00, 0x55, 0x00,
        0x49, 0x00, 0x2E, 0x00, 0x6C, 0x00, 0x6E, 0x00,
        0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
每個捷徑的開頭都是4個Bytes,然後緊跟著8個Bytes的“0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF”,這4個Bytes的第一個字元會有所變化,但目前我並不清楚他的含義,不過這並不影響處理;
再之後就是捷徑檔案的路徑和檔案名稱對應的字串,
最後一定有一個以4bytes地址對齊的4Bytes全0資料,以表示這個捷徑的結束;

如果你要實現如你所說的功能,將最近使用過的某個捷徑表徵圖從主介面上刪除,
首先將第一個Byte的值減小1,
接著,在整個字串中找到你要刪除的捷徑對應的完整字串,並將這一段刪除,而保留其餘的(記住不要把之後的字串也給刪除了,要連上之前的,再寫回);

 

我的補充:

每個捷徑的開頭都是4個Bytes,表示這個lnk的長度,包括開頭的4個位元組、“0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF”這8個位元組和lnk的字串長度(包括填充的0x00位元組)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.