Break On
 
If @SCRIPTEXE<>"wkix32.exe"
 $nul=SetConsole("Hide")
EndIf
 
If Not "\\"=Left(@SCRIPTDIR,2)
 Go Left(@SCRIPTDIR,2)
 CD @SCRIPTDIR
EndIf
 
$Form = CreateObject("Kixtart.Form")
$Form.Caption = "KiXomatic 2.2"
$Form.ScaleHeight = 520
$Form.ScaleWidth = 650
$Form.Center
 
$PForm = CreateObject("Kixtart.Form")
$PForm.Caption = "Loading WMI Classes..."
$PForm.Width = 250
$PForm.Height = 60
$PForm.BorderStyle = 3
$PForm.Center
$PForm.controlbox = 0
 
$PBar = $PForm.ProgressBar
$PBar.Size = 230,15
$PBar.Style = "1"
$PBar.Center
 
$Frame = $Form.PictureBox(,,,$Form.ScaleWidth,$Form.ScaleHeight)
$Frame.BorderStyle = 2
 
$lstClass = $Frame.ComboBox(,20,15,450)
$lstClass.Additem ("Begin by selecting a class")
$lstClass.Sorted = 1
$lstClass.Value = "Begin by selecting a class"
$lstClass.OnClick = "ChooseClass()"
$nul = EnumClasses()
 
$cmdRun  = $Frame.CommandButton("Run", 475,15,35,20)
$cmdSave = $Frame.CommandButton("Save",515,15,35,20)
$cmdOpen = $Frame.CommandButton("Open",555,15,35,20)
$cmdQuit = $Frame.CommandButton("Quit",595,15,35,20)
$cmdRun.Onclick  = "RunScript()"
$cmdSave.Onclick = "SaveScript()"
$cmdOpen.Onclick = "OpenScript()"
$cmdQuit.Onclick = "$$Form.Hide"
$cmdRun.Tooltip  = "Run the script"
$cmdSave.Tooltip = "Save the script"
$cmdOpen.Tooltip = "Open a saved script"
$cmdQuit.Tooltip = "Quit KiXomatic"
$cmdRun.Enabled  = 0
$cmdSave.Enabled = 0
 
$TextBox = $Frame.TextBox(,20,37,610,460)
$TextBox.AcceptsReturn = True
$TextBox.MultiLine = True
$TextBox.Fontname = "Courier New"
$TextBox.Fontsize = "8"
$TextBox.Scrollbars = 2
If $Form.Build<34 $TextBox.MousePointer = 3 EndIf
$TextBox.Hide
 
$Form.Show
 
While $Form.Visible
	$nul=Execute($Form.DoEvents)
Loop
 
QuitScript()
Exit 1
 
Function EnumClasses()
   Dim $Max
   $PForm.Show
   $objWMIService = GetObject("winmgmts:\\.\root\cimv2")
   $PBar.Max = $objWMIService.SubclassesOf().Count
   For Each $objclass in $objWMIService.SubclassesOf()
      $PBar.Value = $PBar.Value + 1
      $IsQ = 0
      If instr($objClass.Path_.Class,"WIN32_")
         For Each $Qualifier in $objClass.Qualifiers_
            If Instr($Qualifier.Name, "ASSOCIATION") $IsQ = 1 Endif
         Next
         If $IsQ = 0 $lstClass.Additem($objClass.Path_.Class) Endif
      Endif
   Next
   $PForm.Hide
   $objWMIService = 0
EndFunction
 
