Centrum skryptów - Microsoft Office

Jak pobrać nazwę użytkownika i inicjały użytkownika z programu Microsoft PowerPoint? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

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.

Jak pobrać nazwę użytkownika i inicjały użytkownika z programu Microsoft PowerPoint?

Cześć, Skrypciarze! W programie PowerPoint informacje użytkowników są zachowywane w menu Narzędzia. Ciekawi mnie, czy można te dane wyodrębnić za pomocą skryptu.

-- TV

Cześć, TV. Może i ciężko w to uwierzyć, ale ja bardzo rzadko coś gubię. Tak naprawdę jestem bardzo dobry w odkładaniu rzeczy tak, aby się nie zgubiły. Niestety często jest tak, że zapominam, że te rzeczy zostały przeze mnie odłożone i w wyniku tego spędzam za dużo czasu, szukając w złym miejscu. Na przykład robię zamęt na piętrze szukając jakiegoś przedmiotu, zapomniawszy o tym, że już dawno temu przeniosłem go na dół (w końcu przenoszenie rzeczy na dół gwarantuje, że się nie zgubią). Czasem zdarza mi się wywrócić biuro do góry nogami w poszukiwaniu książki, którą celowo zabrałem do domu (dlaczego mogłem ją zabrać do domu? Żebym wiedział dokładnie, gdzie ona jest). Podjąłem pracę w firmie Microsoft, zakładając, że znajdę tutaj wiele możliwości zrobienia świetlanej kariery a okazało się, … cóż – nieważne. Powiedzmy, że lista jest bardzo długa.

W większości przypadków szukanie czegoś w złym miejscu jest złym pomysłem. Szanse odnalezienia szukanego przedmiotu są większe, jeżeli szukamy we właściwym miejscu. Znacie taki dowcip o mężczyźnie, który wieczorem na spacerze spotkał kolegę klęczącego pod latarnią i grzebiącego w ziemi? Otóż zapytał go, czego tam szuka i usłyszał odpowiedź: „Zgubiłem stówę”. „Zgubiłeś stówę w tym miejscu?” – zapytał. „Nie, tam za rogiem, ale szukam tutaj bo jest jaśniej”. Wy tak nie róbcie. Zazwyczaj szukanie we właściwym miejscu to dobry pomysł, ale nie zawsze. Gdzie na przykład Waszym zdaniem należy szukać nazwy użytkownika i inicjałów użytkownika dla programu Microsoft PowerPoint? Nie, „Microsoft PowerPoint” to nie jest dobra odpowiedź. Jaka więc jest ta dobra odpowiedź? Oczywiście „Microsoft Word”:

Set objWord = CreateObject("Word.Application")



Wscript.Echo "Name: " & objWord.UserName

Wscript.Echo "Initials: " & objWord.UserInitials



objWord.Quit

Muszę przyznać, że nie zdawałem sobie z tego sprawy, dopóki nie zabrałem się za pisanie tego skryptu, ale okazało się że wszystkie aplikacje pakietu Microsoft Office mają tę samą nazwę użytkownika i inicjały użytkownika. Zmiana użytkownika w jednej aplikacji Office spowoduje zmianę użytkownika we wszystkich aplikacjach. Problem polega na tym, że nie wszystkie aplikacje umożliwiają programistyczną zmianę nazwy użytkownika i/lub inicjałów użytkownika. Tak naprawdę kilka aplikacji Office nawet nie wyświetla nazwy użytkownika i/lub inicjałów użytkownika. Po przeprowadzeniu krótkiego wyszukiwania w interfejsach aplikacji Office 2003 otrzymałem następującą listę:

AplikacjaWyświetlanie nazwyWyświetlanie inicjałówZmiana nazwyZmiana inicjałów
WordTakTakTakTak
ExcelTakNieTakNie
PowerPointTakTakNieNie
OutlookNieNieNieNie
VisioTakTakTakTak
InfoPathNieNieNieNie
OneNoteTakNieTak (tylko GUI)Nie
FrontPageNieNieNieNie
PublisherNieNieNieNie

 

Dziwne, ale prawdziwe.

Jak widzimy, interfejs użytkownika programu PowerPoint wyświetla nazwę użytkownika oraz inicjały użytkownika (przejdź do menu Narzędzia, kliknij przycisk Opcje, a następnie kliknij kartę Ogólne). Jednak model obiektu programu PowerPoint nie umożliwia pobrania tej informacji w sposób programistyczny. Z tego powodu nie używamy modelu obiektu programu PowerPoint; używamy natomiast modelu obiektu programu Microsoft Word.

Dlatego też nasz skrypt rozpoczyna się od uruchomienia wystąpienia obiektu Word.Application. Zauważcie, że nie ustawiamy wartości właściwości Visible tego obiektu na True. Dlaczego? Cóż, ustawienie wartości właściwości na True spowodowałoby wyświetlenie wystąpienia programu Word na ekranie. Nie ma jednak potrzeby wyświetlania programu Word: Nic nie zobaczymy, a skrypt i tak będzie działał tylko przez około sekundę. Dlatego pozwalamy, aby wszystko działo się w niewidocznym oknie.

