Opt('MustDeclareVars', 1)

#include <Array.au3>
;~ #Include <Debug.au3>

Local $sVBS = _Convert_VBSScript_From_WMICodeCreator_To_AU3Script()
ConsoleWrite($sVBS)
ClipPut($sVBS)

Func _Convert_VBSScript_From_WMICodeCreator_To_AU3Script()
	Local $sVBS, $aVBS, $iStrLen, $hCodeText = ControlGetHandle(WinGetHandle('WMI Code Creator'), '', '[NAME:CodeText]')
	If Not IsHWnd($hCodeText) Then Return SetError(1, 0, '')

	$sVBS = ControlGetText($hCodeText, '', '')
	If Not StringRegExp($sVBS, '^strComputer =') Then Return SetError(2, 0, '')

	$aVBS = StringRegExp($sVBS, '(.+)\R?', 3)
	If @error Then Return SetError(3, 0, '')

	For $i = 0 To UBound($aVBS) - 1 Step 1
		Switch $i
			Case 0
				$aVBS[0] = StringRegExpReplace($aVBS[0], '(strComputer = ".+")\s?', 'Local $\1')
			Case 1
				$aVBS[1] = StringReplace($aVBS[1], 'Set objWMIService = GetObject', 'Local $objWMIService = ObjGet')
				$aVBS[1] = StringReplace($aVBS[1], 'strComputer', '$strComputer')
			Case 2
				$aVBS[2] = StringReplace($aVBS[2], 'Set colItems = objWMIService', 'Local $colItems = $objWMIService')
			Case 3
				; WQL = WMI Query Language : https://docs.microsoft.com/de-de/sql/relational-databases/wmi-provider-server-events/using-wql-with-the-wmi-provider-for-server-events
				$aVBS[3] = StringReplace($aVBS[3], ',,', ",'WQL',")
			Case 4
				$aVBS[4] = StringReplace($aVBS[4], 'For Each objItem in colItems', 'For $objItem In $colItems')
			Case Else
				$aVBS[$i] = StringRegExpReplace($aVBS[$i], 'Wscript.Echo (.+)', 'ConsoleWrite(\1 & @CRLF)')
				$iStrLen = 42 - StringLen(StringRegExpReplace($aVBS[$i], '"(.+): ".+', '\1'))
				$aVBS[$i] = StringRegExpReplace($aVBS[$i], '(".+)(: ".+)', StringFormat('%-' & $iStrLen & 's%s', '\1', '\2'))
				$aVBS[$i] = StringReplace($aVBS[$i], 'objItem', '$objItem')
		EndSwitch
	Next
;~ 	_DebugArrayDisplay($aVBS, '$aVBS - $i = ' & $i)
	Return _ArrayToString($aVBS, @CRLF) & @CRLF
EndFunc   ;==>_Convert_VBSScript_From_WMICodeCreator_To_AU3Script

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Example
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#cs VBS
	strComputer = "."
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
	Set colItems = objWMIService.ExecQuery( _
		"SELECT * FROM Win32_ComputerSystemProduct",,48)
	For Each objItem in colItems
		Wscript.Echo "-----------------------------------"
		Wscript.Echo "Win32_ComputerSystemProduct instance"
		Wscript.Echo "-----------------------------------"
		Wscript.Echo "Caption: " & objItem.Caption
		Wscript.Echo "Description: " & objItem.Description
		Wscript.Echo "IdentifyingNumber: " & objItem.IdentifyingNumber
		Wscript.Echo "Name: " & objItem.Name
		Wscript.Echo "SKUNumber: " & objItem.SKUNumber
		Wscript.Echo "UUID: " & objItem.UUID
		Wscript.Echo "Vendor: " & objItem.Vendor
		Wscript.Echo "Version: " & objItem.Version
	Next
#ce VBS

#cs AU3
	Local $strComputer = "."
	Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
	Local $colItems = $objWMIService.ExecQuery( _
		"SELECT * FROM Win32_ComputerSystemProduct",'WQL',48)
	For $objItem In $colItems
		ConsoleWrite("-----------------------------------" & @CRLF)
		ConsoleWrite("Win32_ComputerSystemProduct instance" & @CRLF)
		ConsoleWrite("-----------------------------------" & @CRLF)
		ConsoleWrite("Caption                : " & $objItem.Caption & @CRLF)
		ConsoleWrite("Description            : " & $objItem.Description & @CRLF)
		ConsoleWrite("IdentifyingNumber      : " & $objItem.IdentifyingNumber & @CRLF)
		ConsoleWrite("Name                   : " & $objItem.Name & @CRLF)
		ConsoleWrite("SKUNumber              : " & $objItem.SKUNumber & @CRLF)
		ConsoleWrite("UUID                   : " & $objItem.UUID & @CRLF)
		ConsoleWrite("Vendor                 : " & $objItem.Vendor & @CRLF)
		ConsoleWrite("Version                : " & $objItem.Version & @CRLF)
	Next
#ce AU3
