Page 1 of 3 123>
Topic Options
#88247 - 2002-09-22 12:55 AM The All-New KiXomatic 2.2 - 'Now with KiX! and WKiX!'
Chris S. Offline
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.)

 Code:
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
#88248 - 2002-09-22 05:23 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S. Offline
MM club member
*****

Registered: 2002-03-18
Posts: 2368
Loc: Earth
Tweaked WMIQuery to exit after loading the first set of values. Speeds up 'customizing' the script, especially with dealing with classes with many values.
Top
#88249 - 2002-09-24 02:33 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Will Hetrick Offline
Hey THIS is FUN

Registered: 2001-10-02
Posts: 320
Loc: Harrisburg, PA USA
What a neat script Chris. I will enjoy playing with this one!
_________________________
You have at least 2 choices. Each choice changes your destiny. Choose wisely!

Top
#88250 - 2002-09-24 02:38 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S. Offline
MM club member
*****

Registered: 2002-03-18
Posts: 2368
Loc: Earth
Thanks. I think it makes a good companion to Rad's WMIQuery() in that you can run a quick script against a class and see if there is any relevant information you want to capture.
Top
#88251 - 2002-09-24 05:41 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Waltz Offline
Seasoned Scripter

Registered: 2002-08-01
Posts: 485
Loc: Waterloo, Ontario, Canada
[Big Grin]
...Verrry nice...
Thanks...
_________________________
We all live in a Yellow Subroutine...

Top
#88252 - 2002-09-24 06:55 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
NTDOC Administrator Offline
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. [Big Grin]

Top
#88253 - 2002-10-03 10:26 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
kholm Offline
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 [Wink]

I would suggest this script as a howto on COM and WMI in the FAQ-forum

Cris,
Can i subscribe on updates [Smile]

Top
#88254 - 2002-10-03 10:35 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S. Offline
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. [Big Grin]

Top
#88255 - 2002-10-03 10:39 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Schuliebug Offline
Hey THIS is FUN
*****

Registered: 2002-01-18
Posts: 379
Loc: Netherlands
Very nice, very usable code !!!!
_________________________
Kind regards,

Top
#88256 - 2002-10-11 12:46 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Lonkero Administrator Offline
KiX Master Guru
*****

Registered: 2001-06-05
Posts: 22346
Loc: OK
went to msdn, searched... no go
went to technet, searched... only for xp and .net server

checked from typelibs, not working...

tried with kixomatic, success.

chris, I must admit you have earned your stars.
 
_________________________
!

download KiXnet

Top
#88257 - 2002-10-10 02:15 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Kdyer Offline
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
_________________________
Utilize these resources:
UDFs (Full List)
KiXtart FAQ & How to's

Top
#88258 - 2002-10-10 04:19 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S. Offline
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
#88259 - 2002-10-10 04:26 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Chris S. Offline
MM club member
*****

Registered: 2002-03-18
Posts: 2368
Loc: Earth
Oh, yeah, and lines that output arrays has an '*' in front of it so you can spot them easier.
Top
#88260 - 2003-07-12 01:46 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Lonkero Administrator Offline
KiX Master Guru
*****

Registered: 2001-06-05
Posts: 22346
Loc: OK
I copy&pasted this to my favorite editor (notepad) and it screwed everything up :'(
_________________________
!

download KiXnet

Top
#88261 - 2003-07-14 09:40 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Jochen Administrator Offline
KiX Supporter
*****

Registered: 2000-03-17
Posts: 6380
Loc: Stuttgart, Germany
Did you try using Wordpad first ? [Razz]
_________________________



Top
#88262 - 2003-07-14 10:23 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Lonkero Administrator Offline
KiX Master Guru
*****

Registered: 2001-06-05
Posts: 22346
Loc: OK
it does not say anything about wordpad-transformation [Mad]
_________________________
!

download KiXnet

Top
#88263 - 2003-07-14 10:39 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Jochen Administrator Offline
KiX Supporter
*****

Registered: 2000-03-17
Posts: 6380
Loc: Stuttgart, Germany
RTFFAQ : HOWTO: Submit code to / copy code from the board

[Razz] [Razz] [Razz] [Big Grin]

Gotcha !
_________________________



Top
#88264 - 2003-07-14 10:51 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Lonkero Administrator Offline
KiX Master Guru
*****

Registered: 2001-06-05
Posts: 22346
Loc: OK
sorry, you are the lame one. [Wink]
quote:
just cut and paste the code below into your favorite editor.

first of all, he said I can "cut and paste"
it does not work.
when I say that, I really mean it. [Roll Eyes]
like, I use such code-format that you can use your favorit editor without any buts.

secondly, I say "you can copy&paste" as who can cut from webpage? [Big Grin]
_________________________
!

download KiXnet

Top
#88265 - 2003-07-15 12:07 AM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
Jochen Administrator Offline
KiX Supporter
*****

Registered: 2000-03-17
Posts: 6380
Loc: Stuttgart, Germany
Am not responsible for sayings of contributors ... never was, never will be

Ey Chris, ever thought of using PP making such strong statements valid? Knowwhatimean, nudge nudge ...

[Razz]
_________________________



Top
#88266 - 2003-07-14 06:05 PM Re: The All-New KiXomatic 2.1 - 'Now with KiX!'
NTDOC Administrator Offline
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
Page 1 of 3 123>


Moderator:  Shawn, ShaneEP, Ruud van Velsen, Arend_, Jochen, Radimus, Glenn Barnas, Allen, Mart 
Hop to:
Shout Box

Who's Online
1 registered (mole) and 405 anonymous users online.
Newest Members
Timothy, Jojo67, MaikSimon, kvn317, kixtarts2025
17874 Registered Users

Generated in 0.077 seconds in which 0.026 seconds were spent on a total of 12 queries. Zlib compression enabled.

Search the board with:
superb Board Search
or try with google:
Google
Web kixtart.org