Function ChooseClass()
   Dim $Max
   If $lstClass.Value <> "Begin by selecting a class"
      $Class = $lstClass.Value
      $Form.MousePointer = 11
      $PForm.Caption = "Customizing Script..."
      $PBar.Value = 0
      $PForm.Center
      $PForm.Show
      $Textbox.Show
      $TextBox.Text = ""
      $cmdRun.Enabled  = 0
      $cmdSave.Enabled = 0
      $objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
      $objClass = $objWMIService.Get($Class)
      $PBar.Max = $objClass.properties_.Count
      $Script = 'Break On' + @CRLF
      $Script = $Script + '$$strComputer = "."' + @CRLF
      $Script = $Script + '$$objWMIService = GetObject("winmgmts:\\" + $$strComputer + "\root\cimv2")' + @CRLF
      $Script = $Script + '$$colItems = $$objWMIService.ExecQuery("Select * from $Class",,48)' + @CRLF
      $Script = $Script + 'For each $$objItem in $$colItems' + @CRLF
      For Each $objProperty in $objClass.properties_
         $PBar.Value = $PBar.Value + 1
         $Prop = $objProperty.name
         If $objProperty.IsArray
            $Script = $Script + '  For each $$Item in $objItem.' + $Prop + @CRLF
            $Script = $Script + '    "*' + $Prop + ': " + $$Item ?' + @CRLF
            $Script = $Script + '  Next' + @CRLF
         Else
            $Script = $Script + '  "' + $Prop + ': " + $$objItem.' + $Prop + ' ?' + @CRLF
         Endif
      Next
      $Script = $Script + '  ?' + @CRLF
      $Script = $Script + 'Next'
      $script = $script + @CRLF + "? 'Press Any Key to Close the Window'" + @CRLF + "Get $"
      $TextBox.Text = $Script
      $cmdRun.Enabled  = 1
      $cmdSave.Enabled = 1
      $cmdRun.SetFocus
   Else
      $TextBox.Text = ""
      $cmdRun.Enabled  = 0
      $cmdSave.Enabled = 0
   Endif
   $PForm.Hide
   $Form.MousePointer = 0
   $objWMIService = 0
EndFunction
 
Function RunScript()
   $objFSO = CreateObject("Scripting.FileSystemObject")
   $strTmpName = "temp_script.kix"
   $objScript = $objFSO.CreateTextFile($strTmpName)
   $objScript.Write ($TextBox.Text)
   $objScript.Close
   $objShell = CreateObject("WScript.Shell")
   If "@SCRIPTEXE"<>"wkix32.exe"
      $strCmdLine = "kix32.exe"
   Else
      $strCmdLine = "wkix32.exe"
   EndIf
   If @SCRIPTDIR<>@CURDIR and Exist(@SCRIPTDIR + "\" + @SCRIPTEXE)
      $strCmdLine = '"' + @SCRIPTDIR + $strCmdLine + '" "' + $strTmpName + '"'
   Else
      $strCmdLine = '"' + $strCmdLine + ' "' + $strTmpName + '"'
   EndIf
   $nul = $objShell.Run($strCmdLine)
EndFunction
 
Function SaveScript()
   $objFSO = CreateObject("Scripting.FileSystemObject")
   $strTmpName = "temp_script.kix"
   $objScript = $objFSO.CreateTextFile($strTmpName)
   $objScript.Write ($TextBox.Text)
   $objScript.Close
   $dlgSave = $Form.FileSaveDialog("Save File",@SCRIPTDIR,$Class+".kix","KiX Files|*.kix|All Files|*.*|",2)
   Copy $strTmpName $dlgSave
EndFunction
 
Function OpenScript()
   $dlgOpen = $Form.FileOpenDialog("Open File",@SCRIPTDIR,,"KiX Files|*.kix|All Files|*.*|",4)
   $objFSO = CreateObject("Scripting.FileSystemObject")
   $objFile = $objFSO.OpenTextFile($dlgOpen)
   $Script = $objFile.ReadAll()
   $TextBox.Text =  $Script
   $objFile.Close
   $Textbox.Show
   $cmdRun.Enabled  = 1
   $cmdSave.Enabled = 1
EndFunction
 
Function QuitScript()
   $objFSO = CreateObject("Scripting.FileSystemObject")
   $objFSO.DeleteFile ("temp_script.kix")
   $objFSO = 0
   $nul=Setconsole("Show")
   Quit()
EndFunction