How to embed VBS in PB App

Just starting out? Need help? Post your questions and find answers here.
User avatar
NoahPhense
Addict
Addict
Posts: 1999
Joined: Thu Oct 16, 2003 8:30 pm
Location: North Florida

Re: How to embed VBS in PB App

Post 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
User avatar
NoahPhense
Addict
Addict
Posts: 1999
Joined: Thu Oct 16, 2003 8:30 pm
Location: North Florida

Re: How to embed VBS in PB App

Post 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
User avatar
NoahPhense
Addict
Addict
Posts: 1999
Joined: Thu Oct 16, 2003 8:30 pm
Location: North Florida

Re: How to embed VBS in PB App

Post by NoahPhense »

I get the error using COMMATE, "object required: WScript" ..
srod
PureBasic Expert
PureBasic Expert
Posts: 10589
Joined: Wed Oct 29, 2003 4:35 pm
Location: Beyond the pale...

Re: How to embed VBS in PB App

Post 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.
I may look like a mule, but I'm not a complete ass.
Post Reply