zoukankan      html  css  js  c++  java
  • 免密自动登陆SAPGui

    下面介绍两种免密自动登陆的方式

    使用bat(批处理)文件自动登陆

    将如下代码通过文本编辑器保存为bat文件

    start sapshcut.exe -user=ITL_WEIXP -pw=Qq12345678 -language=ZH -SYSTEM=S4D -CLIENT=300 -sysname=xxxdev -maxgui

    修改相应的参数

    以上代码的意思是启动sapshcut.exe程序,并使用如下参数.

    • -user:用户
    • -pw:密码
    • -language:语言
    • -SYSTEM:系统标识
    • -CLIENT:集团
    • -sysname:连接名称.连接名称无法识别中文

    双击文件登陆

    如果对应的连接的client已经打开,则不会打开新的gui窗口.
    参考:https://blogs.sap.com/2016/11/02/sap-automatic-logon-using-bat-file/

    关于sapshcut.exe的其他参数含义可以通过:run->sapshcut.exe /? 查看.

    使用VBS加SAP GUI scripting(脚本录制和回放)自动登陆

    • 使用前要确保相应的系统已经开启脚本录制和回放功能.
    • 使用代码RZ11查看或者修改参数sapgui/user_scripting的值为true.

      *在Gui的选项中开启脚本录制和回放.

    将下边代码复制到文本编辑器中并保存为vbs格式.

    '------------------------------------------------------------------
    '- VBScript to start SAP Logon if process doesn't exists and connect
    '- to an SAP system. The SAP Logon process is detected via WMI
    '- (Windows Management Instrumentarium), also the termination.
    '-----------------------------------------------------------------------
      '-Directives----------------------------------------------------------
        Option Explicit
      '-Variables-----------------------------------------------------------
        Dim SAPLogon, SAPLogonTitle
        SAPLogon = "saplogon.exe" : SAPLogonTitle = "SAP Logon 770"
        'SAPLogon = "saplgpad.exe" : SAPLogonTitle = "SAP Logon Pad 740"
        Dim SysDescr, SysIP
        '-----------------------------------------------------------------
        'Sysdescr系统描述,SysIP连接地址.两选一.使用ip的时候如果用用router,
        '需要将router加在地址前边.用/H/开始
        '-----------------------------------------------------------------
        'SysDescr = "xxxdev" 
        'SysIP = "/H/218.77.58.137"
         SysIP = "/H/HY.XX.NET/H/192.168.18.12"
      '-Function FindProcess------------------------------------------------
        Function FindProcess(ProcessName)
          '-Variables-------------------------------------------------------
            Dim WMIServ, Processes, Process
          FindProcess = False
          Set WMIServ = GetObject("winmgmts:{impersonationLevel=" & _
           "impersonate}!\.
    ootcimv2") 
          Set Processes = WMIServ.ExecQuery("Select * from Win32_Process " & _
            "Where Name = '" & ProcessName & "'")
          For Each Process In Processes
            FindProcess = True
            Exit Function
          Next
        End Function
      '-Sub TerminateProcess------------------------------------------------
        Sub TerminateProcess(ProcessName)
          '-Variables-------------------------------------------------------
          Dim WMIServ, Processes, Process
          Set WMIServ = GetObject("winmgmts:{impersonationLevel=" & _
            "impersonate}!\.
    ootcimv2") 
          Set Processes = WMIServ.ExecQuery("Select * from Win32_Process " & _
            "Where Name = '" & ProcessName & "'")
          For Each Process In Processes
            Process.Terminate()
            Exit Sub
          Next
        End Sub
      '-Function GetSAPGUIObject--------------------------------------------
      '- This function starts the SAP Logon if it is necessary and delivers
      '- its object
      '---------------------------------------------------------------------
        Function GetSAPGUIObject()
          '-Variables-------------------------------------------------------
            Dim WshShell, Exec
          If FindProcess(SAPLogon) Then
            Set GetSAPGUIObject = GetObject("SAPGUI")
          Else
            Set WshShell = CreateObject("WScript.Shell")
            Set Exec = WshShell.Exec(_
              "c:Program Files (x86)SAPFrontEndSAPgui" & SAPLogon)
            Do While Not WshShell.AppActivate(SAPLogonTitle) 
              WScript.Sleep 500 
            Loop
            Set GetSAPGUIObject = GetObject("SAPGUI")
          End If
        End Function
      '-Sub Main------------------------------------------------------------
        Sub Main()
          '-Variables-------------------------------------------------------
          Dim SapGuiAuto, Application, Connection, Session
          Set SapGuiAuto = GetSAPGUIObject()
          If Not IsObject(SapGuiAuto) Then
            Exit Sub
          End If
          Set Application = SapGuiAuto.GetScriptingEngine
          If Not IsObject(Application) Then
            Set SapGuiAuto = Nothing
            Exit Sub
          End If
          '-----------------------------------------------------------------
          '- 在下边决定用系统描述或者ip地址
          '-----------------------------------------------------------------
          'Set Connection = Application.OpenConnection(SysDescr, True)
          Set Connection = Application.OpenConnectionByConnectionString( SysIP, True)
          If Not IsObject(Connection) Then
            Set Application = Nothing
            Set SapGuiAuto = Nothing
            Exit Sub
          End If
          Set Session = Connection.Children(0)
          If Not IsObject(Session) Then
            Set Connection = Nothing
            Set Application = Nothing
            Set SapGuiAuto = Nothing
            Exit Sub
          End If
          MyScript(Session)
          'Set Session = Nothing
          'Set Connection = Nothing
          'Set Application = Nothing
          'Set SapGuiAuto = Nothing
          'TerminateProcess SAPLogon
        End Sub
      '-Sub MyScript--------------------------------------------------------
        Sub MyScript(Session)
          '-----------------------------------------------------------------
          '- 在下边更改用户,密码,语言client.
          '-----------------------------------------------------------------
          session.findById("wnd[0]").maximize
          session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "800"
          session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "weixp"
          session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "qwer1234"
          session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "ZH"
          session.findById("wnd[0]").sendVKey 0
        End Sub
      '-Main----------------------------------------------------------------
      Main
    

    修改代码中的系统描述,系统ip,用户,密码等

    需要注意的是系统描述和用户名不支持中文.

    双击文件登陆系统

    修改文件图标

    由于bat,vbs文件的图标不太好看.可以通过创建对应文件的快捷方式,修改快捷方式的图标来进行调整

    修改快捷方式的图标

    sap图片地址:%ProgramFiles(x86)%SAPFrontEndSAPguisaplogon.exe
    也就是在浏览中选择saplogon.exe文件.

    两种方式的比较

    • bat方式比较简单
    • bat只能使用系统描述登陆
    • vbs方式相对复杂一些
    • vbs方式可以使用ip登陆
    • vbs方式可以添加GUI scripting(脚本录制和回放)代码,实现自动处理.
  • 相关阅读:
    Spring3系列4-多个配置文件的整合
    Spring3系列3 -- JavaConfig
    Spring3系列2 -- 松耦合的实现
    Spring3系列1 -- HelloWord例子
    Maven3路程(六)用Maven创建Spring3 MVC项目
    用Hibernate Tools生成Hibernate Mapping映射文件
    在Maven仓库中添加Oracle JDBC驱动
    Maven3路程(四)用Maven创建Struts2项目
    Maven3路程(三)用Maven创建第一个web项目(2)servlet演示
    Eclipse中集成Tomcat
  • 原文地址:https://www.cnblogs.com/weixiaopeng/p/15424900.html
Copyright © 2011-2022 走看看