Kiedy już mamy działające wystąpienie programu Word, możemy wywołać echo wartości właściwości UserName and the UserInitials:

Wscript.Echo "Name: " & objWord.UserName

Wscript.Echo "Initials: " & objWord.UserInitials

W tym momencie wywołujemy po prostu metodę Quit i kończymy działanie programu Word i naszego skryptu.

Tak, można zastosować ten sam skrypt w celu pobrania nazwy użytkownika oraz inicjałów użytkownika z kopii pakietu Office zainstalowanej na komputerze zdalnym. Poniższy zmodyfikowany skrypt przekaże te informacje z komputera o nazwie atl-ws-001:

Set objWord = CreateObject("Word.Application", "atl-ws-001")



Wscript.Echo "Name: " & objWord.UserName

Wscript.Echo "Initials: " & objWord.UserInitials



objWord.Quit

Jaka jest różnica pomiędzy tym skryptem, a skryptem, który pokazałem Wam jako pierwszy? Niewielka: w drugim skrypcie dodałem tylko drugi parametr – nazwę komputera zdalnego – do funkcji CreateObject:

Set objWord = CreateObject("Word.Application", "atl-ws-001")

To wszystko, co musimy zrobić. Dodanie drugiego parametru informuje skrypt, że należy utworzyć wystąpienie programu Word na komputerze zdalnym zamiast na komputerze lokalnym (chyba nie muszę dodawać, że aby skrypt zadziałał komputer zdalny musi mieć zainstalowany program Word). Następnie pobieramy wartości właściwości UserName oraz UserInitials z tego zdalnego wystąpienia programu Word. Następnie znowu używamy metody Quit w celu zakończenia działania zdalnego wystąpienia.

Początkowe pytanie TV dotyczyło wykonania tego zadania za pomocą języka VBA (Visual Basic for Applications), wiec pokażę Wam także ten skrypt. Można go uruchomić z programu PowerPoint (lub innej alokacji Office obsługującej język VBA):

Set objWord = CreateObject("Word.Application")



Msgbox "Name: " & objWord.UserName

Msgbox "Initials: " & objWord.UserInitials



objWord.Quit

To jest prawie taki sam skrypt, jaki pokazałem Wam na początku. Jedyna różnica polega na tym, że zastąpiłem funkcję MsgBox funkcją Wscript.Echo (dlaczego? Ponieważ język VBA nie obsługuje wykorzystania funkcji Wscript.Echo). Jeżeli akurat jesteście w programie Microsoft Word, możecie zastosować tę uproszczoną wersję:

MsgBox "Name: " &  Application.UserName

MsgBox "Initials: " & Application.UserInitials

W tym przypadku nie musimy tworzyć wystąpienia obiektu Word.Application, ponieważ skrypt już działa wewnątrz wystąpienia obiektu Word.Application.

A skoro już przy tym jesteśmy, możecie zastosować te dwie właściwości w celu zmiany nazwy użytkownika i inicjałów użytkownika na komputerze. Poniższy skrypt przykładowo ustawia właściwość UserName jako Ken Meyer oraz właściwość UserInitials jako KM:

Set objWord = CreateObject("Word.Application", "atl-ws-001")



objWord.UserName = "Ken Myer"

objWord.UserInitials = "KM"



objWord.Quit

Co się dzieje, jeżeli uruchamiamy program PowerPoint jako samodzielną aplikację, czyli jeżeli nie mamy zainstalowanego programu Word (ani Visio lub Excel)? Cóż, szczerze mówiąc, w takim przypadku nie macie szczęścia. O ile wiem, informacje na temat użytkowników przechowywane są w rejestrze. W zależności od wersji pakietu Office (i ścieżki aktualizacji) może to być następujący klucz rejestru: HKCU\Software\Microsoft\Office\11.0\Common\UserInfo. Jedynym problemem tutaj jest to, że ta informacja jest zachowana w formacie binarnym i nie mam pojęcia, jak przekonwertować wartość binarną 47 00 4d 00 53 00 00 00 na zestaw inicjałów. Program Word jest prawdopodobnie najlepszym (i możliwe, że jedynym) ratunkiem.

Mam nadzieję, że moje informacje były pomocne. Jeżeli pojawią się jeszcze jakieś problemy, dajcie nam znać. Ja tymczasem zajmę się szukaniem różnych rzeczy w absolutnie niewłaściwym miejscu. Wczoraj na przykład potrzebowałem pieniędzy i szukałem ich na koncie bankowym. Niepotrzebnie: jeżeli się ma syna, który jest na studiach, co jest związane z niemałymi wydatkami, konto bankowe jest ostatnim miejscem, na którym należy szukać pieniędzy.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft Office