#88247 - 2002-09-22 12:55 AM
The All-New KiXomatic 2.2 - 'Now with KiX! and WKiX!'
Chris S.
MM club member
Registered: 2002-03-18
Posts: 2368
Loc: Earth
Here it is, the all-new KiXomatic 2.2 . Now with KiX! and WKiX!!! Using KiX (or WKIX) and KiXforms , you too can program the WIN32 Class of Windows Management Instrumentation to impress your boss or pick up members of the opposite sex! Now uses dynamic progress bars, enhanced save and open dialogs, and best of all it will automatically detect if an output is an array and inserts the proper coding to handle the pesky array. Order your copy today! Or... just 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 Edited By Chris S. (08/24/05 06:03 AM) Edited by Lonkero (12/21/07 02:08 PM) Edit Reason: re-enforced copy&paste codeblock
Top
#88252 - 2002-09-24 06:55 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11624
Loc: CA
Chris, Just wanted to say thanks for taking the time to review and code this. Very nice tool to at least get you started. Good job. Thanks again... and to you as well Shawn for the KiXForms great job there as well.
Top
#88253 - 2002-10-03 10:26 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
kholm
Korg Regular
Registered: 2000-06-19
Posts: 714
Loc: Randers, Denmark
Very nice If not for anyting else, i would like to 'ping' this post to the top of the list. I didn't check this post prior to yesterday, because the title KiXomatic told me nothing about the usefullnes. After checking, i must say: This is one of the best inventions since the wheel I would suggest this script as a howto on COM and WMI in the FAQ-forum Cris, Can i subscribe on updates
Top
#88254 - 2002-10-03 10:35 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S.
MM club member
Registered: 2002-03-18
Posts: 2368
Loc: Earth
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. I'll post updates here.
Top
#88257 - 2002-10-10 02:15 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Kdyer
KiX Supporter
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
Chris, Very cool! This version works great, where previous versions were problematic. Good work. Thanks! Kent
Top
#88258 - 2002-10-10 04:19 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S.
MM club member
Registered: 2002-03-18
Posts: 2368
Loc: Earth
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
Registered: 2000-03-17
Posts: 6380
Loc: Stuttgart, Germany
Top
#88266 - 2003-07-14 06:05 PM
Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
NTDOC
Administrator
Registered: 2000-07-28
Posts: 11624
Loc: CA
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 and $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
0 registered
and 868 anonymous users online.