SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Менеджер паролей для SAP



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Submit a new program | Новые материалы, программы для сайта
View previous topic :: View next topic  
Author Message
Anton Sikidin
Участник
Участник



Joined: 11 Mar 2009
Posts: 18
Location: Украина

PostPosted: Wed Apr 23, 2014 8:25 am    Post subject: Менеджер паролей для SAP Reply with quote

Программа для автоматического логина в системы SAP.

Для входа в систему каждый пользователь должен ввести login и password.

У некоторых пользователей есть картридеры и при наличии карты им не нужно вводить логин и пароль, просто выбрать систему и мандант.


Если вы ведете 15 проектов то помнить пароли от разных систем (разработка, качество, продуктив) довольно утомительно. Даже если у вас везде стоит пароль 12345678 то вводить его руками я считаю неэффективным. Зачем что-то делать если это можно автоматизировать и не делать никогда более.

Представляю свою разработку.

Программа хранит пароли в зашифрованном виде, если перенести файл настроек на другой компьютер то пароли нельзя будет расшифровать без мастер пароля.

Вобщем если к вашему компьютеру имеете доступ только вы, или не переживаете за сохранность пароля 123 то всем рекомендую.

При первом старте программа попросит вас ввести мастер пароль, он понадобится если вы с этим файлом настроек пересядете за другой компьютер.


Потом программа попытается определить расположение файла saplogon.ini и sapshcut.exe

Если программа их не найдет то появится диалог открытия файла где попросит указать необходимое. (сохранит в настройках и больше не будет тревожить)

И вы увидите такое окно



Добавляем пароли



Мандант логин и пароль ни у кого вопросов не вызывает.
Проект нужно выбрать из выпадающего списка, там отображены те названия которые у вас записаны в SAPlogon.

Эта строчка очень важна по ней идет поиск системы к которой хотим подключиться.
Просто выберите из списка и не меняйте руками.


Когда заполните все ваше окно будет выглядеть примерно так



Для входа в систему просто нажмите на нужную кнопку.

В случае переезда на другой компьютер возьмите с собой SAPLogin.ini и saplogon.ini

Для копирования в папку нажмите кнопку «Copy saplogon.ini»

На новом месте вы увидите такое окно



Вы должны вспомнить Мастер пароль для пользования старых настроек или просто удалите файл SAPLogin.ini (при запуске создастся заново) и проведите настройку заново.
код программы на AutoIT

Code:

#include <GuiConstants.au3>
#include <String.au3>
#Include <MD5.au3>
#include 'DataStructures.au3'
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1)

 

Global $var_pass
Global $var_mndt
Global $var_proj
Global $var_usr
Global $key
Global $stack
Global $id
Global $sect

Global $Form1
Global $Form2
Global $Button1
Global $PasswordEdit
Global $Input1
Global $Input2
Global $Input3

Global $sapshcut
Global $logonini

Global $masterpass

_init()
form_create()

 While 1
  Sleep(10)
 WEnd


Func ButtonOkClick()
 ;form_create()
 $var_pass = GUICtrlRead($PasswordEdit)
 $var_mndt  = GUICtrlRead($Input1)
 $var_usr = GUICtrlRead($Input2)

   $var_proj = GUICtrlRead($Input3)

 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","mndt",$var_mndt)
 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","usr", $var_usr)
 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","proj", $var_proj)

 iniwrite(@ScriptDir&'\SAPLogin.ini',$var_proj&$var_mndt&$var_usr,"usr", $var_usr)
 iniwrite(@ScriptDir&'\SAPLogin.ini',$var_proj&$var_mndt&$var_usr,"mndt", $var_mndt)
 iniwrite(@ScriptDir&'\SAPLogin.ini',$var_proj&$var_mndt&$var_usr,"proj", $var_proj)
 $var_pass = _StringEncrypt(1, $var_pass,$masterpass)
 iniwrite(@ScriptDir&'\SAPLogin.ini',$var_proj&$var_mndt&$var_usr,"pass", $var_pass)
 Exit


