Proste macro z użyciem AutoIT – „klikacz”


 

Oto kolejne rozwiązanie, tak prymitywne, że tylko ja nie wstydzę się o nim mówić… Z drugiej strony, skoro Darek pisał o kawałku metalu, to niżej chyba nie można upaść ;) Wyobraźcie sobie taki scenariusz:

Przechodzimy na nowy system i trzeba założyć 1500 kont np. w SAP. Nie masz możliwości wykonania zmian masowych. Trzeba zakładać konta ręcznie…

Ręcznie?! 1500 kont? Nieee … Musi być lepszy sposób. Na ratunek przychodzi nam program AutoIT. Jest to freeware dający nam możliwość napisania prostych i mniej prostych kombinacji alpejskich – macro. Możesz symulować ruchy kursora myszki, wirtualnie naciskać klawisze klawiatury, aktywować okienka, operować na plikach, itp. API AutoIT jest dość rozbudowane i przypomina składnią BASICa. Jest prosty, dobrze udokumentowany i działa. Oto Link to strony z programem

Weźmy na warsztat przykład zakładania kont w SAP przy pomocy AutoIT na bazie pliku .xlsx (Exel). Poniższy skrypt nie robi nic poza sczytaniem wartości z wcześniej przygotowanego pliku excel, aktywowaniu odpowiedniego okienka SAP, wejścia w tryb tworzenia nowego użytkownika, wypełnieniem danych i… NIE ZAPISANIEM profilu.  Jest tak prymitywny, że gimnazjalista napisałby coś lepszego, ale działa (oczywiście gdy kod zmieniony jest tak by zapisywał profil) i nie raz uratował mnie przed 2 dniowym deadline na zakładanie kont w systemie X

Mój plik Excel wygląda tak:

A skrypt wygląda tak:

#include <Excel.au3>

$oExcel = _ExcelBookOpen("c:\userdata.xls") ;otwieramy excela

$result=_ExcelReadSheetToArray($oExcel)

$sCellValue = _ExcelReadCell($oExcel, 1, 8) ; Szczytujemy ile userow mamy do obrobienia

Local $Scope = $sCellValue

Local $username[$Scope]  ; tworzymy zmienne/tablice pomocnicze przechowujące dane z arkusza

Local $name[$Scope]

Local $lastname[$Scope]

Local $email[$Scope]

Local $i

for $i=0 To $Scope-1 Step 1 ; wczytujemy dane z arkusza do zmiennych

   $username[$i] = _ExcelReadCell($oExcel, $i+1, 1)

   $name[$i] = _ExcelReadCell($oExcel, $i+1, 2)

   $lastname[$i] = _ExcelReadCell($oExcel, $i+1, 3)

   $email[$i] = _ExcelReadCell($oExcel, $i+1, 4)

Next

;ponizszy proces jest charakterystyczny dla konkretnej aplikacji - w naszym przypadku SAP SSM
WinActivate("SAP Easy Access") ;Aktywacja okienka SAP

sleep(500)   

Send("su01")

Send("{ENTER}")

for $i=0 to $Scope-1 Step 1

   sleep(500)

   Send($username[$i])

   Sleep(500)

   Send("{F8}")

   Sleep(1000)

   Send("{TAB}")

   Send($lastname[$i])

   Send("{TAB}")

   Send($name[$i])

   Send("{TAB 18}")

   Send($email[$i])

   Sleep(500)

   Send("{F12}")

   Sleep(500)

   Send("{TAB}")

   Sleep(500)

   Send("{ENTER}")

Next

;ConsoleWrite($result)

_ExcelBookClose($oExcel)

A teraz o co chodzi:

Skrypt korzysta z dostarczonej biblioteki do obługi Excela. Wczytuje do pamięci i przydziela dane z komórek arkusza do odpowiednich zmiennych, po czym aktywuje okienko SAP (musisz wcześniej się zalogować do systemu) i po koleji wykorzystując skróty klawiszowe przechodzi kolejne stadia wpisywania danych bezpośrednio do SAP.

Cały pierwszy element kodu jest dość standardowy i można go wykorzystać zawsze. Cześć druga jest specyficzna dla konkretnej aplikacji. Opiera się na wysyłaniu do aplikacji kombinacji klawiszy (SEND) i nawigowaniu po interface’ie SAPa tabulatorami.

Można też to zrobić jeszcze bardziej łopatologicznie ruszając kursorem myszki, ale tutaj może pojawić się problem z rozdzielczością ekranu.

Potrzebujesz oskryptować inny program? Nie masz możliwości importu czy eksportu pliku z danymi. Nie ma problemu. AutoIT można wykorzystać w każdej aplikacji, w której można klikać.

Stąd właśnie nazwa: KLIKACZ :)


Podobne Tematy:

  • ylsz

    Czy za pomocą tego programu można wszystko wyklikać czy trzeba znać ten język? Jeżeli trzeba znać to gdybym mógł prosić o to jak zrobić instalacje programu który będzie mi klikał dalej dalej zaznaczał/odznaczał odpowiednie pola.
    Z góry dziękuje za pomoc :)

    • ylsz

      Znalazłem dodatek do wyklikania AU3Record tylko mam problem bo jak sobie wyklikałem co ma klikać to po odpaleniu skryptu wywala błąd, że nie ma takiej funkcji, a przecież program sam sobie ją dodał. O co może chodzić?

      • ylsz

        A konkretnie chodzi o funkcję _WinWaitActivate(„Instalator programu Mozilla Firefox”,””)

        • ylsz

          Wystarczyło zaznaczyć opcję Generate Internal functions

  • ylsz

    Nocka nie przespana i doszedłem do tego :) Ale pojawił się kolejny problem gdy uruchamiam skrypt wszystko pięknie klika dalej dalej ale nie wiem dlaczego nie klika mi ostatniego przycisku zakończ .. Na pasku pojawia się, że skrypt jest zatrzymany (pause), dlaczego tak się dzieje?
    Zatrzymuje się jak by na tych poleceniach, wszystkie wcześniejszę się ładnie wykonują.

    _WinWaitActive(„Instalator programu Mozilla Firefox”, „”)
    MouseClick(„left”,359,362,1)