Page 2 of 2

Re: How to embed VBS in PB App

Posted: Thu May 13, 2010 2:39 pm
by NoahPhense
srod wrote:
NoahPhense wrote:Thanks srod, where do I get the latest version of the ComMatePlus?

- np
Hi,

I have just updated the code to include some error trapping. You can trap errors (e.g. syntax errors) either individually or using a #COMate_CatchAllEvents event handler.

See the nxSoftware site for the latest versions of COMatePLUS etc.
Thanks, just downloaded -- I'll shout back in a bit.

- np

Re: How to embed VBS in PB App

Posted: Thu May 13, 2010 4:20 pm
by NoahPhense
Here's what I have so far.. see the comment in the middle of the script.

- np

Code: Select all

XIncludeFile "COMatePLUS.pbi"

code$ = "Dim DomainName" + #CRLF$
code$ + "Dim UserAccount" + #CRLF$
code$ + "Set net = WScript.CreateObject(" + Chr(34) + "WScript.Network" + Chr(34) + ")" + #CRLF$
code$ + "local = net.ComputerName" + #CRLF$
code$ + "DomainName = " + Chr(34) + "XXXXXX" + Chr(34) + #CRLF$
code$ + "UserAccount = " + Chr(34) + "XXXXXX" + Chr(34) + #CRLF$
code$ + "set group = GetObject(" + Chr(34) + "WinNT://" + Chr(34) + "& local &" + Chr(34) + "/Administrators" + Chr(34) + ")" + #CRLF$
code$ + "group.Add " + Chr(34) + "WinNT://" + Chr(34) + "& DomainName &" + Chr(34) + "/" + Chr(34) + "& UserAccount &" + Chr(34) + Chr(34) + #CRLF$
code$ + "DomainName = " + Chr(34) + "XXXXXX" + Chr(34) + #CRLF$
code$ + "UserAccount = " + Chr(34) + "XXXXXX" + Chr(34) + #CRLF$
code$ + "set group = GetObject(" + Chr(34) + "WinNT://" + Chr(34) + "& local &" + Chr(34) + "/Administrators" + Chr(34) + ")" + #CRLF$
code$ + "group.Add " + Chr(34) + "WinNT://" + Chr(34) + "& DomainName &" + Chr(34) + "/" + Chr(34) + "& UserAccount &" + Chr(34) + Chr(34) + #CRLF$

; THIS CODE BELOW IS COPIED .. I DON'T NEED TO PROCESS THE OUTPUT OF THE ABOVE CODE, I JUST NEED IT TO EXECUTE
; NOT SURE HOW TO DO THAT

Define.COMateObject scriptObject, errorObject
scriptObject = COMate_CreateObject("MSScriptControl.ScriptControl.1")

If scriptObject
  scriptObject\SetProperty("Language = 'VBScript'")
  If scriptObject\Invoke("AddCode('" + code$ + "')") = #S_OK
    result = scriptObject\GetIntegerProperty("Eval('result')")
    MessageRequester("Script demo", Chr(34) + code$ + Chr(34) + #LF$ + #LF$ + "Produced a result of : " + Str(result))
  Else
    errorObject = scriptObject\GetObjectProperty("Error")
    If errorObject 
      MessageRequester("Script demo - error reported!", Chr(34) + errorObject\GetStringProperty("Text") + Chr(34) + #LF$ + " produced the following error : " + #LF$ + #LF$ + errorObject\GetStringProperty("Description"))
      errorObject\Release()
    EndIf
  EndIf
  scriptObject\Release()
Else
  MessageRequester("COMate - Scripting demo", "Couldn't create the scripting object!")
EndIf

Re: How to embed VBS in PB App

Posted: Thu May 13, 2010 4:45 pm
by NoahPhense
I get the error using COMMATE, "object required: WScript" ..

Re: How to embed VBS in PB App

Posted: Thu May 13, 2010 7:03 pm
by srod
The following works fine here :

Code: Select all

IncludePath "..\"
XIncludeFile "COMatePLUS.pbi"

code$ = "Dim DomainName" + #CRLF$
code$ + "Dim UserAccount" + #CRLF$
code$ + "Set net = CreateObject(" + Chr(34) + "WScript.Network" + Chr(34) + ")" + #CRLF$
code$ + "computerName = net.ComputerName"

Define.COMateObject scriptObject, errorObject
scriptObject = COMate_CreateObject("MSScriptControl.ScriptControl.1")

If scriptObject
  scriptObject\SetProperty("Language = 'VBScript'")
  If scriptObject\Invoke("AddCode('" + code$ + "')") = #S_OK
    result$ = scriptObject\GetStringProperty("Eval('computerName')")
    MessageRequester("Script demo", Chr(34) + code$ + Chr(34) + #LF$ + #LF$ + "Produced a result of : " + result$)
  Else
    errorObject = scriptObject\GetObjectProperty("Error")
    If errorObject 
      MessageRequester("Script demo - error reported!", Chr(34) + errorObject\GetStringProperty("Text") + Chr(34) + #LF$ + " produced the following error : " + #LF$ + #LF$ + errorObject\GetStringProperty("Description"))
      errorObject\Release()
    EndIf
  EndIf
  scriptObject\Release()
Else
  MessageRequester("COMate - Scripting demo", "Couldn't create the scripting object!")
EndIf
Note how I altered the "Set net = ..." script line. For your code, make a similar alteration and use the 'ExecuteStatement' method of the script object.

Code: Select all

If scriptObject
  scriptObject\SetProperty("Language = 'VBScript'")
  If scriptObject\Invoke("ExecuteStatement('" + code$ + "')") = #S_OK
    MessageRequester("Script demo", "Success!")
  Else
    ...
By the way, I am guessing that you can do all this stuff with COMate and without having to invoke the scipting host.