EndFunc

Func Copysaplogon()
   FileCopy($logonini, @ScriptDir&'\saplogon.ini')
EndFunc
Func Form2Close()
Exit
EndFunc
Func Form2Maximize()
 Return False
EndFunc


Func _init()
 $stack = _Stack_Create(5)
 $id    = _Stack_Create(5)
 $sect  = _Stack_Create(5)

$strComputer = "."
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_PhysicalMedia")
$key = ''
For $objItem In $colItems
 $key &= $objItem.SerialNumber
Next
 $key = _md5($key)


 if Not FileExists(@ScriptDir&'\SAPLogin.ini') Then
  $f = FileOpen(@ScriptDir&'\SAPLogin.ini',2)
  FileClose($f)

 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","mndt", '000')
 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","usr", 'admin')
 IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","proj", 'TestProj')

  EndIf

$sapshcut =  @ProgramFilesDir& '\SAP\FrontEnd\SapGui\sapshcut.exe'

If not  FileExists ( $sapshcut ) Then

   $sapshcut  = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","sapshcut","")

EndIf

If not  FileExists ( $sapshcut ) Then
 Local $sFileOpenDialog = FileOpenDialog("Locate  path to sapshcut.exe ", "C:\Program Files\SAP\FrontEnd\SapGui\", "sapshcut (sapshcut.exe)", 1  + 2 )
  If @error Then
    MsgBox($MB_SYSTEMMODAL, "", "sapshcut.exe не  найдена ")
    Exit
 Else
   $sapshcut =  $sFileOpenDialog
   IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","sapshcut", $sapshcut)
   EndIf
EndIf


$logonini = RegRead("HKEY_CURRENT_USER\Software\SAP\SAPLogon\ConfigFilesLastUsed", "ConnectionConfigFile")

If not  FileExists ( $sapshcut ) Then
   $logonini  = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","logonini","")
EndIf

If not  FileExists ( $logonini ) Then
 Local $sFileOpenDialog = FileOpenDialog("C:\Documents and Settings\User2\Application Data\SAP\Common", "C:\", "saplogon.ini (saplogon.ini)", 1  + 2 )
  If @error Then
    MsgBox($MB_SYSTEMMODAL, "", "saplogon.ini не  найдена ")
    Exit
 Else
   $logonini =  $sFileOpenDialog
   IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","logonini", $logonini)
   EndIf
EndIf


$masterpass = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","masterpass","")

If $masterpass = '' Then

  $masterpass = GetMasterPass()
  $masterpass = _StringEncrypt(1, $masterpass,$key)

   IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","masterpass", $masterpass)
   $masterpass = _StringEncrypt(0, $masterpass,$key)
   $test = _StringEncrypt(1, 'test',$masterpass)
   IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","test", $test)

Else
   $masterpass = _StringEncrypt(0, $masterpass,$key)
   $test = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","test","ssss")

   $test = _StringEncrypt(0, $test, $masterpass)

   If $test <> 'test' Then
   Opt("GUIOnEventMode", 0)

#Region ### START Koda GUI section ### Form=C:\Documents and Settings\User2\Рабочий стол\login2\login2\koda_1.7.3.0\Forms\pass_request.kxf
$Form3 = GUICreate("Компьютер сменился", 296, 120, -1, -1)
$ps1 = GUICtrlCreateInput("", 8, 24, 283, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))

$EnterPassLabel = GUICtrlCreateLabel("Введите мастер пароль или сотрите 'masterpass=' ", 8, 4, 283, 17, 0)
$Label1 = GUICtrlCreateLabel("в SAPLogin.ini(все пароли придется вводить заново) ", 8, 52, 283, 17, 0)
$ok_pass = GUICtrlCreateButton("Ok", 160, 88, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
   case $GUI_EVENT_CLOSE
   GUISetState(@SW_HIDE, $Form3)
   ExitLoop

  case $ok_pass
     $var_pass1 = GUICtrlRead($ps1)

     If  $var_pass1 = '' Then
     MsgBox (0,'Ошибка', 'Пароль не может быть пустым')
     Else
        $test = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","test","ssss")
        $test = _StringEncrypt(0, $test, $var_pass1)

     If $test = 'test' Then
      $masterpass = _StringEncrypt(1, $var_pass1,$key)

      IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","masterpass", $masterpass)
      $masterpass = $var_pass1
      $test = _StringEncrypt(1, 'test',$masterpass)
      IniWrite(@ScriptDir&'\SAPLogin.ini',"ini","test", $test)
      GUISetState(@SW_HIDE, $Form3)
      ExitLoop
      Else
      MsgBox(0, 'Error', ' Не угадал(a), мастер пасс был другим :(')
      EndIf
        EndIf
 EndSwitch
WEnd

   Opt("GUIOnEventMode", 1)
   EndIf
EndIf

EndFunc


Func GetMasterPass()
   Opt("GUIOnEventMode", 0)

#Region ### START Koda GUI section ### Form=C:\Documents and Settings\User2\Рабочий стол\login2\login2\koda_1.7.3.0\Forms\pass_request.kxf
$Form3 = GUICreate("Создание Мастер пароля", 246, 134, -1, -1)
$ps1 = GUICtrlCreateInput("", 8, 24, 233, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
$ps2 = GUICtrlCreateInput("", 8, 72, 233, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD))
$EnterPassLabel = GUICtrlCreateLabel("Enter password", 8, 4, 77, 17, 0)
$Label1 = GUICtrlCreateLabel("Confirm password", 8, 52, 87, 17, 0)
$ok_pass = GUICtrlCreateButton("Ok", 160, 104, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg

  case $ok_pass
     $var_pass1 = GUICtrlRead($ps1)
     $var_pass2 = GUICtrlRead($ps2)
     If  $var_pass1 <> $var_pass2 Then
     MsgBox (1,'Ошибка', 'Пароли не совпадают')
     else
     If  $var_pass1 = '' Then
     MsgBox (1,'Ошибка', 'Пароль не может быть пустым')
     Else
               GUISetState(@SW_HIDE, $Form3)
                ExitLoop
        EndIf
  EndIf
 EndSwitch
WEnd

   Opt("GUIOnEventMode", 1)
  Return $var_pass1
EndFunc

Func form_create()

Local $count
$count = 0

 

 $var = IniReadSectionNames(@ScriptDir&'\SAPLogin.ini')
 If @error Then
  MsgBox(4096, "", "Error occurred, probably no INI file.")
 Else
  $Form1 = GUICreate("Login 2.0.1", 300, 8+32*($var[0]), 350, 172)
 GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
 GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form2Minimize")
 GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form2Maximize")
 GUISetOnEvent($GUI_EVENT_RESTORE, "Form2Restore")
  _Stack_Empty($id)
  _Stack_Empty($sect)


  For $i = 1 To $var[0]

   If $var[$i] <> 'ini' Then

    $count = $count +1
    $mndt = IniRead(@ScriptDir&'\SAPLogin.ini',$var[$i],"mndt","000")
    $usr  = IniRead(@ScriptDir&'\SAPLogin.ini',$var[$i],"usr","UserName")
    $proj  = IniRead(@ScriptDir&'\SAPLogin.ini',$var[$i],"proj","TestProj")

    $Button1 = GUICtrlCreateButton($usr, 148, 8+(32*($count-1)), 139, 25, 0)
    GUICtrlSetOnEvent(-1, "SpecialEvents")

    _Stack_Push($id, $Button1)
    _Stack_Push($sect, $var[$i])
    $hMenu = GUICtrlGetHandle($Button1)
    ;MsgBox(0,$hMenu,$hMenu)

    $Label1 = GUICtrlCreateLabel($mndt, 108, 8+(32*($count-1)), 34, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")

    $Label1 = GUICtrlCreateLabel($proj, 8, 8+(32*($count-1)), 98, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
   EndIf


  Next


 EndIf

$Button3 = GUICtrlCreateButton("New Login", 148, 8+(32*($var[0]-1)), 139, 25, 0)
GUICtrlSetOnEvent(-1, "show_form2")
$Label3 = GUICtrlCreateLabel("- - -", 108, 8+(32*($var[0]-1)), 32, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)

EndFunc

func show_form2()

#Region ### START Koda GUI section ### Form=C:\Documents and Settings\asdasd\Рабочий стол\koda_1.7.3.0\Forms\Form1.kxf
$Form2 = GUICreate("Pass Creator 2.0.2", 299, 170, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form2Close")
$Label1 = GUICtrlCreateLabel("Проект", 16, 16, 69, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("Мандант", 16, 48, 84, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Логин", 16, 80, 58, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("Пароль", 16, 112, 70, 28)
GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
$Input3 = GUICtrlCreateCombo("", 112, 16, 169, 21)


   Local $aArray = IniReadSection($logonini, "Description")

   local $data
   local $item1

    If Not @error Then
        ; Enumerate through the array displaying the keys and their respective values.
        For $i = 1 To $aArray[0][0]
     if $i > 1 Then
     $data = $data & '|' & $aArray[$i][1]
     Else
      $data = $aArray[$i][1]
      $item1 = $aArray[$i][1]
     EndIf

           ; MsgBox($MB_SYSTEMMODAL, "", "Key: " & $aArray[$i][0] & @CRLF & "Value: " & $aArray[$i][1])
        Next
  EndIf

GUICtrlSetData($Input3, $data , $item1)

$Input1 = GUICtrlCreateInput("", 112, 48, 33, 21)
$Input2 = GUICtrlCreateInput("", 112, 80, 169, 21)
$Button1 = GUICtrlCreateButton("Ok", 152, 48, 131, 25)
GUICtrlSetOnEvent(-1, "ButtonOkClick")

$Button2 = GUICtrlCreateButton("Copy saplogon.ini", 152, 142, 131, 25)
GUICtrlSetOnEvent(-1, "Copysaplogon")
$PasswordEdit = GUICtrlCreateInput("password", 112, 112, 169, 21, BitOR(0x0020,0x0080))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

 

  $var_mndt = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","mndt","100")
  GUICtrlSetData ( $Input1 , $var_mndt )
  $var_usr = IniRead(@ScriptDir&'\SAPLogin.ini',"ini","usr","sikidinap")
  GUICtrlSetData ( $Input2 , $var_usr )

  $var_proj =  IniRead(@ScriptDir&'\SAPLogin.ini',"ini","proj","Test")
  ;GUICtrlSetData ( $Input3 , $var_proj )
EndFunc


Func SpecialEvents()
 for $i = 1 to $id[0]-1
  if @GUI_CtrlId = $id[$i] Then
   login($sect[$i])
  EndIf
 Next
 ;MsgBox(0, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
EndFunc   ;==>SpecialEvents

func login($sect)
 Opt("WinTitleMatchMode", 3)
 Opt("SendKeyDelay",20)
 local $pass, $mandt, $usr, $proj, $param
 $pass  = IniRead(@ScriptDir&'\SAPLogin.ini',$sect,"pass","")
 $pass   = _StringEncrypt(0, $pass,$masterpass)
 $mandt  = IniRead(@ScriptDir&'\SAPLogin.ini',$sect,"mndt","100")
 $usr  = IniRead(@ScriptDir&'\SAPLogin.ini',$sect,"usr","UserName")
 $proj = IniRead(@ScriptDir&'\SAPLogin.ini',$sect,"proj","100")
    $param = '-user='&$usr&' -pw='&$pass&' -sysname="'&$proj&'" -client='&$mandt

 ShellExecute($sapshcut, $param)

 Exit
EndFunc


размер вложения ограничен, потому качать здесь http://rghost.ru/54514948
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> Submit a new program | Новые материалы, программы для сайта All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.