Skip to Content

Hello community,

everbody knows GuiXT – the comfortable library to individualize the SAP screens. It is standard part of the SAP GUI for Windows and you can use it without any problems. You can find more information about GuiXT here.

GuiXT offers the possibility to use function calls from DLLs inside a GuiXT script, with the command Call. Here an GuiXT script example how to use the Windows API function ShellExecute. On this way you can execute any file you like.

Cheers
Stefan

//-Begin----------------------------------------------------------------

  //-With InputAssistant------------------------------------------------

    //-Flags------------------------------------------------------------

      //-ShowWindow-----------------------------------------------------
        Set V[SW_HIDE] "0"
        Set V[SW_SHOWNORMAL] "1"
        Set V[SW_NORMAL] "1"
        Set V[SW_SHOWMINIMIZED] "2"
        Set V[SW_SHOWMAXIMIZED] "3"
        Set V[SW_MAXIMIZE] "3"
        Set V[SW_SHOWNOACTIVATE] "4"
        Set V[SW_SHOW] "5"
        Set V[SW_MINIMIZE] "6"
        Set V[SW_SHOWMINNOACTIVE] "7"
        Set V[SW_SHOWNA] "8"
        Set V[SW_RESTORE] "9"
        Set V[SW_SHOWDEFAULT] "10"
        Set V[SW_FORCEMINIMIZE] "11"
        Set V[SW_MAX] "11"

    //-ShellExecute-----------------------------------------------------
      Set V[hWnd] "0"
      Set V[Operation] "open"
      Set V[File] "Test.vbs"
      Set V[Parameters] ""
      Set V[Directory] "C:\Dummy"
      Set V[ShowCmd] V[SW_SHOWNORMAL]

      Call "ShellExecuteA" dll="shell32.dll" In="&V[hWnd]" In="&V[Operation]" In="&V[File]" In="&V[Parameters]" In="&V[Directory]" In="&V[ShowCmd]" Out="rc"


  //-Without InputAssistant---------------------------------------------

    //-ShellExecute-----------------------------------------------------
      Call "ShellExecuteA" dll="shell32.dll" In="0" In="open" In="Test.vbs" In="" In="C:\Dummy" In="1" Out="rc"

//-End------------------------------------------------------------------
To report this post you need to login first.

4 Comments

You must be Logged on to comment or reply to a post.

    1. Stefan Schnell Post author

      Hello James,

      sure, try this:

      Call "ShellExecuteA" dll="shell32.dll" In="0" In="open" In="cmd.exe" In="/C START /WAIT Test.vbs" In="C:\Dummy" In="1" Out="rc"

      Use instead the script your executable program.

      Cheers

      Stefan

      (0) 
      1. James Wilkins

        Thanks, but that doesn’t work.  The “Call …” exits immediately. It’s the call I want to block until the executed program completes.  I don’t see the point of the call command to be asynchronous in a synchronous script…!?

        (0) 
        1. Stefan Schnell Post author

          Hello James,

          thanks for your reply. You are right, ShellExecute returns immediately, independently if the started programs runs or not. Sorry for my failure.

          Here a possible solution with a DLL:

          ; Begin-----------------------------------------------------------------
          ;
          ; PureBasic Dynamic Link Library (DLL) for GuiXT
          ;
          ; Author: Stefan Schnell
          ;
          ; ----------------------------------------------------------------------
          
            ; Function expShell---------------------------------------------------
              ProcedureDLL.i expShell(inFile.s, inParam.s, inDir.s)
          
                ; Variables-------------------------------------------------------
                  Protected resShell.i
          
                resShell = RunProgram(inFile, inParam, inDir, #PB_Program_Wait)
                ProcedureReturn resShell
          
              EndProcedure
          
          ; End-------------------------------------------------------------------

          This function can call via GuiXT

          //-Begin----------------------------------------------------------------
          
            Call "expShell" dll="LibShell.dll" In="cmd.exe" In="/K" In="C:\Dummy"
          
          //-End------------------------------------------------------------------

          And in this case the execution of the script waits until the cmd.exe is terminated.

          Cheers

          Stefan

          (0) 

Leave a Reply