Tym razem zajmiemy się wyświetlaniem okna komunikatu z poziomu skryptu powłoki Windows. Oknu możemy nadać te klawisze, które chcemy, np. Ok, Yes i No, czy jakikolwiek inny zestaw, a także na wyjściu sprawdzić, co user ewentualnie wybrał (jeśli jakiś wybór mu daliśmy 😉 ).
Jeśli chcemy użyć pełnego wachlarza możliwości, stwierdziłem, że najmniejszą linią oporu będzie posłużenie się skryptem VisualBasic i jego funkcją MsgBox, np.:
MsgBox("Are you sure you want to do this??",4,"Haha!")
Pierwszy parametr to treść komunikatu, trzeci to tytuł okna. Drugi parametr, to zestaw przycisków, które mają być udostępnione użytkownikowi do wyboru. Możliwości są następujące:
0 Tylko przycisk OK 1 OK i Cancel 2 Abort, Retry i Ignore 3 Yes, No i Cancel 4 Yes i No 5 Retry i Cancel 16 Użyj ikonki Critical Message 32 Użyj ikonki Warning Query 48 Użyj ikonki Warning Message 64 Użyj ikonki Information Message 0 Pierwszy przycisk jest domyślny 256 Drugi przycisk jest domyślny 512 Trzeci przycisk jest domyślny 768 Czwarty przycisk jest domyślny
Jak widać, mamy tu dostępne trzy grupy. Wybieramy pożądane opcje i sumujemy je, np. chcąc wyświetlić klawisze “Yes” i “No”, dodać ikonkę “Warning Query” i uczynić przycisk “No” domyślnie zaznaczonym, użyjemy wartości 4+32+256:
MsgBox("Are you sure you want to do this??",4+32+256,"Haha!")
Oczywiście, nic nie stoi na przeszkodzie, aby wpisać tam po prostu 292, ale dla późniejszej analizy i edycji, łatwiej pozostawić to w takiej czytelnej postaci.
Skrypt VBS skryptem VBS, ale my chcemy wywołać nasze okienko z regularnego skryptu wsadowego… uciekniemy się do małego tricku i… stworzymy tymczasowy plik vbs i go wywołamy 😉
echo MsgBox("Are you sure you want to do this??",4+32+256,"Haha!") >tempmsg.vbs call tempmsg.vbs
Tu pojawia się kolejny problem: jak sprawdzić, co wybrał użytkownik? Najpierw, zmusimy nasz skrypt VBS do zwracania na swoim wyjściu wynik funkcji MsgBox – czyli właśnie wybór użytkownika. Robimy to tak:
wscript.quit MsgBox("Are you sure you want to do this??",4+32+256,"Haha!")
Dzięki temu, cały skrypt na swoim wyjściu zwróci wartość wg klucza:
1 OK 2 Cancel 3 Abort 4 Retry 5 Ignore 6 Yes 7 No
W naszym pierwotnym skrypcie, po wywołaniu skryptu VBS, musimy sprawdzić wartość zmiennej %errorlevel%, która wskazuje właśnie na wynik ostatnio wykonanej komendy.
echo wscript.quit MsgBox("Are you sure you want to do this??",4+32+256,"Haha!") >tempmsg.vbs call tempmsg.vbs if %errorlevel% NEQ 6 goto finish echo Jest! Zgodził się! Hurrra!! echo Tutaj rozkręcamy imprezkę... :finish del tempmsg.vbs
Prawda, że proste? 🙂