2012-11-26 11 views
8

W "starych" czasach stworzyłem proste narzędzie dla użytkowników Windows, które śledzi to, co robili z przodu komputera (gdzie prosty monitor aktywności). Używałem Win32 api i działa jak GetForegroundWindow, GetWindowThreadProcessId, itp.Jak śledzić aplikacje WinRT (w Win32 był prosty)?

Wczoraj zainstalowałem nowy Windows 8 i jestem zmęczony, aby uruchomić mój program. Osiągnąłem 50% sukcesu: dla "klasycznego" pulpitu działa jak zawsze :). Metro UI Właśnie jeden wniosek: WWAHost :(bez żadnych szczegółów

Więc moje pytanie. Czy istnieje jakiś sposób na śledzenie aktywnej aplikacji w Metro UI Dzięki za pomoc

UPDATE: Próbuję uzyskać dostęp do aplikacji Metro UI z Win32, wiem, że dostęp do aplikacji Metro z innej aplikacji Metro jest niemożliwy.

+0

Czy wypróbowałeś GetPackageFullName lub GetApplicationUserModelId, aby mieć nadzieję na disambiguate Windows Web Apps? –

+0

@DwayneRobinson Jak korzystać z tej metody? –

Odpowiedz

0

Jestem pewien, że nie będzie to możliwe, w Windows 8 "Metro" działa tylko jedna aplikacja. Wszystkie inne aplikacje będą zawieszone w czasie działania najwyższej aplikacji, co uniemożliwi napisanie aplikacji, którą m onitors inne aplikacje, które aktualnie wykonują.

Zobacz numerous articles on the Windows 8 app lifecycle.

+0

+1, chociaż nie opisałbym tego jako * powodu *. Powodem jest po prostu, że system operacyjny jest przeznaczony do ukrywania tych informacji z aplikacji WinRT. To, czy * kilka * lub * nie * inna aplikacja faktycznie działa, nie jest działalnością aplikacji WinRT. –

+1

Ale w komputerowej wersji systemu Windows mam "klasyczną" aplikację działającą równolegle z aplikacją WinRT, więc może z "klasycznego" Win32 mogę uzyskać dostęp do tego, co robi użytkownik? –

+0

Wierzę, że Garath szuka sposobu, aby pobrać aktualnie działającą aplikację Metro ™/Modern ©/Lollipop® z jego programu Win32, a nie kolejną aplikację Lollipop. – efotinis

1

Widzisz, w WinRT twoja aplikacja jest najpopularniejszą aplikacją. A gdy twoja aplikacja nie jest najpopularniejszą aplikacją, wątki są zawieszone, a jądro nie planuje już więcej operacji dla twojej aplikacji. Koniec opowieści.

Oznacza to, czego nie chcesz robić w WinRT. Myślicie raczej jak aplikacja rezydentna lub usługa z dostępem do pulpitu. Te aplikacje mają dwie zalety. 1) zawsze działają. I, 2) mają API, aby robić to, co chcesz.

WinRT celowo umieszcza aplikacje w piaskownicy, dzięki czemu użytkownik ma pewność, że jego użytkowanie, wydajność i czas pracy na baterii są chronione. Twój scenariusz i wyniki bardziej podobne do twoich podkreślają ciągłe zapotrzebowanie na aplikacje komputerowe. (o ile istnieje ciągłe zapotrzebowanie na tego typu aplikacje;)).

Przepraszam, jeśli to złe wieści.

Jeśli chodzi o wyliczanie innych aplikacji. Nie jest to również możliwe. Nie możesz wiedzieć, czy inna aplikacja jest zainstalowana lub działa. Możesz zadzwonić do innej aplikacji poprzez aktywację protokołu lub aktywację pliku lub (w pewnym sensie) poprzez umowę udziału. Ale nie wiesz, czy dostaną wiadomość i czy użytkownik ją zainstalował. I to jest zgodne z projektem.

Warto wspomnieć, że można przekierować do Win32 API w aplikacji WinRT. Powoduje wiele problemów i może wywołać ból głowy, aby uzyskać certyfikat w sklepie. Ale nawet wtedy nie wszystkie interfejsy API są dla ciebie otwarte. I okaże się, że ten konkretny przypadek użycia nie jest uruchamiany.

+0

Napisałem to w aktualizacji: próbuję uzyskać dostęp do WinRT z Win32 api, a nie WinRT od WinRT –