#171609 - 2006-12-16 08:41 PM
KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
KiXforms.Net Learning Series - Windows Registry Run [Project 01 - Lesson 02]
Project 01 - Lesson 02 is a continuation of: Project 01 - Lesson 01
Guidelines:
- All scripters are welcome, Beginners to Masters.
- KiXforms.Net version 3.1.45.0 or newer must be used. To verify your version of KiXforms.Net, use KiXforms.Net Version Checker (found below).
- Please do not use this series just to bump your post count.
- Do not post solutions until after solution post time is announced.
- Collaboration is not allowed until after solution post time is announced.
- I will post to indicate when solution post time starts.
- Comments are a must, be descriptive but not excessive.
- Use descriptive variable names to make it easier for yourself and others to follow what is happening.
- The only help allowed is:
- 'KiXforms.chm'
- 'Kixforms.System.tlb'
- 'Scripted Resource (Base64) Development Kit'
- 'KiXforms Designer .NET 2.0 (Beta)'
- 'The Script Center Script Repository'
- 'KiXtart.org UDF library collection'
- Note: 'KiXforms.chm' can be found in KiXforms.Zip (KF.NET Development Build)
'Kixforms.System.tlb' can be found in your System32 directory after the installation of KiXforms.msi (found in 'KiXfomrs.zip'). To view 'Kixforms.System.tlb' use iTripoli Type Library Viewer. If you choose, you can create a shortcut to the 'iTripoli Type Library Viewer' then, modify the shortcut target to: "C:\Program Files\iTripoli\Tools\TypeViewer.exe" Kixforms.System.tlb, then the shortcut will automatically open 'Kixforms.System.tlb'. Get Scripted Resource (Base64) Development Kit if you want or need it. Get KiXforms Designer .NET 2.0 (Beta) if you want or need it. Go to The Script Center Script Repository if you want or need to. Go to KiXtart.org UDF library collection if you want or need to. You can also modify UDFs found in 'KiXtart.org UDF library collection' if needed but make sure you comment on your changes.
- All submitted code should be as though it were to be used in production.
- Code should set options to On.
- Error checking should be in place where needed.
- All variables including form and controls should be Dimmed.
- All UDFs should be self contained and all variables Dimmed.
- All code should be in code tags.
- When creating KiXforms the command console is not desired so use 'WKiX32.exe' not 'KiX32.exe'.
KiXforms.Net Version Checker:
;KiXforms.Net Version Checker
;Set Break to On if not in Logon Mode.
If Not @LogonMode
Break On
EndIf
;Set Code Options to On
Dim $SO
$SO=SetOption("NoMacrosInStrings", "ON")
$SO=SetOption("NoVarsInStrings", "ON")
$SO=SetOption("Explicit", "ON")
;Setup Variables.
Dim $System,$nul,$MainForm,$ProductVersionLabel,$ProductNameLabel
;Create 'Kixforms.System' Object.
$System = CreateObject("Kixforms.System")
;Verify the 'Kixforms.System' Object was created if not, notify and exit.
If Not $System
$nul= MessageBox("KiXforms.Net Not Initiated."+@CRLF+
"Please verify KiXforms.Net is installed."+@CRLF+
"This Script Will Now Close.","Error",16)
Quit()
EndIf
;Create Form and Controls.
$MainForm = $System.Form()
$MainForm.StartPosition = $System.FormStartPosition_CenterScreen
$MainForm.Size = $System.Size(338,83)
$MainForm.Text = "KiXforms.Net Version Checker"
$ProductVersionLabel = $System.Label()
$ProductVersionLabel.Dock = $System.DockStyle_Top
$ProductVersionLabel.Text = "Ver. "+$System.ProductVersion
$ProductVersionLabel.TextAlign = $System.ContentAlignment_MiddleCenter
$nul = $MainForm.Controls.Add($ProductVersionLabel)
$ProductNameLabel = $System.Label()
$ProductNameLabel.Dock = $System.DockStyle_Top
$ProductNameLabel.Text = $System.ProductName
$ProductNameLabel.TextAlign = $System.ContentAlignment_MiddleCenter
$nul = $MainForm.Controls.Add($ProductNameLabel)
;Show the Form
$MainForm.Show
;Loop to catch form events.
While $MainForm.Visible
$nul = Execute($MainForm.DoEvents())
Loop
Exit 0
Objectives for Lesson 02:
- Populate the 'ComboBox' with these two values.
- "HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run"
- "HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run"
- Populate the top 'ListView' with the entries and values of the selected 'ComboBox.Text' registry key.
- When the user selects a different registry key in the 'ComboBox' the top and bottom 'ListView.Items' should be cleared.
- The top 'ListView' should have checkboxes enabled.
- Allow the user to:
- Backup - copy the entries and values of the selected 'ComboBox.Text' registry key to these keys respectively:
- "HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\RunBackup"
- "HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\RunBackup"
- Restore - copy the entries and values of the selected 'ComboBox.Text' backup registry key to these keys respectively:
- "HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run"
- "HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run"
- Restore - clear the bottom 'ListView.Items' and re-enumerate the entries and values of the selected 'ComboBox.Text' registry key.
- Refresh - clear the top 'ListView.Items', clear the bottom 'ListView.Items' and re-enumerate the entries and values of the selected 'ComboBox.Text' registry key.
- Exit - exit the form.
Create:
- A function to populate the 'ComboBox'.
- A function to populate the top 'ListView' with the entries and values of the selected 'ComboBox.Text' registry key.
- A function for the 'Backup Button.Click' event.
- A function for the 'Restore Button.Click' event.
- A function for the 'Refresh Button.Click' event.
- A function for the 'Exit Button.Click' event.
You may ask questions, but do not post code. I will post when solutions may be posted. You may begin..
|
Top
|
|
|
|
#171649 - 2006-12-17 11:44 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Gargoyle]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
Maybe this will help others out: 'ListView.Items' is a collection of all the Items in the ' ListView', Each ' ListView.Item' contains a collection of SubItems.
To add an ' Item' in column 0 you would do this:
- ' $Item0 = $ListView.Items.Add($System.ListViewItem("Item 1A"))'
To add a SubItem to $Item0 you could use one of these two methods:
- ' $Item1 = $ListView.Items.Item(0).SubItems.Add($System.ListViewSubItem("Item 1B"))'
- ' $Item1 = $Item0.SubItems.Add($System.ListViewSubItem("Item 1B"))'
The (first column) Item Text is referenced like this: '$Item0Text = $ListView1.Items.Item(Row).Text' 'Item(Row)' Row is the row index of the Item you are trying access, this is a zero based index like an array. So if you have 3 rows the index values will be 0,1,2. Zero being the top most Item in the column.
Any column after the first (Second Column, Third Column, Fourth Column,...), is in the SubItems collection of the Item in the first column. The second column Item Text is referenced like this: '$Item1Text = $ListView1.Items.Item(Row).SubItems.Item(Column).Text' 'Item(Column)' Column is the column index of the Item you are trying access, this is also a zero based index like an array. So if you have 3 columns the index values will be 0,1,2. Zero being the left most Item (or column 0).
If you wanted to access each 'Item.Text' in a 'ListView', this would be one way to do it:
For $Row = 0 to $ListView.Items.Count
For $Column = 0 to $ListView.Items.Item($Row).SubItems.Count-1
$ItemText = $ListView.Items.Item($Row).SubItems.Item($Column).Text
? $ItemText
Next
Next
|
Top
|
|
|
|
#171679 - 2006-12-18 06:16 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Gargoyle]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
The bottom ListView will be covered in Lesson 03
|
Top
|
|
|
|
#171680 - 2006-12-18 06:18 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Benny69]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
This Project will have Lessons 01 - 03
|
Top
|
|
|
|
#171762 - 2006-12-20 12:23 AM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Benny69]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
How is everyone progressing?
|
Top
|
|
|
|
#172320 - 2007-01-03 12:46 AM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Gargoyle]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
Ok now that the holidays are over with, shall we continue?
You may begin posting your code at 06:00 am GMT Friday Morn.
|
Top
|
|
|
|
#172434 - 2007-01-05 03:19 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson 02
[Re: Benny69]
|
Gargoyle
MM club member
Registered: 2004-03-09
Posts: 1597
Loc: Valley of the Sun (Arizona, US...
|
Well here is my code. Please be gentle ===============================================
If Not @LogonMode Break On EndIf
;Declare Variables that will be used throughout Global $SO, $Nul
;Set Code Options to On
$SO=SetOption("NoMacrosInStrings", "ON") $SO=SetOption("NoVarsInStrings", "ON") $SO=SetOption("Explicit", "ON")
;Declare Variables for the form
DIM $MainMenu,$MenuItem1,$MenuItem2 DIM $Button_Text,$Button_Top[],$Lbl_Info DIM $Splitter DIM $Button_Click[],$ControlStackImageList
Global $System,$Form_Main,$ListView1,$ListView2,$Cmb_RegEntry,$Button[5],$Panel_ControlStack Global $Panel_MainChild,$Panel_ChildInMainChild,$ListView2Column[1],$ListView1Column[1] Global $ListView1Item[]
;Array build information $Button_Text = "Exit","Delete","Refresh","Restore","Backup","Save" $Button_Top = 120,96,72,48,24,0 $Button_Click = "IWantOut()","","ListViewChange($CMB_RegEntry.SelectedIndex)","Restore($CMB_RegEntry.SelectedIndex)","Backup($CMB_RegEntry.SelectedIndex)",""
;Check for existence of KiXForms $System = CreateObject("Kixforms.System") If Not $System $nul= MessageBox("KiXforms.Net Not Initiated. This Script Will Now Close.","Error",16) Quit() EndIf $nul = $System.Application.EnableVisualStyles
;Build the Form $Form_Main = $System.Form() $Form_Main.StartPosition = 1 $Form_Main.Size = $System.Size(600,400) $Form_Main.Text = "Project1 - Lesson 1" $Form_Main.SizeChanged = "Resize()" $Form_Main.Icon = $System.Icon.FromBase64String(FormImage())
;Build the menu bar $MainMenu = $System.MainMenu()
$MenuItem1 = $MainMenu.MenuItems.Add($System.MenuItem("File"))
$MenuItem2 = $MenuItem1.MenuItems.Add($System.MenuItem("Exit")) $MenuItem2.Click = "IWantOut()"
$Form_Main.Menu = $MainMenu
;Add Two Panels that will allow for splitting $Panel_MainChild = $System.Panel() $Panel_MainChild.Borderstyle = 1 $Panel_MainChild.Dock = 5 $Nul = $Form_Main.Controls.Add($Panel_MainChild)
;Now we can add the top Listview $ListView1 = $System.ListView() $ListView1.Dock = 5 $ListView1.GridLines = -1 ;True $ListView1.Checkboxes = -1 ;True $ListView1.View = $System.View_Details $nul = $Panel_MainChild.Controls.Add($ListView1)
;Add the ComboBox $CMB_RegEntry = $System.ComboBox() ;$CMB_RegEntry.DropDownWidth = 512 $CMB_RegEntry.IntegralHeight = 0 $CMB_RegEntry.ItemHeight = 13 $CMB_RegEntry.Dock = 1 $CMB_RegEntry.SelectedIndexChanged = "ListViewChange($CMB_RegEntry.SelectedIndex)" $nul = $Panel_MainChild.Controls.Add($CMB_RegEntry)
;Add in the Splitter $Splitter = $System.Splitter() $Splitter.Dock = 2 $Splitter.Height = 3 $nul = $Panel_MainChild.Controls.Add($Splitter)
;Add the secondary panel to the one just created $Panel_ChildinMainChild = $System.Panel() $Panel_ChildinMainChild.Borderstyle = 1 $Panel_ChildinMainChild.Dock = 2 $Nul = $Panel_MainChild.Controls.Add($Panel_ChildinMainChild)
;Insert the Bottom Listview $ListView2 = $System.ListView() $ListView2.GridLines = -1 ;True $ListView2.View = $System.View_Details $ListView2.Dock = 5 $nul = $Panel_ChildInMainChild.Controls.Add($ListView2)
;Add the Label $Lbl_Info = $System.Label() $Lbl_Info.BorderStyle = 1 $Lbl_Info.Dock = 1 $Lbl_Info.Text = "Entries to Delete" $Lbl_Info.TextAlign = 32 $nul = $Panel_ChildInMainChild.Controls.Add($Lbl_Info)
;Set up Column headers for ListViews $ListView2Column[0] = $ListView2.Columns.Add($System.ColumnHeader("Entry",100,$System.HorizontalAlignment_Left)) $ListView2Column[1] = $ListView2.Columns.Add($System.ColumnHeader("Value",100,$System.HorizontalAlignment_Center)) $ListView1Column[0] = $ListView1.Columns.Add($System.ColumnHeader("Entry",100,$System.HorizontalAlignment_Left)) $ListView1Column[1] = $ListView1.Columns.Add($System.ColumnHeader("Value",100,$System.HorizontalAlignment_Center))
;Add Control Stack containing panel $Panel_ControlStack = $System.Panel() $Panel_ControlStack.Borderstyle = 1 $Panel_ControlStack.Dock = 3 $Nul = $Panel_MainChild.Controls.Add($Panel_ControlStack)
;Build the ImageList for the ControlStack $ControlStackImageList = $System.Imagelist() $ControlStackImageList.ImageSize = $System.Size(16,16) $Nul = $ControlStackImageList.Images.AddStrip($System.Bitmap.FromBase64String(ControlStackImageList()))
;Build the Buttons for the Control Stack ;Buttons are built from the bottom up ;See definition of Button_Text[] Array for clarification For $SO = 0 to Ubound($Button) $Button[$SO] = $System.Button() $Button[$SO].Left = 0 $Button[$SO].TextAlign = 64 $Button[$SO].Top = $Button_Top[$SO] $Button[$SO].Text = $Button_Text[$SO] $Button[$SO].Click = $Button_Click[$SO] $Button[$SO].ImageList = $ControlStackImageList $Button[$SO].ImageAlign = 16 $Button[$SO].ImageIndex = $SO $Nul = $Panel_ControlStack.Controls.Add($Button[$SO]) Next
;Set the widths of everything to match the form $Panel_ControlStack.Width = 79 Resize() CMB_Fill() ; Unsure why we are using a function for this, but may assume it will ; be because of future development $CMB_RegEntry.SelectedIndex = 0 ; So that the combobox does not appear to be empty upon launch
$Form_Main.Show ;Displays the Form
While $Form_Main.Visible $Nul = Execute($Form_Main.DoEvents()) Loop Exit 0
;================================================================================================ ; Functions ;================================================================================================ Function Resize() DIM $Width If $Form_Main.Width => 600 $Width = $Form_Main.Width - 86 Else $Form_Main.Width = 600 EndIf If $Form_Main.Height < 400 $Form_Main.Height = 400 EndIf
EndFunction
;=====================================
Function IWantOut() Quit @ERROR EndFunction
;=====================================
Function CMB_Fill() Global $RegKey[1] $RegKey[0] = $CMB_RegEntry.Items.Add("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\") $RegKey[1] = $CMB_RegEntry.Items.Add("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\") EndFunction
;=====================================
Function ListViewChange($Index) DIM $Values,$Count,$Count2
;Clear out the listViews $ListView1.items.clear $Listview2.items.clear ;Build and array with all of the Key Values under the selected RegKey $Values = Arrayenumvalue($RegKey[$Index])
;Setup counters for the filling of items $Count = 0 ; Item Counter to build the Array of items contained within the listview $Count2 = 0 ; Row Counter so as to build the subitems in the listview
;Loop through the Key Values array and add to the ListView For Each $SO In $Values ReDIM Preserve $ListView1Item[$Count+1] ;Add the Key to the first column in the Listview $ListView1Item[$count] = $ListView1.items.Add($system.listviewitem($SO)) ;Add the Values of the specified key to the subitems list ;Increment the $Count by 1 so that it can be referenced as an individual item $ListView1Item[$count+1] = $Listview1.items.item($Count2).SubItems.Add($System.ListViewSubItem(ReadValue($RegKey[$Index],$SO))) $Count = $Count+10 $Count2 = $Count2+1 Next EndFunction
;===================================== ;Courtesy Sealeopard UDF Function arrayenumvalue($regsubkey) DIM $retcode, $valuecounter, $currentvalue, $valuearray
If not KeyExist($regsubkey) Exit 87 EndIf
$valuecounter=0 Do $currentvalue=EnumValue($regsubkey,$valuecounter) If not @ERROR ReDIM preserve $valuearray[$valuecounter] $valuearray[$valuecounter]=$currentvalue $valuecounter=$valuecounter+1 EndIf Until @ERROR
$arrayenumvalue=$valuearray Exit 0 EndFunction
;===================================== Function Backup($Index) ;Backup all entries in the top ListView to the repective "RunBackup" key DIM $Key,$Value For $SO = 1 To $ListView1.Items.Count ;Retrieve the Key Value from the ListView $Key = $Listview1.Items.Item($SO).text ;Retrieve the value from the Subitems of the ListView $Value = $ListView1.Items.Item($SO).subItems.Item(1).text ;I tried putting the $Key and $Value directly in the WriteValue, but it ;continually gave me invaled method / function call
$Nul = WriteValue($RegKey[$index]+"RunBackup",$Key,$Value,REG_SZ) Next EndFunction
;===================================== Function Restore($Index) ;Restore all entries from the "RunBackup" Key to the Selected Key DIM $Key, $Value For Each $Key In ArrayEnumvalue($RegKey[$Index]+"Runbackup") $Value = ReadValue($RegKey[$Index]+"RunBackup",$Key) $Nul = WriteValue($RegKey[$Index],$Key,$Value,REG_SZ) Next ListViewChange($Index) EndFunction
;=====================================
;================================================================================================ ; Image Strings ;================================================================================================ Function ControlStackImageList() $ControlStackImageList = " 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 " EndFunction
Function FormImage() $FormImage = " AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAA AAAAAAAAAAAAAAAAAAAAAAAA////AAD/AAAAAP8A//8AAAD//wDAwMAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB AQEBAQEBAQEGBgYBAQAAAQEBAQEBBgYAAAAGAQEAAAEBAQEBAAAAAAMABgEBAAAB AQEBAQAGAQAAAAEBAQAAAQEBAQEABgEBBgYGAQEAAAEBAQEBAAYGAAAABgEBAAAB AQEBAQAAAAACAAYBAQAAAQEBAQEABgYAAAABAQEAAQYGBgYAAAAGAQEBAQEBAAEA AAAAAAUABgEBAQEBAQABAAYBAQAAAAEBAQEBAQEAAQAGAQEBAQEBAQEBAQEBAAAA AAYDAwMDAwMDAwMDAwAABAAGAwMDAwMDAwMDAwMAAAAABgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAA="
EndFunction
Edited by Gargoyle (2007-01-05 08:47 PM)
_________________________
Today is the tomorrow you worried about yesterday.
|
Top
|
|
|
|
#172518 - 2007-01-08 03:16 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson
[Re: Gargoyle]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
Gargoyle, Well done, just a couple small oops, the registry backup is being placed in: "HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run\RunBackup" Rather than in: "HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\RunBackup" And the other is the same, in addition nether one is backing up all the entries, each is missing one.
|
Top
|
|
|
|
#172574 - 2007-01-09 03:13 PM
Re: KiXforms.Net Learning Series - Windows Registry Run Project 01 - Lesson
[Re: Gargoyle]
|
Benny69
Moderator
Registered: 2003-10-29
Posts: 1036
Loc: Lincoln, Ne
|
Here is my solution.
;Things to note:
;Most variables are declared with 'Dim' and not 'Global'. Control.Name property is given a unique value
;in order to find the control inside UDFs with the $Form.FindControl('Control.Name') function.
;The 'Button.Click' event is directed thru the 'ControlClick('Control.Name')' UDF, then it points each
;button to the appropriate 'Button.Click' event.
;region Set Code Options
;Set Break to On if not in Logon Mode.
If Not @LogonMode
Break On
EndIf
;Set Code Options to On
Dim $SO
$SO=SetOption("NoMacrosInStrings", "ON")
$SO=SetOption("NoVarsInStrings", "ON")
$SO=SetOption("Explicit", "ON")
;endregion Set Code Options
;region Setup Varibles
;Dim variables in order of creation.
Global $System,$MainForm
Dim $nul,$ImageList,$MainMenu,$FileMenuItem,$ExitMenuItem,$MainPanel,
$DeletePanel,$DeleteListView,$DeleteListViewColumn0,$DeleteListViewColumn1,$DeleteLabel,
$Splitter,
$ActivePanel,$ActiveListView,$ActiveListViewColumn0,$ActiveListViewColumn1,$ActiveComboBox,
$ControlPanel,$ControlButton,$Controls,$Control,$ImageIndex
;Create an array of names of the 'Control Stack'.
$Controls = "Exit","Delete","Refresh","Restore","Backup","Save"
;Create 'Kixforms.System' Object.
$System = CreateObject("Kixforms.System")
;Verify the 'Kixforms.System' Object was created if not, notify and exit.
If Not $System
$nul= MessageBox("KiXforms.Net Not Initiated."+@CRLF+
"Please verify KiXforms.Net is installed."+@CRLF+
"This Script Will Now Close.","Error",16)
Quit()
EndIf
;Create an 'ImageList' for the 'Control Stack'.
$ImageList = $System.ImageList()
$ImageList.ImageSize = $System.Size(16,16)
$nul = $ImageList.Images.AddStrip(ControlImages())
;endregion Setup Varibles
;region Main Form
;Create Form and Controls.
;Store the original 'MainForm.Size' in 'MainForm.Tag' for easy retrieval in the 'MainForm.SizeChanged' event function.
$MainForm = $System.Form()
$MainForm.Font = $System.Font("Verdana",8.25,0) ;Regular
$MainForm.Icon = $System.Icon.FromBitmap(FormIcon())
$MainForm.StartPosition = $System.FormStartPosition_CenterScreen
$MainForm.Size = $System.Size(600,400) ;(Width,Height)
$MainForm.SizeChanged = "OnFormSizeChange()"
$MainForm.Text = "Windows Registry Run [Project 01 - Lession 02]"
$MainForm.Tag = $System.Size(600,400) ;(Width,Height)
;Create the MainMenu.
$MainMenu = $System.MainMenu()
$FileMenuItem = $MainMenu.MenuItems.Add($System.MenuItem("File"))
$ExitMenuItem = $FileMenuItem.MenuItems.Add($System.MenuItem("Exit"))
$ExitMenuItem.Click = "ExitForm()"
$MainForm.Menu = $MainMenu
;region Form Controls
;Most controls are attached to the MainPanel.
$MainPanel = $System.Panel()
$MainPanel.Dock = $System.DockStyle_Fill
$nul = $MainForm.Controls.Add($MainPanel)
;region Active Panel
;Create the upper Panel, it contains the controls above the spliter.
$ActivePanel = $System.Panel()
$ActivePanel.BorderStyle = $System.BorderStyle_Fixed3D
$ActivePanel.Dock = $System.DockStyle_Fill
$ActivePanel.Height = 160
$nul = $MainPanel.Controls.Add($ActivePanel)
;Create the upper ListView, to display the current registry entries.
;Set the '.Name' property to a descriptive name to allow ease of location later.
$ActiveListView = $System.ListView()
$ActiveListView.CheckBoxes = "True"
$ActiveListView.Dock = $System.DockStyle_Fill
$ActiveListView.FullRowSelect = "True"
$ActiveListView.GridLines = "True"
$ActiveListView.Name = "ActiveListView"
$ActiveListView.View = $System.View_Details
$nul = $ActivePanel.Controls.Add($ActiveListView)
;Create the Columns for the upper ListView.
$ActiveListViewColumn0 = $ActiveListView.Columns.Add($System.ColumnHeader("Entry",100,$System.HorizontalAlignment_Left))
$ActiveListViewColumn1 = $ActiveListView.Columns.Add($System.ColumnHeader("Value",100,$System.HorizontalAlignment_Left))
;Create a ComboBox for the upper ListView to tell the user what registry key the user is viewing.
;Set the '.Name' property to a descriptive name to allow ease of location later.
$ActiveComboBox = $System.ComboBox()
$ActiveComboBox.Dock = $System.DockStyle_Top
$ActiveComboBox.Name = "ActiveComboBox"
$ActiveComboBox.SelectedIndexChanged = "MainForm_Refresh()"
$nul = $ActivePanel.Controls.Add($ActiveComboBox)
;endregion Active Panel
;Create a horizontal Splitter so the user can adjust the vertical size of the ListViews.
$Splitter = $System.Splitter()
$Splitter.BackColor = $System.Color.FromName("ActiveCaption")
$Splitter.Dock = $System.DockStyle_Bottom
$Splitter.Height = 3
$nul = $MainPanel.Controls.Add($Splitter)
;region Delete Panel
;Create the lower Panel, it contains the controls below the spliter.
$DeletePanel = $System.Panel()
$DeletePanel.BorderStyle = $System.BorderStyle_Fixed3D
$DeletePanel.Dock = $System.DockStyle_Bottom
$DeletePanel.Height = 150
$nul = $MainPanel.Controls.Add($DeletePanel)
;Create the lower ListView, to display the registry entries to be deleted.
;Set the '.Name' property to a descriptive name to allow ease of location later.
$DeleteListView = $System.ListView()
$DeleteListView.Dock = $System.DockStyle_Fill
$DeleteListView.FullRowSelect = "True"
$DeleteListView.GridLines = "True"
$DeleteListView.Name = "DeleteListView"
$DeleteListView.View = $System.View_Details
$nul = $DeletePanel.Controls.Add($DeleteListView)
;Create the Columns for the lower ListView.
$DeleteListViewColumn0 = $DeleteListView.Columns.Add($System.ColumnHeader("Entry",100,$System.HorizontalAlignment_Left))
$DeleteListViewColumn1 = $DeleteListView.Columns.Add($System.ColumnHeader("Value",100,$System.HorizontalAlignment_Left))
;Create a Lable for the lower ListView to tell the user what the lower ListView is for.
$DeleteLabel = $System.Label()
$DeleteLabel.Dock = $System.DockStyle_Top
$DeleteLabel.Height = 20
$DeleteLabel.Text = "Entries to Delete"
$DeleteLabel.TextAlign = $System.ContentAlignment_MiddleCenter
$nul = $DeletePanel.Controls.Add($DeleteLabel)
;endregion Delete Panel
;region User Controls
;Create a Panel for the form user controls.
$ControlPanel = $System.Panel()
$ControlPanel.BorderStyle = $System.BorderStyle_Fixed3D
$ControlPanel.Dock = $System.DockStyle_Left
$ControlPanel.Width = 90
$nul = $MainForm.Controls.Add($ControlPanel)
;Create the user controls: Exit, Delete, Refresh, Restore, Backup, Save.
;Set the '.Name' property to a descriptive name to allow ease of location later.
;Set the '.Click' event to trigger the 'ControlClick(Control.Name)' function.
$ImageIndex = 0
For Each $Control in $Controls
$ControlButton = $System.Button()
$ControlButton.Click = "ControlClick('"+$Control+"')"
$ControlButton.Dock = $System.DockStyle_Top
$ControlButton.Height = 26
$ControlButton.ImageAlign = $System.ContentAlignment_TopLeft
$ControlButton.ImageList = $ImageList
$ControlButton.ImageIndex = $ImageIndex
$ControlButton.Name = $Control
$ControlButton.Text = $Control
$ControlButton.TextAlign = $System.ContentAlignment_MiddleRight
$nul = $ControlPanel.Controls.Add($ControlButton)
$ImageIndex = $ImageIndex + 1
Next
;endregion User Controls
;endregion Form Controls
;region Startup
PopulateActiveComboBox()
;endregion Startup
;Show the Form
$MainForm.Show
;Loop to catch form events.
While $MainForm.Visible
$nul = Execute($MainForm.DoEvents())
Loop
Exit 0
;endregion Main Form
;region Main Form Functions
;The 'OnFormSizeChange()' function adjusts the size of the form to the minimum size
;if the user tries to Set it too Small.
Function OnFormSizeChange()
Dim $MainForm_Size
;Retrieve the original 'MainForm.Size' from 'MainForm.Tag'
$MainForm_Size = $MainForm.Tag
If $MainForm.Width < $MainForm_Size.Width And Not($MainForm.WindowState = 1)
$MainForm.Width = $MainForm_Size.Width
EndIf
If $MainForm.Height < $MainForm_Size.Height And Not($MainForm.WindowState = 1)
$MainForm.Height = $MainForm_Size.Height
EndIf
EndFunction
;The 'PopulateActiveComboBox()' function adds items to the 'ActiveComboBox'.
Function PopulateActiveComboBox()
Dim $ActiveComboBox,$Item
;Find the 'ActiveComboBox' control.
$ActiveComboBox = $MainForm.FindControl("ActiveComboBox")
;Add items to the 'ActiveComboBox' control.
$Item = $ActiveComboBox.Items.Add("HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run")
$Item = $ActiveComboBox.Items.Add("HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run")
$ActiveComboBox.SelectedIndex = 0
EndFunction
;The 'MainForm_Refresh()' function is called when the
;'SelectedIndexChanged' event is triggered from the 'ActiveComboBox'.
;It clears the 'ActiveListView.Items', clears the 'DeleteListView.Items'
;and populates the 'ActiveListView.Items' with the entries of the selected 'Run' key.
Function MainForm_Refresh()
Dim $ActiveComboBox,$ActiveListView,$DeleteListView,$Entries,$Array,$Entry,$Value,$Item0,$Item1
;Find the 'ActiveComboBox' control.
$ActiveComboBox = $MainForm.FindControl("ActiveComboBox")
;Find the 'ActiveListView' control.
$ActiveListView = $MainForm.FindControl("ActiveListView")
;Find the 'DeleteListView' control.
$DeleteListView = $MainForm.FindControl("DeleteListView")
;Clear the 'ActiveListView.Items' collection.
$ActiveListView.Items.Clear
;Clear the 'DeleteListView.Items' collection.
$DeleteListView.Items.Clear
;Enumerate the registry entries selected in the 'ActiveComboBox.Text' property.
$Entries = GetKeyEntries($ActiveComboBox.Text)
;Loop thru each entry in the 'Entries' array and add them to the 'ListView'.
For Each $Array in $Entries
$Entry = Split($Array,"|")[0]
$Value = Split($Array,"|")[1]
$Item0 = $ActiveListView.Items.Add($System.ListViewItem($Entry))
$Item1 = $Item0.SubItems.Add($System.ListViewSubItem($Value))
Next
;Resize the 'ActiveListView' columns to the width of the largest 'ActiveListView.Items'
$ActiveListView.Columns.Item(0).Width = -1
If $ActiveListView.Columns.Item(0).Width < 100
$ActiveListView.Columns.Item(0).Width = 100
EndIf
$ActiveListView.Columns.Item(1).Width = -1
If $ActiveListView.Columns.Item(1).Width < 100
$ActiveListView.Columns.Item(1).Width = 100
EndIf
EndFunction
;The 'GetKeyEntries()' function enumerates the entries of a key passed to it,
;and passes those entries and their values back in an array.
Function GetKeyEntries($SubKey)
Dim $Index,$Array[0],$Entry,$Value
$Index = 0
$Entry = EnumValue($Subkey,$Index)
$Value = ReadValue($Subkey,$Entry)
$Array[$Index] = $Entry+"|"+$Value
While @ERROR = 0
$Index = $Index + 1
$Entry = EnumValue($Subkey,$Index)
$Value = ReadValue($Subkey,$Entry)
ReDim Preserve $Array[$Index]
$Array[$Index] = $Entry+"|"+$Value
Loop
ReDim Preserve $Array[$Index-1]
$GetKeyEntries = $Array
EndFunction
;The 'ControlClick(Control.Name)' function defines the '.Click' event for each button in the 'Control Stack'.
Function ControlClick($ControlName)
Select
Case $ControlName = "Save"
Case $ControlName = "Backup"
BackupReg()
Case $ControlName = "Restore"
RestoreReg()
Case $ControlName = "Refresh"
MainForm_Refresh()
Case $ControlName = "Delete"
Case $ControlName = "Exit"
ExitForm()
EndSelect
EndFunction
;The 'BackupReg()' function copies the registry entries form the selected 'Run' key to 'RunBackup' key.
Function BackupReg()
Dim $ActiveComboBox,$SelectedReg,$Entries,$Array,$Entry,$Value,$nul
;Find the 'ActiveComboBox' control.
$ActiveComboBox = $MainForm.FindControl("ActiveComboBox")
;Pull the 'Run' key off of the 'ActiveComboBox.Text' property value.
;HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run
;becomes:
;HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion
$SelectedReg = SubStr($ActiveComboBox.Text,1,Len($ActiveComboBox.Text)-4)
;Enumerate the registry entries selected in the 'ActiveComboBox.Text' property.
$Entries = GetKeyEntries($ActiveComboBox.Text)
;Loop thru each entry in the 'Entries' array and add them to the 'RunBackup' registry key.
For Each $Array in $Entries
$Entry = Split($Array,"|")[0]
$Value = Split($Array,"|")[1]
$nul = WriteValue($SelectedReg+"\RunBackup",$Entry,$Value,"REG_SZ")
Next
;Clear the 'ActiveListView.Items', clear the 'DeleteListView.Items'
;and populate the 'ActiveListView.Items' with the entries of the selected 'Run' key.
MainForm_Refresh()
;Set index 0 to '(value not set)'
$nul = DelValue($SelectedReg+"\RunBackup","")
EndFunction
;The 'RestoreReg()' function copies the registry entries form the selected 'RunBackup' key to 'Run' key.
Function RestoreReg()
Dim $ActiveComboBox,$SelectedReg,$Entries,$Array,$Entry,$Value,$nul
;Find the 'ActiveComboBox' control.
$ActiveComboBox = $MainForm.FindControl("ActiveComboBox")
;Pull the 'Run' key off of the 'ActiveComboBox.Text' property value.
;HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Run
;becomes:
;HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion
$SelectedReg = SubStr($ActiveComboBox.Text,1,Len($ActiveComboBox.Text)-4)
;Enumerate the registry entries selected in the 'SelectedReg\RunBackup' varible.
$Entries = GetKeyEntries($SelectedReg+"\RunBackup")
;Loop thru each entry in the 'Entries' array and add them to the 'Run' registry key.
For Each $Array in $Entries
$Entry = Split($Array,"|")[0]
$Value = Split($Array,"|")[1]
$nul = WriteValue($SelectedReg+"\Run",$Entry,$Value,"REG_SZ")
Next
;Clear the 'ActiveListView.Items', clear the 'DeleteListView.Items'
;and populate the 'ActiveListView.Items' with the entries of the selected 'Run' key.
MainForm_Refresh()
;Set index 0 to '(value not set)'
$nul = DelValue($SelectedReg+"\Run","")
EndFunction
;The 'ExitForm()' function exits the form.
Function ExitForm()
Quit 0
EndFunction
;endregion Main Form Functions
;region Images
;The 'FormIcon()' function creates the icon for 'MainForm.Icon'.
Function FormIcon()
$FormIcon = "
Qk02BAAAAAAAADYAAAAoAAAAEAAAABAAAAABACAAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA
AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
AP8AAAD/AAAA/wAAAP/////////////////////////////////////////////////AwMD/
wMDA/8DAwP///////////wAAAP8AAAD/////////////////////////////////wMDA/8DA
wP8AAAD/AAAA/wAAAP/AwMD///////////8AAAD/AAAA////////////////////////////
AAAA/wAAAP8AAAD/AAAA/wAA//8AAAD/wMDA////////////AAAA/wAAAP//////////////
/////////////wAAAP/AwMD//////wAAAP8AAAD/AAAA/////////////////wAAAP8AAAD/
//////////////////////////8AAAD/wMDA////////////wMDA/8DAwP/AwMD/////////
//8AAAD/AAAA////////////////////////////AAAA/8DAwP/AwMD/AAAA/wAAAP8AAAD/
wMDA////////////AAAA/wAAAP///////////////////////////wAAAP8AAAD/AAAA/wAA
AP8A/wD/AAAA/8DAwP///////////wAAAP8AAAD///////////////////////////8AAAD/
wMDA/8DAwP8AAAD/AAAA/wAAAP////////////////8AAAD//////8DAwP/AwMD/wMDA/8DA
wP8AAAD/AAAA/wAAAP/AwMD/////////////////////////////////AAAA//////8AAAD/
AAAA/wAAAP8AAAD/AAAA/wD///8AAAD/wMDA/////////////////////////////////wAA
AP//////AAAA/8DAwP///////////wAAAP8AAAD/AAAA////////////////////////////
//////////8AAAD//////wAAAP/AwMD/////////////////////////////////////////
////////////////////////AAAA/wAAAP8AAAD/AAAA/8DAwP8AAP//AAD//wAA//8AAP//
AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAAAP8AAAD///8A/wAAAP/AwMD/AAD//wAA
//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAAD/AAAA/wAAAP8AAAD/
wMDA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w==
"
$FormIcon = $System.Bitmap.FromBase64String($FormIcon)
EndFunction
;The 'ControlImages()' function creates the images for the 'ImageList'.
Function ControlImages()
$ControlImages = "
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"
$ControlImages = $System.Bitmap.FromBase64String($ControlImages)
EndFunction
;endregion Images
I will now post Lesson 03. Next Lesson: Project 01 - Lesson 03
You may use my solution, someone else's or modify your own to include bits and pieces of different ones.
|
Top
|
|
|
|
Moderator: NTDOC, ShaneEP, Mart, Radimus, Glenn Barnas, Jochen, Allen
|
0 registered
and 700 anonymous users online.
|
|
|