|
|
|||||||
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 |
||||||||
|
|
|||||||
Tweaked WMIQuery to exit after loading the first set of values. Speeds up 'customizing' the script, especially with dealing with classes with many values. |
||||||||
|
|
|||||||
What a neat script Chris. I will enjoy playing with this one! |
||||||||
|
|
|||||||
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. |
||||||||
|
|
|||||||
...Verrry nice... Thanks... |
||||||||
|
|
|||||||
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. |
||||||||
|
|
|||||||
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 |
||||||||
|
|
|||||||
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. |
||||||||
|
|
|||||||
Very nice, very usable code !!!! |
||||||||
|
|
|||||||
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.   |
||||||||
|
|
|||||||
Chris, Very cool! This version works great, where previous versions were problematic. Good work. Thanks! Kent |
||||||||
|
|
|||||||
Version 2.1 incorporates some minor bug-fixes relating to the forms and also a RFC or two.
|
||||||||
|
|
|||||||
Oh, yeah, and lines that output arrays has an '*' in front of it so you can spot them easier. |
||||||||
|
|
|||||||
I copy&pasted this to my favorite editor (notepad) and it screwed everything up :'( |
||||||||
|
|
|||||||
Did you try using Wordpad first ? |
||||||||
|
|
|||||||
it does not say anything about wordpad-transformation |
||||||||
|
|
|||||||
RTFFAQ : HOWTO: Submit code to / copy code from the board Gotcha ! |
||||||||
|
|
|||||||
sorry, you are the lame one. quote:first of all, he said I can "cut and paste" it does not work. when I say that, I really mean it. 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? |
||||||||
|
|
|||||||
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 ... |
||||||||
|
|
|||||||
You mean kind of like this? |
||||||||
|
|
|||||||
doc, it looks nice. even though, the shit color might not be the best one... but that indeed is COPY&pasteable. |
||||||||
|
|
|||||||
...but I still cannot Cut & Paste. |
||||||||
|
|
|||||||
Yeah... 2 problems I don't think anyone is going to solve in their code. CUT and Acceptable colors for eveyone. |
||||||||
|
|
|||||||
The lengths you guys will go to to increase your post-count. Is this description better? BTW, I plan on updating this script when the latest KF dll goes gold. Sometime in the next decade, I imagine. |
||||||||
|
|
|||||||
LOL |
||||||||
|
|
|||||||
Thanks Chris. Guys, I guess we've been found out. Now for MCA to try and figure out how to discount these posts from his stats> |
||||||||
|
|
|||||||
chris, I still wonder what is that ",,48" in those getobjects... I've found almost all I've tried working without it. is it some sorta trojan? |
||||||||
|
|
|||||||
More like a sig than a trojan. But...it does serve some purpose: http://www.kixtart.org/board/ultimatebb.php?ubb=get_topic;f=1;t=005971#000010 |
||||||||
|
|
|||||||
thank you, oh WMI-GURU! not sure I still need them anywhere but good to know that they don't most likely harm either. |
||||||||
|
|
|||||||
However, the 48 (semi-synchronous mode) cannot be used in conjunction with a .COUNT. Thus code:will not work AFAIK.$a=$objWMIService.ExecQuery("Select * from $Class",,48) |
||||||||
|
|
|||||||
Just wanted to say REALLY nice work Chris S! ...and I'm not gonna be a bitch-o-matic about anything which seems more popular than staying on-topic for some these days |
||||||||
|
|
|||||||
Hey, thanks! |
||||||||
|
|
|||||||
Hey Chris!! congrats man! You know what I was thinking while using it, It would be cool if you reduce the size of the combo and instead place a small textbox in order to type any word to match the array populated into the big combo after an 'enter' FE. In that case you can type the word 'Video' FE and just populate only the ones that match some part of any array item. Just a feedback thought Chris...thanks. |
||||||||
|
|
|||||||
I have updated KiXomatic with Lonk's code to handle WKiX, plus I have optimized the script generation code to handle arrays better. No more long hangups while generating a script! |
||||||||
|
|
|||||||
lol, you had to do something meaningfull for your 2000th post. and I'm glad my modifications made to the mainstream kixomatic version. |
||||||||
|
|
|||||||
Works great. Thanks again Chris |
||||||||
|
|
|||||||
How about KixOMatic showing methods too ? |
||||||||
|
|
|||||||
idea is nice but how to really do that as an example code is rather not that easy. maybe as comments... |
||||||||
|
|
|||||||
Something like this perhaps ? Code:
|
||||||||
|
|
|||||||
well, that's not how the properties work either. but, as many of us know, there is just so little methods in WMI. as example, in pnpEntity, I think there was just 2 methods, and both are unusable! |
||||||||
|
|
|||||||
Thats true, although the "terminate" method in WIN32_Process is a handy one. I just mentioned it for the completeness of KiXoMatic. WIN32_PnPEntity should have an "Uninstall" method |
||||||||
|
|
|||||||
chris i get an error line 27 when I run the kixomatic? It shows it wants to run but stops and give me and error at line 27. I have kixforms installed right and then use wkix32 to run the kixomatic2.kix file right? thanks |
||||||||
|
|
|||||||
chris i solved it i needed the kix classic msi file installed for it to work thanks i got it looks freaking awesome great job man wow! robert |
||||||||
|
|
|||||||
when i run the kixomatic 2 i get this error need file temp_script.kixF! where do I get his kix file? thanks |
||||||||
|
|
|||||||
CHris and NTDOC you guys are freaking geniuses I love kixomatic got it working chris thanks wow is this fantastic! wowowowowo! -Robert |