#88247  - 2002-09-22  12:55 AM  
 
The All-New KiXomatic 2.2 - 'Now with KiX! and WKiX!' 
 
 
 
 
Chris S.  
MM club member
 
 
Here it is, the all-new KiXomatic 2.2 . Now with KiX!  and WKiX!!! KiXforms , you too can program the WIN32 Class of Windows Management Instrumentation to impress your boss or pick up members of the opposite sex!copy  and paste the code below into your favorite editor. (Line breaks optional.) 
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  
 
  
Top 
 
 
 
 
 
 
 
#88252  - 2002-09-24  06:55 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
NTDOC  
Administrator 
 
 
Chris, 
 
  
Top 
 
 
 
 
 
 
 
#88253  - 2002-10-03  10:26 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
kholm  
Korg Regular
 
 
Very nice 
 
  
Top 
 
 
 
 
 
 
 
#88254  - 2002-10-03  10:35 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
Chris S.  
MM club member
 
 
Thank you. Of course, the enum function and the look and feel was 'borrowed' from the 'Script Guys' Scriptomatic script. The 'array detect' is new, however. 
 
  
Top 
 
 
 
 
 
 
 
#88257  - 2002-10-10  02:15 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
Kdyer  
KiX Supporter
 
 
Chris, 
 
  
Top 
 
 
 
 
 
 
 
#88258  - 2002-10-10  04:19 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
Chris S.  
MM club member
 
 
Version 2.1 incorporates some minor bug-fixes relating to the forms and also a RFC or two.MousePointer default for script textbox. Bugfix in KiXforms eliminated need to set a default value. Added flags to Open and Save dialog boxes. Added a pipe to workaround bug in KiXforms 2.1. Tweaked the QuitScript() routine to exit more gracefully and to catch those who use the [x] Tweaked SaveScript() to save the temp_script before opening the dialog.  
 
  
Top 
 
 
 
 
 
 
 
#88263  - 2003-07-14  10:39 AM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
Jochen  
KiX Supporter 
 
 
  
Top 
 
 
 
 
 
 
 
#88266  - 2003-07-14  06:05 PM  
 
Re: The All-New KiXomatic 2.1 - 'Now with KiX!' 
 
 
 
 
NTDOC  
Administrator 
 
 
You mean kind of like this?Break  On 
$nul Setconsole ("Hide" )
$Form CreateObject ("Kixtart.Form" )
$Form.Caption "KiXomatic" 
$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 $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" )
For  Each  $objClass in  $objWMIService.SubclassesOf $Max $Max 1  Next 
$PBar.Max $Max 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 For  Each  $objProperty in  $objClass.properties_ $Max $Max 1  Next 
$PBar.Max $Max $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  instr (WMIQuery $Prop $Class "$$value" )
$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' 
$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" )
$strCmdLine "%COMSPEC% /k kix32.exe " 
$strCmdLine $strCmdLine $strTmpName $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 
Function  WMIQuery $what $from optional  $computer optional  $where optional  $x dim  $strQuery $objEnumerator $value if  not $computer $computer "@WKSTA" 	endif 
$strQuery "Select $what From $from" 
if  $where $x $strQuery $strQuery " Where $where = '$x'" 		endif 
$SystemSet GetObject ("winmgmts:{impersonationLevel=impersonate}!//$computer" )
$objEnumerator $SystemSet.ExecQuery $strQuery For  Each  $objInstance in  $objEnumerator If  @Error 0  and $objInstance "" 
$ execute ("$$value = $$objInstance.$what" )
$WMIQuery "$value" +"|" +"$WMIQuery" 
EndIf 
exit  @error Next 
;$WMIQuery=left($WMIQuery,len($WMIQuery)-1) exit  @error EndFunction 
 
 
  
Top 
 
 
 
 
 
 
 
Moderator:  Shawn , ShaneEP , Ruud van Velsen , Arend_ , Jochen , Radimus , Glenn Barnas , Allen , Mart   
 
 
 
1 registered
(mole )
and 529 anonymous users online.