Home » System & API » How to clear Start Menu -> Run MRU list
How to clear Start Menu -> Run MRU list
Posted on January 4, 2009
1 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 | 'System & API - How to clear Start Menu -> Run MRU list Option Explicit Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _ ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _ (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _ lpType As Long, lpData As Any, lpcbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _ (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _ lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, _ lpcbData As Long) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" _ (ByVal hKey As Long, ByVal lpValueName As String) As Long Private Const ERROR_SUCCESS = 0& Private Const HKEY_CURRENT_USER = &H80000001 Private Const STANDARD_RIGHTS_ALL = &H1F0000 Private Const KEY_QUERY_VALUE = &H1 Private Const KEY_SET_VALUE = &H2 Private Const KEY_CREATE_SUB_KEY = &H4 Private Const KEY_ENUMERATE_SUB_KEYS = &H8 Private Const KEY_NOTIFY = &H10 Private Const KEY_CREATE_LINK = &H20 Private Const SYNCHRONIZE = &H100000 Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or _ KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And _ (Not SYNCHRONIZE)) Private Sub Command1_Click() Dim hKey As Long Dim value_name_len As Long Dim value_name As String Dim value_data(1 To 1024) As Byte Dim value_data_len As Long Dim value_type As Long Dim value_data_string As String Dim i As Integer ' Open the key. If RegOpenKeyEx(HKEY_CURRENT_USER, _ "Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU", 0&, _ KEY_ALL_ACCESS, hKey) <> ERROR_SUCCESS Then MsgBox "Error opening key." Exit Sub End If ' Delete the key's values. Do value_name_len = 1024 value_name = Space$(value_name_len) value_data_len = 1024 If RegEnumValue(hKey, 0, value_name, value_name_len, 0, value_type, value_data(1), _ value_data_len) <> ERROR_SUCCESS Then Exit Do ' Get the program name the slow way. value_data_string = "" For i = 1 To value_data_len - 1 value_data_string = value_data_string & Chr$(value_data(i)) Next i Debug.Print "Removing " & value_data_string ' Remove the value. value_name = Left$(value_name, value_name_len) RegDeleteValue hKey, value_name Loop ' Close the key. If RegCloseKey(hKey) <> ERROR_SUCCESS Then MsgBox "Error closing key." End If MsgBox "Done" End Sub |
Enjoy this article?
Filed under: System & API
Leave a comment