免密自動登陸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}!\\.\root\cimv2") 
      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}!\\.\root\cimv2") 
      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)\SAP\FrontEnd\SAPgui\" & 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)%\SAP\FrontEnd\SAPgui\saplogon.exe
也就是在瀏覽中選擇saplogon.exe文件.

兩種方式的比較

  • bat方式比較簡單
  • bat只能使用系統描述登陸
  • vbs方式相對復雜一些
  • vbs方式可以使用ip登陸
  • vbs方式可以添加GUI scripting(腳本錄制和回放)代碼,實現自動處理.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM