Centrum skryptów - Microsoft office

W jaki sposób można uruchomić program Outlook po sprawdzeniu, czy nie jest on już uruchomiony?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

W jaki sposób można uruchomić program Outlook po sprawdzeniu, czy nie jest on już uruchomiony?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! W jaki sposób mogę sprawdzić, czy program Outlook jest uruchomiony i uruchomić go, jeśli nie jest?

-- NA

Cześć Skrypciarze! Odpowiedź

Cześć, NA. Zacznijmy od tego, że w zeszły weekend Skrypciarz piszący te słowa przypadkiem zabłąkał się do galerii handlowej – było to zdarzenie bardzo dla niego niepokojące, wprawiło go niemal w przerażenie. Czemu? No cóż, ostatnim razem, gdy się tam znalazł (a było to w czasie szczytowego nasilenia świątecznej gorączki zakupów), wałęsał się samotnie, gdy zagadnęła go młoda kobieta z silnym francuskim akcentem. Z powodu tego akcentu i hałasu w galerii, Skrypciarz piszący te słowa nie mógł jej z początku zrozumieć. Domyślił się jednak, że kobieta musi pytać o drogę albo coś w tym rodzaju. Dlatego też starał się bardzo skoncentrować na tym, co mówi. Kobieta najwyraźniej wzięła to za niezwykłe zainteresowanie swoją osobą, bo zanim się Skrypciarz zorientował, wysypała mu na ręce sól i na migi pokazywała, aby je tą solą „umył”.

- Czy wie pan, gdzie jest najniższa depresja na Ziemi? – zapytała, zbijając Skrypciarza z tropu. Co z nią, chciałaby się dostać do Morza Martwego?

- Morze Martwe? – odparł Skrypciarz.

- Ach – zdziwiła się kobieta z rozczarowaniem w głosie. – Mało kto to wie. Tak, chodzi o Morze Martwe, a ta sól pochodzi wprost stamtąd. Jeśli wetrze ją pan w dłonie, a potem zmyje, będzie pan miał niezwykle gładką skórę. Jak pupcia niemowlaka.

Trzeba przyznać, ze miała rację – kiedy Skrypciarz zmył już tę sól, istotnie okazało się, że jego dłonie są gładkie jak pupcia niemowlaka. Świetnie, ale z jednym zastrzeżeniem: Skrypciarz piszący te słowa wcale nie chce mieć dłoni miękkich jak pupcia niemowlaka. Nie uważa się za mięczaka, ale inni ludzie są najprawdopodobniej innego zdania; jeśli na przykład gra w koszykówkę albo futbol, mecz zaczyna się od stratowania go przez innych graczy. Najwyraźniej inni nie uważają go za tak męskiego, jaki naprawdę jest; ostatnim czego potrzebuje, są dłonie delikatne jak pupcia niemowlaka. A takie właśnie miał, przynajmniej przez kilka godzin.

Nie wiemy, czy Ty, NA, chcesz mieć delikatne dłonie. Jeśli tak, to Morze Martwe bardzo Ci się przyda. Ale jeśli interesuje Cię tylko skrypt mogący określić, czy Outlook jest uruchomiony i ewentualnie uruchomić go, to przyda Ci się poniższy kod:

Const olFolderInbox = 6



strComputer = "."



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")



Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Process Where Name = 'outlook.exe'")



If colItems.Count = 0 Then

    Set objOutlook = CreateObject("Outlook.Application")

    Set objNamespace = objOutlook.GetNamespace("MAPI")

    objNamespace.Logon "Default Outlook Profile",, False, True    

    Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

    objFolder.Display

End If

