I am going to build a program to manage my startup programs. It work well on WinXP but when I upgrade my OS to Win 7, everything goes hell!
This is my sample code :
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Constants.au3> #include <ListViewConstants.au3> #include <GuiListView.au3> #include <String.au3> Global $startup_key_1 = 'HKCU64\Software\Microsoft\Windows\CurrentVersion\Run';x64 os Global $startup_key_2 = 'HKLM64\Software\Microsoft\Windows\CurrentVersion\Run';x64 os Global $startup_key_3 = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Run' Global $startup_key_4 = 'HKLM\Software\Microsoft\Windows\CurrentVersion\Run' #Region ### START Koda GUI section ### Form=D:\Total USB Security 4\startup_form.kxf $formStartup = GUICreate("Startup Manager", 618, 326, 192, 125, BitOR($WS_CAPTION,$WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS), BitOR($WS_EX_TOOLWINDOW,$WS_EX_WINDOWEDGE)) GUISetFont(10, 400, 0, "Arial") $listStartup = GUICtrlCreateListView("Program|Key|File", 8, 8, 602, 286) $hdlListStartup = GUICtrlGetHandle (-1) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 70) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 375) $btnRemoveStartup = GUICtrlCreateButton("&Remove", 424, 296, 91, 25, $WS_GROUP) $btnCloseStartupForm = GUICtrlCreateButton("&Close", 520, 296, 91, 25, $WS_GROUP) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### _GetStartupItem () while 1 $nMsg = GUIGetMsg () Switch $nMsg Case $btnCloseStartupForm Exit Case $btnRemoveStartup _RemoveStartupItem () EndSwitch WEnd Func _RemoveStartupItem() $select = _GUICtrlListView_GetSelectedIndices($hdlListStartup, True);get first item index If $select[0] <> 0 Then $key = _GUICtrlListView_GetItem($hdlListStartup, $select[1], 1) $program = _GUICtrlListView_GetItem($hdlListStartup, $select[1], 0);program[3] means program name RegDelete($key[3] & '\Software\Microsoft\Windows\CurrentVersion\Run', $program[3]) ;ConsoleWrite ($key[3] & '\Software\Microsoft\Windows\CurrentVersion\Run' & '[' & $program[3] & ']' & @CRLF) If Not @error Then _GUICtrlListView_DeleteItem($hdlListStartup, $select[1]) Else MsgBox(32, 'Startup Manager', 'Can''t remove the registry key. Please try again!', '', $formStartup) Return EndIf EndIf EndFunc Func _GetStartupItem() For $i = 1 To 100 $enum_key = RegEnumVal($startup_key_1, $i) If @error then ExitLoop $strRegRead = RegRead($startup_key_1, $enum_key) $strRegReplace = _StringBetween ($strRegRead,'"','"') If Not @error Then $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKCU64', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegReplace[0] , 2) Else $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKCU64', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegRead , 2) EndIf Next For $i = 1 To 100 $enum_key = RegEnumVal($startup_key_2, $i) If @error then ExitLoop $strRegRead = RegRead($startup_key_2, $enum_key) $strRegReplace = _StringBetween ($strRegRead,'"','"') If Not @error Then $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM64', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegReplace[0], 2) Else $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM64', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegRead , 2) EndIf Next For $i = 1 To 100 $enum_key = RegEnumVal($startup_key_3, $i) If @error then ExitLoop $strRegRead = RegRead($startup_key_3, $enum_key) $strRegReplace = _StringBetween ($strRegRead,'"','"') If Not @error Then $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegReplace[0], 2) Else $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegRead , 2) EndIf Next For $i = 1 To 100 $enum_key = RegEnumVal($startup_key_4, $i) If @error then ExitLoop $strRegRead = RegRead($startup_key_4, $enum_key) $strRegReplace = _StringBetween ($strRegRead,'"','"') If Not @error Then $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegReplace[0], 2) Else $add = _GUICtrlListView_AddItem($hdlListStartup, $enum_key) _GUICtrlListView_AddSubItem($hdlListStartup, $add, 'HKLM', 1) _GUICtrlListView_AddSubItem($hdlListStartup, $add, $strRegRead , 2) EndIf Next Return EndFunc ;==>_GetStartupItem #endregion---------------------------------------------------------
My program can still detect x86 startup programs but when I try to remove x86 programs, there was error. Then I use CCleaner to check up, I choose a x86 program (iTunesHelper), then right-click and choose "Open in Regedit..." and I get the address of registry key : Computer\HLMC\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Remember that!


Afterthat, I choose a x64 program in CCleaner(Persistence), continue to view it in Regedit and I got this :


Still Computer\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run??!
Plz help me!






