home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / RecentDocL18341012282004.psc / RecentDocList.frm < prev    next >
Text File  |  2004-12-28  |  22KB  |  675 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  3. Begin VB.Form RecentDocs 
  4.    Caption         =   "Tom Pydeski's RecentDocList Retriever"
  5.    ClientHeight    =   7560
  6.    ClientLeft      =   1530
  7.    ClientTop       =   1605
  8.    ClientWidth     =   9435
  9.    BeginProperty Font 
  10.       Name            =   "Tahoma"
  11.       Size            =   9.75
  12.       Charset         =   0
  13.       Weight          =   400
  14.       Underline       =   0   'False
  15.       Italic          =   0   'False
  16.       Strikethrough   =   0   'False
  17.    EndProperty
  18.    Icon            =   "RecentDocList.frx":0000
  19.    KeyPreview      =   -1  'True
  20.    LinkTopic       =   "Form1"
  21.    PaletteMode     =   1  'UseZOrder
  22.    ScaleHeight     =   7560
  23.    ScaleWidth      =   9435
  24.    StartUpPosition =   2  'CenterScreen
  25.    Begin MSComctlLib.ImageList ImageList1 
  26.       Left            =   2880
  27.       Top             =   6480
  28.       _ExtentX        =   1005
  29.       _ExtentY        =   1005
  30.       BackColor       =   -2147483643
  31.       ImageWidth      =   16
  32.       ImageHeight     =   16
  33.       MaskColor       =   12632256
  34.       _Version        =   393216
  35.       BeginProperty Images {2C247F25-8591-11D1-B16A-00C0F0283628} 
  36.          NumListImages   =   2
  37.          BeginProperty ListImage1 {2C247F27-8591-11D1-B16A-00C0F0283628} 
  38.             Picture         =   "RecentDocList.frx":12D2
  39.             Key             =   ""
  40.          EndProperty
  41.          BeginProperty ListImage2 {2C247F27-8591-11D1-B16A-00C0F0283628} 
  42.             Picture         =   "RecentDocList.frx":15EC
  43.             Key             =   ""
  44.          EndProperty
  45.       EndProperty
  46.    End
  47.    Begin VB.Timer Timer1 
  48.       Enabled         =   0   'False
  49.       Interval        =   100
  50.       Left            =   6240
  51.       Top             =   3480
  52.    End
  53.    Begin VB.TextBox Text1 
  54.       BeginProperty Font 
  55.          Name            =   "Tahoma"
  56.          Size            =   8.25
  57.          Charset         =   0
  58.          Weight          =   400
  59.          Underline       =   0   'False
  60.          Italic          =   0   'False
  61.          Strikethrough   =   0   'False
  62.       EndProperty
  63.       Height          =   285
  64.       Left            =   3120
  65.       TabIndex        =   1
  66.       Top             =   50
  67.       Width           =   6255
  68.    End
  69.    Begin VB.ListBox List2 
  70.       BeginProperty Font 
  71.          Name            =   "Tahoma"
  72.          Size            =   8.25
  73.          Charset         =   0
  74.          Weight          =   400
  75.          Underline       =   0   'False
  76.          Italic          =   0   'False
  77.          Strikethrough   =   0   'False
  78.       EndProperty
  79.       Height          =   5130
  80.       Left            =   3120
  81.       Sorted          =   -1  'True
  82.       TabIndex        =   2
  83.       Top             =   360
  84.       Visible         =   0   'False
  85.       Width           =   6255
  86.    End
  87.    Begin VB.ListBox List1 
  88.       BeginProperty Font 
  89.          Name            =   "Tahoma"
  90.          Size            =   8.25
  91.          Charset         =   0
  92.          Weight          =   400
  93.          Underline       =   0   'False
  94.          Italic          =   0   'False
  95.          Strikethrough   =   0   'False
  96.       EndProperty
  97.       Height          =   6690
  98.       Left            =   3120
  99.       Sorted          =   -1  'True
  100.       TabIndex        =   0
  101.       Top             =   360
  102.       Width           =   6255
  103.    End
  104.    Begin MSComctlLib.TreeView TV1 
  105.       Height          =   7140
  106.       Left            =   0
  107.       TabIndex        =   3
  108.       ToolTipText     =   "Press Delete to Clear entire selected Node"
  109.       Top             =   45
  110.       Width           =   3015
  111.       _ExtentX        =   5318
  112.       _ExtentY        =   12594
  113.       _Version        =   393217
  114.       LabelEdit       =   1
  115.       LineStyle       =   1
  116.       Sorted          =   -1  'True
  117.       Style           =   7
  118.       ImageList       =   "ImageList1"
  119.       BorderStyle     =   1
  120.       Appearance      =   1
  121.    End
  122.    Begin VB.Menu mFile 
  123.       Caption         =   "&File"
  124.       Begin VB.Menu mExit 
  125.          Caption         =   "E&xit"
  126.       End
  127.    End
  128.    Begin VB.Menu mEdit 
  129.       Caption         =   "&Edit"
  130.       Begin VB.Menu mFind 
  131.          Caption         =   "&Find in Current Key"
  132.          Shortcut        =   ^F
  133.       End
  134.       Begin VB.Menu mFindAll 
  135.          Caption         =   "Find in &All Keys"
  136.       End
  137.    End
  138. End
  139. Attribute VB_Name = "RecentDocs"
  140. Attribute VB_GlobalNameSpace = False
  141. Attribute VB_Creatable = False
  142. Attribute VB_PredeclaredId = True
  143. Attribute VB_Exposed = False
  144. 'Author:Tom Pydeski
  145. 'BitWise Industrial Automation, Inc.
  146. '
  147. 'this can also be added to this program
  148. 'Run Dialog Recent Menu
  149. 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
  150. 'HKEY_USERS\S-1-5-21-127730482-1884467411-3661661970-1007\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
  151. 'typed url list
  152. 'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs
  153. 'HKEY_USERS\S-1-5-21-127730482-1884467411-3661661970-1007\Software\Microsoft\Internet Explorer\TypedURLs
  154. 'then a listing...url1...url2...etc
  155. '
  156. 'This Program will read the Recent Doc List located in the registry at:
  157. 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
  158. 'This data is stored in a binary format, so we have to read the binary data into
  159. 'a byte array and build it into strings.
  160. 'As with all of my submissions, I have utilized code found on PSC and elsewhere
  161. 'for various functions, but the rest was written by me.
  162. 'Special thanks to Kegham, whose Winstartup 2004 project had some valuable code
  163. 'for enumerating and walking through registry keys and for some treeview pointers
  164. 'and to MrBoBo who also had some very useful code for the registry
  165. 'also to David Sykes for his XP style module that i have implemented in all
  166. 'of my projects for that XP Look
  167. 'once the key values are loaded into the list, pressing delete will delete the selected
  168. 'entry from the registry.
  169. '
  170. 'Disclaimer:
  171. 'THIS PROGRAM ACCESSES AND MODIFIES ENTRIES IN THE REGISTRY!
  172. 'I tested it only on my machine, which is windows XP service pack 2
  173. 'I am not responsible for any bad things that may happen due to the
  174. 'use of this program
  175. '
  176. 'As with all software using the registry
  177. 'BACKUP your registry before using
  178. 'This ran fine on my machine and the only thing it deletes are the
  179. 'binary entries for the recent doc list
  180. '
  181. Option Explicit
  182. ' This API function allows us to change the parent of any component that has a hWnd
  183. Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
  184. 'usage SetParent Check1.hwnd, Command1.hwnd
  185. Dim MaxFiles
  186. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  187. 'Declare the API function call.
  188. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  189. Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal sParam$) As Long
  190. ' Add API constant
  191. Const LB_ITEMFROMPOINT = &H1A9
  192. Const LB_SETTOPINDEX = &H197
  193. Const LB_FINDSTRING = &H18F
  194. Const LB_SELITEMRANGEEX = &H183
  195. Dim Findstr As String
  196. Dim FoundPos As Long
  197. Dim FoundLine As Long
  198. Dim fStart As Integer
  199. Dim Replstr  As String
  200. Dim Inits As Byte
  201. Dim LogFile$
  202. Dim LogFileOut$
  203. Dim i As Integer
  204. Dim OldIndex As Integer
  205. Dim hKey As Long
  206. Dim lRetVal As Long
  207. Dim Indy As Integer
  208. Dim SelectedKeyNum As Integer
  209. Dim Confirm As Long
  210.  
  211. Private Sub Form_Resize()
  212. If WindowState = vbMinimized Then Exit Sub
  213. 'maximize the height and width to fit the screen
  214. TV1.Height = (Me.Height - TV1.Top) - 850
  215. List1.Height = (Me.Height - List1.Top) - 850
  216. List1.Width = (Me.Width - List1.Left) - 200
  217. List2.Top = List1.Top
  218. List2.Height = List1.Height
  219. List2.Width = List1.Width
  220. Text1.Width = List1.Width
  221. End Sub
  222.  
  223. Private Sub mExit_Click()
  224. Unload Me
  225. Set RecentDocs = Nothing
  226. End
  227. End Sub
  228.  
  229. Private Sub List1_KeyDown(KeyCode As Integer, Shift As Integer)
  230. If KeyCode = vbKeyDelete Then
  231.     DeleteFromList True
  232. End If
  233. End Sub
  234.  
  235. Private Sub list1_DblClick()
  236. OldIndex = List1.ListIndex
  237. If OldIndex = -1 Then
  238. End If
  239. Text1.Text = List1.List(OldIndex)
  240. cont:
  241. End Sub
  242.  
  243. Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  244. Dim lParam&, Result&
  245. Indy = List1.ListIndex
  246. Beeep
  247. Text1.Text = List1.List(Indy)
  248. Exit Sub
  249. 'Result& = SendMessage(List1.hwnd, LB_SETTOPINDEX, INDY, lParam&)
  250. List1.Visible = False
  251. List1.TopIndex = Indy
  252. List1.Visible = True
  253. End Sub
  254.  
  255. Private Sub List1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  256. ' present related tip message
  257. Dim lXPoint As Long
  258. Dim lYPoint As Long
  259. Dim lIndex As Long
  260. '
  261. If Button = 0 Then ' if no button was pressed
  262.     lXPoint = CLng(X / Screen.TwipsPerPixelX)
  263.     lYPoint = CLng(Y / Screen.TwipsPerPixelY)
  264.     '
  265.     With List1
  266.         ' get selected item from list
  267.         lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal ((lYPoint * 65536) + lXPoint))
  268.         ' show tip or clear last one
  269.         If (lIndex >= 0) And (lIndex <= .ListCount) Then
  270.             .ToolTipText = .List(lIndex) & " " & .ItemData(lIndex)
  271.         Else
  272.             .ToolTipText = ""
  273.         End If
  274.     End With '(List1)
  275. End If '(button=0)
  276. End Sub
  277.  
  278. Private Sub List2_KeyDown(KeyCode As Integer, Shift As Integer)
  279. OldIndex = List2.ListIndex
  280. If KeyCode = vbKeyDelete Then
  281.     'open registry key
  282.     List1_KeyDown vbKeyDelete, 0
  283.     List2.RemoveItem (List2.ListIndex)
  284.     Refresh
  285.     DoEvents
  286.     List2.ListIndex = OldIndex
  287.     Refresh
  288.     DoEvents
  289.     List2.SetFocus
  290. End If
  291. End Sub
  292.  
  293. Private Sub List2_DblClick()
  294. OldIndex = List2.ListIndex
  295. If OldIndex = -1 Then
  296. End If
  297. End Sub
  298.  
  299. Private Sub List2_KeyPress(KeyAscii As Integer)
  300. If KeyAscii = 13 Then
  301.     List2_DblClick
  302. End If
  303. End Sub
  304.  
  305. Private Sub List2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  306. Dim lParam&, Result&
  307. Indy = List2.ListIndex
  308. Beeep
  309. Text1.Text = List2.List(Indy)
  310. Exit Sub
  311. 'Result& = SendMessage(List2.hwnd, LB_SETTOPINDEX, INDY, lParam&)
  312. List2.Visible = False
  313. List2.TopIndex = Indy
  314. List2.Visible = True
  315. End Sub
  316.  
  317. Private Sub List2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  318. ' present related tip message
  319. Dim lXPoint As Long
  320. Dim lYPoint As Long
  321. Dim lIndex As Long
  322. '
  323. If Button = 0 Then ' if no button was pressed
  324.     lXPoint = CLng(X / Screen.TwipsPerPixelX)
  325.     lYPoint = CLng(Y / Screen.TwipsPerPixelY)
  326.     '
  327.     With List2
  328.         ' get selected item from list
  329.         lIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, ByVal ((lYPoint * 65536) + lXPoint))
  330.         ' show tip or clear last one
  331.         If (lIndex >= 0) And (lIndex <= .ListCount) Then
  332.             .ToolTipText = .List(lIndex)
  333.         Else
  334.             .ToolTipText = ""
  335.         End If
  336.     End With '(List2)
  337. End If '(button=0)
  338. End Sub
  339.  
  340. Private Sub Exit_Click()
  341. Timer1.Enabled = False
  342. Unload Me
  343. 'CloseMutEx
  344. End
  345. End Sub
  346.  
  347. Private Sub Form_Load()
  348. On Error GoTo Oops
  349. AppDir = App.Path
  350. RecMax = 0
  351. AppName = App.EXEName
  352. ChDir App.Path
  353. TV1.Nodes.Clear 'clear tv1's of any previous nodes
  354. 'add root node
  355. TV1.Nodes.Add , , "Root", "RecentDocs", 1, 2
  356. '
  357. 'remove items from select
  358. List1.Clear
  359. List2.Height = List1.Height
  360. '
  361. getfile:
  362. GetRootBinary
  363. PopList (0)
  364. 'populate tree view with the subkeys
  365. For i = 1 To UBound(SubKeyName)
  366.     TV1.Nodes.Add "Root", tvwChild, "Key" & i, SubKeyName(i), 1, 2
  367. Next i
  368. 'now add for the following
  369. 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
  370. 'HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs
  371. TV1.Nodes.Add "Root", tvwNext, "RunMRU", "RunMRU", 1, 2
  372. TV1.Nodes.Add "Root", tvwNext, "TypedURLs", "TypedURLs", 1, 2
  373. '
  374. RecentDocs.Refresh
  375. GoTo Exit_Form_Load
  376. Oops:
  377. 'Abort=3,Retry=4,Ignore=5
  378. eTitle$ = App.Title & ": Error in Subroutine Form_Load "
  379. eMess$ = "Error # " & Err.Number & " - " & Err.Description & vbCrLf
  380. eMess$ = eMess$ & "Occurred in Form_Load"
  381. eMess$ = eMess$ & IIf(Erl <> 0, vbCrLf & " at line " & CStr(Erl) & ".", ".")
  382. Alarm
  383. mError = MsgBox(eMess$, vbAbortRetryIgnore, eTitle$)
  384. If mError = vbRetry Then Resume
  385. If mError = vbIgnore Then Resume Next
  386. Close
  387. Exit_Form_Load:
  388. Beeep
  389. End Sub
  390.  
  391. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  392. If UnloadMode <> 1 Then
  393.     Exit_Click
  394. End If
  395. End Sub
  396.  
  397. Private Sub Form_KeyPress(KeyAscii As Integer)
  398. If KeyAscii = 27 Then
  399.     List2.Visible = False
  400.     List1.Visible = True
  401.     Text1.Text = ""
  402. End If
  403. End Sub
  404.  
  405. Private Sub mfind_Click()
  406. Dim fMess$
  407. Screen.MousePointer = 11
  408. Dim FindIn As String
  409. fStart = 0
  410. FindIn = InputBox("Enter the string to find", "Find in THIS key...", Findstr)
  411. Findstr = FindIn
  412. If Findstr = "" Then GoTo nofind
  413. ' Find the text specified in the listbox control.
  414. 'i could use the api call, but it works on a matchcase basis
  415. 'so i would rather do it the old fashioned way
  416. FoundPos = -1
  417. Screen.MousePointer = 11
  418. For i = 0 To List1.ListCount - 1
  419.     If InStr(1, List1.List(i), Findstr, vbTextCompare) > 0 Then
  420.         List1.TopIndex = i
  421.         Text1.Text = List1.List(i)
  422.         FoundPos = i
  423.         'Exit For
  424.     End If
  425. Next i
  426. If FoundPos <> -1 Then
  427.     ' Returns number of line containing found text.
  428.     Beeep
  429.     fMess$ = "Found in Value " & CStr(FoundPos)
  430.     GoTo nofind
  431. End If
  432. Alarm
  433. MsgBox Findstr & " not found!"
  434. nofind:
  435. Screen.MousePointer = 0
  436. End Sub
  437.  
  438. Private Sub mFindAll_Click()
  439. 'finds a string in all of the subkeys within the recentdocs key
  440. Dim FindIn As String
  441. Dim fMess$
  442. Dim j As Integer
  443. Screen.MousePointer = 11
  444. 'first lets read all of the trees
  445. For j = 1 To RecentSubKeys
  446.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\" & SubKeyName(j)
  447.     GetBinary sKeyName, j
  448. Next j
  449. fStart = 0
  450. FindIn = InputBox("Enter the string to find", "Find in ALL keys...", Findstr)
  451. Findstr = FindIn
  452. If Findstr = "" Then GoTo nofind
  453. 'Find the text specified in the listbox control.
  454. FoundPos = -1
  455. Screen.MousePointer = 11
  456. For i = 0 To RecentSubKeys
  457.     For j = 1 To RecentMax(0)
  458.         'check the value array
  459.         If InStr(1, RegValue(i, j), Findstr, vbTextCompare) > 0 Then
  460.             'lets force our tree to that node
  461.             TV1.Nodes(i + 1).Selected = True
  462.             TV1_NodeClick TV1.Nodes(i + 1)
  463.             DoEvents
  464.             Refresh
  465.             'lists start at 0 so let's subtract 1
  466.             List1.TopIndex = j - 1
  467.             Text1.Text = List1.List(j - 1)
  468.             FoundPos = i
  469.             Exit For
  470.         End If
  471.     Next j
  472.     If FoundPos >= 0 Then Exit For
  473. Next i
  474. If FoundPos <> -1 Then
  475.     ' Returns number of line containing found text.
  476.     Beeep
  477.     fMess$ = "Found in Value " & CStr(FoundPos)
  478.     GoTo nofind
  479. End If
  480. Alarm
  481. MsgBox Findstr & " not found!"
  482. nofind:
  483. Screen.MousePointer = 0
  484. End Sub
  485.  
  486. Private Sub Text1_GotFocus()
  487. Text1.SelStart = 0
  488. Text1.SelLength = Len(Text1.Text)
  489. End Sub
  490.  
  491. Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
  492. 'Dim Result&, wParam&, s$
  493. 'text1 is the filter for displaying all values that match into list 2 from list1
  494. Dim sStr As String
  495. Dim chkFile$
  496. Dim chks As Integer
  497. If KeyCode = vbKeyDown Then
  498.     If List2.ListIndex < List2.ListCount - 1 Then
  499.         List2.ListIndex = List2.ListIndex + 1
  500.     End If
  501.     On Error Resume Next
  502.     List2.SetFocus
  503.     Exit Sub
  504. End If
  505. DoEvents
  506. Refresh
  507. sStr = UCase(Text1.Text)
  508. If Len(sStr) = 0 Then Exit Sub
  509. List2.Clear
  510. List1.Visible = False
  511. List2.Visible = False
  512. For i = List1.ListCount - 1 To 0 Step -1
  513.     chkFile$ = UCase(List1.List(i))
  514.     chks = InStr(chkFile$, sStr)
  515.     If sStr = "" Then chks = 1
  516.     If chks > 0 Then
  517.         'List1.Visible = False
  518.         'Result& = SendMessage(List1.hwnd, LB_SETTOPINDEX, i, lParam&)
  519.         List1.ListIndex = i
  520.         List1.TopIndex = i
  521.         'List1.Refresh
  522.         List2.AddItem List1.List(i), 0
  523.         List2.ItemData(0) = List1.ItemData(i)
  524.         'Exit For
  525.     End If
  526. Next i
  527. If List2.ListCount > 0 Then List2.ListIndex = 0
  528. 'List1.Visible = True
  529. List2.Visible = True
  530. If KeyCode = 13 Then
  531.     sStr = UCase(Text1.Text)
  532.     chkFile$ = UCase(List1.List(List1.ListIndex))
  533.     chks = InStr(chkFile$, sStr)
  534.     If chks > 0 Then
  535.         list1_DblClick
  536.     Else
  537.         
  538.     End If
  539. Else
  540. End If
  541. '
  542. 'wParam& = -1
  543. 's$ = Text1.Text
  544. 'Result& = SendMessageByString(List1.hwnd, LB_FINDSTRING, wParam&, s$)
  545. 'List1.ListIndex = Result&
  546. End Sub
  547.  
  548. Private Sub TV1_KeyDown(KeyCode As Integer, Shift As Integer)
  549. If KeyCode = vbKeyDelete Then
  550.     Confirm = MsgBox("Are you sure you want to delete all entries for " & TV1.SelectedItem.Text & "?", vbOKCancel + vbQuestion + vbMsgBoxSetForeground, "Confirm Deletion of Registry Values")
  551.     If Confirm = vbCancel Then Exit Sub
  552.     '
  553.     'delete all listings from the bottom up
  554.     For i = List1.ListCount - 1 To 0 Step -1
  555.         List1.ListIndex = i
  556.         If List1.Text <> AddSpace(Str$(i), 3) & vbTab Then
  557.             DeleteFromList False
  558.         
  559.         End If
  560.     Next i
  561. End If
  562. End Sub
  563.  
  564. Private Sub TV1_NodeClick(ByVal Node As MSComctlLib.Node)
  565. Debug.Print Node.Key
  566. List1.Visible = True
  567. List2.Visible = False
  568. SelectedKeyNum = Node.Index - 1
  569. Debug.Print Node.Key
  570. If Node.Key = "Root" Then
  571.     'Now lets populate the list with the new stuff
  572.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\"
  573.     GetBinary sKeyName, 0
  574.     PopList 0
  575. ElseIf Node.Key = "RunMRU" Then
  576.     'Now lets populate the list with the new stuff
  577.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
  578.     GetRegText sKeyName, "", 1
  579.     PopList RecentSubKeys + 1
  580. ElseIf Node.Key = "TypedURLs" Then
  581.     'Now lets populate the list with the new stuff
  582.     sKeyName = "Software\Microsoft\Internet Explorer\TypedURLs"
  583.     GetRegText sKeyName, "url", 2
  584.     PopList RecentSubKeys + 2
  585. Else
  586.     'Now lets populate the list with the new stuff for the selected key.
  587.     'we could alternatively do this at startup, but why get it before you need it.
  588.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\" & TV1.Nodes(TV1.SelectedItem.Index).Text
  589.     GetBinary sKeyName, SelectedKeyNum
  590.     PopList SelectedKeyNum
  591.     Debug.Print "Opening "; SelectedKeyNum; " = "; TV1.Nodes(TV1.SelectedItem.Index).Text
  592. End If
  593. End Sub
  594.  
  595. Sub PopList(KeyNum As Integer)
  596. 'populate list with the string values for the selected subkey
  597. With List1
  598.     .Visible = False
  599.     .Clear
  600.     For i = 0 To RecentMax(KeyNum)
  601.        .AddItem AddSpace(Str$(i), 3) & vbTab & RegValue(KeyNum, i)
  602.        .ItemData(.ListCount - 1) = i
  603.     Next i
  604.     .Visible = True
  605. End With
  606. End Sub
  607.  
  608. Sub DeleteFromList(Optional Confirmation As Boolean)
  609. Dim KeyRoot$
  610. OldIndex = List1.ListIndex
  611. 'confirm the delete
  612. If Confirmation = True Then
  613.     Confirm = MsgBox("Are you sure you want to delete" & vbCrLf & RegValue(SelectedKeyNum, OldIndex) & "?", vbOKCancel + vbQuestion + vbMsgBoxSetForeground, "Confirm Deletion of Registry Value")
  614.     If Confirm = vbCancel Then Exit Sub
  615. End If
  616. 'set the registry keyname based on which key is open
  617. KeyRoot$ = ""
  618. If TV1.SelectedItem.Text = "RunMRU" Then
  619.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"
  620.     'open registry key
  621.     lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  622.     If lRetVal <> 0 Then
  623.         MsgBox "Failed to Open " & sKeyName
  624.     End If
  625.     'delete the binary value from the registry
  626.     lRetVal = DeleteValue(HKEY_CURRENT_USER, sKeyName, Chr$(65 + List1.ItemData(List1.ListIndex)))
  627.     If lRetVal <> 0 Then
  628.         MsgBox "Failed to Delete " & sKeyName
  629.     End If
  630.     'now let's re-load the selected branch
  631.     GetRegText sKeyName, "", 1
  632.     PopList RecentSubKeys + 1
  633. ElseIf TV1.SelectedItem.Text = "TypedURLs" Then
  634.     sKeyName = "Software\Microsoft\Internet Explorer\TypedURLs"
  635.     KeyRoot$ = "url"
  636.     'open registry key
  637.     lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  638.     If lRetVal <> 0 Then
  639.         MsgBox "Failed to Open " & sKeyName
  640.     End If
  641.     'delete the binary value from the registry
  642.     lRetVal = DeleteValue(HKEY_CURRENT_USER, sKeyName, KeyRoot$ & List1.ItemData(List1.ListIndex))
  643.     If lRetVal <> 0 Then
  644.         MsgBox "Failed to Delete " & sKeyName
  645.     End If
  646.     'now let's re-load the selected branch
  647.     GetRegText sKeyName, "url", 2
  648.     PopList RecentSubKeys + 2
  649. Else
  650.     sKeyName = "Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\" & SubKeyName(SelectedKeyNum)
  651.     'open registry key
  652.     lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  653.     If lRetVal <> 0 Then
  654.         MsgBox "Failed to Open " & sKeyName
  655.     End If
  656.     'delete the binary value from the registry
  657.     lRetVal = DeleteValue(HKEY_CURRENT_USER, sKeyName, KeyRoot$ & List1.ItemData(List1.ListIndex))
  658.     If lRetVal <> 0 Then
  659.         MsgBox "Failed to Delete " & sKeyName
  660.     End If
  661.     'now let's re-load the selected branch
  662.     GetBinary sKeyName, SelectedKeyNum
  663.     PopList (SelectedKeyNum)
  664. End If
  665. Refresh
  666. DoEvents
  667. On Error Resume Next
  668. List1.ListIndex = OldIndex
  669. Refresh
  670. DoEvents
  671. On Error Resume Next
  672. List1.SetFocus
  673. End Sub
  674.  
  675.