Miejmy nadzieję, że nie masz kłopotów z odczytaniem, NA; okazuje się, że klepane w klawiaturę dłońmi miękkimi jak pupcia niemowlaka wcale nie jest łatwe. (Pewnie dlatego niemowlęta rzadko programują.) Jak widzisz, zaczynamy od zdefiniowania zmiennej o nazwie olFolderInbox i wartości 6; użyjemy jej, kiedy (czy raczej jeśli) będziemy otwierać program Outlook. Następnie połączymy się z usługą WMI na komputerze lokalnym, a potem za pomocą poniższego wiersza kodu uzyskamy kolekcję wszystkich uruchomionych procesów, których właściwość Name ma wartość outlook.exe:

Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Process Where Name = 'outlook.exe'")
Uwaga. Dobre pytanie: czy można zastosować ten skrypt wobec komputera zdalnego? Niestety, raczej nie. Bez trudu można stwierdzić, czy Outlook jest uruchomiony na zdalnym komputerze, ale próba jego uruchomienia będzie już problematyczna. Dlaczego? Otóż ze względów bezpieczeństwa procesy uruchomione zdalnie zawsze działają w oknie ukrytym. Można więc będzie Outlook uruchomić, ale i tak nie będzie go widać. Czy istnieje sposób, aby to obejść? Oczywiście; pewną sugestię można znaleźć w tym artykule z serii Cześć, Skrypciarze!

Wywołanie metody ExecQuery zwraca nam kolekcję wszystkich procesów uruchomionych na komputerze – w naszym wypadku wybieramy z nich te, które mają nazwę Outlook.exe. Aby określić, czy program Outlook jest uruchomiony, musimy jeszcze sprawdzić wartość właściwości Count, dzięki czemu dowiemy się, ile elementów liczy nasza kolekcja. Jeśli wartość ta będzie różna od 0, będzie to znaczyło, że Outlook jest już uruchomiony, a nasze zadanie się na tym kończy.

Co jednak, jeśli wartość Count wyniesie właśnie 0? W takim wypadku program Outlook nie jest jeszcze włączony, a my użyjemy poniższego kodu, aby go uruchomić:

Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")

objNamespace.Logon "Default Outlook Profile",, False, True    

Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

objFolder.Display

Kod ten na początku tworzy wystąpienie obiektu Outlook.Application, następnie łączy się z przestrzenią nazw MAPI – jest to konieczne, mimo, że nie da się połączyć z inną przestrzenią nazw. Teraz wywołujemy metodę Logon, przy czym dzięki poniższym czterem parametrom upewniamy się, że zalogujemy się na właściwe konto Outlook:

Parametr Opis
Profile Nazwa konta programu Outlook, z którym chcemy się połączyć. W naszym przykładowym skrypcie używamy nazwy „Default Outlook Profile”.
Password Opcjonalnie możemy przy połączeniu podać hasło. Parametr ten istnieje głównie ze względu na kompatybilność wsteczną i przeważnie pozostanie pusty.
ShowDialog Określa, czy wyświetlone zostanie okno dialogowe wyboru profilu. Określiliśmy już, że zalogujemy się na konto Default Outlook Profile, więc nie ma po co wyświetlać tego okna.Dlatego tez jego wartość ustawiliśmy na False.
NewSession Określa, czy utworzona zostanie nowa sesja programu Outlook. Ponieważ program Outlook nie jest uruchomiony, musimy utworzyć nową sesję.Dlatego parametr ten ma wartość True.

Reszta jest już łatwa: za pomocą metody GetDefaultFolder łączymy się ze skrzynką odbiorczą (używając – wreszcie – stałej olFolderInbox), a następnie wywołujemy metodę Display, by wyświetlić na ekranie skrzynkę i cały program Outlook. To wszystko.

Swoją drogą, Skrypciarzowi piszącemu te słowa zrobiło się żal kobiety z francuskim akcentem, mimo że próbowała sprzedać mu artykuły drogeryjne; nie mogła wybrać sobie gorszego klienta – Skrypciarz piszący te słowa sól z Morza Martwego chętniej widziałby na swoich frytkach, niż rękach.

- No cóż, rozumiem, że nie interesują pana miękkie dłonie - stwierdziła kobieta. - Ale proszę mi powiedzieć, jakich kosmetyków do twarzy pan obecnie używa.

- Wody.

- Nie, nie. Oprócz wody.

- No nie wiem… Mydła?

- Przepraszam, chyba tamten pan coś ode mnie chce… Przepraszam za kłopot.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office