Wie WinRT-Anwendungen zu verfolgen (in Win32 war es einfach)?

8

In "alten" Zeiten habe ich ein einfaches Tool für Windows-Benutzer erstellt, das verfolgt, was sie auf der Vorderseite des Computers getan haben (wo ein einfacher Aktivitätsmonitor ist). Ich benutzte Win32 API und funktioniert wie GetForegroundWindow, GetWindowThreadProcessId, etc.

Gestern habe ich ein neues Windows 8 installiert und bin müde, um mein Programm zu starten. Ich habe 50% Erfolg: für "klassischen" Desktop funktioniert es wie immer :). Für Metro UI habe ich nur eine Anwendung: WWAHost :( ohne Details.

Meine Frage ist also: Gibt es eine Möglichkeit, eine aktive Anwendung in der Metro UI zu verfolgen? Danke für die Hilfe

UPDATE: Ich versuche, über Win32 auf die Metro-UI-App zuzugreifen. Ich weiß, dass der Zugriff auf die Metro-App von einer anderen Metro-App aus unmöglich ist.

    
Piotr Stapp 26.11.2012, 09:32
quelle

2 Antworten

1

Sie sehen, in WinRT ist Ihre Anwendung die oberste Anwendung. Und wenn Ihre App nicht die oberste Anwendung ist, werden Ihre Threads gesperrt und der Kernel plant keine weiteren Vorgänge für Ihre App. Ende der Geschichte.

Dies bedeutet, was Sie erreichen möchten, kann nicht in WinRT getan werden. Sie denken eher an eine residente App oder einen Dienst mit Zugriff auf den Desktop. Diese Apps haben zwei Vorteile. 1) sie laufen immer. Und, 2) Sie haben die API, um zu tun, was Sie wollen.

WinRT stellt Apps absichtlich in eine Sandbox, damit die Benutzererfahrung, die Leistung und die Akkulaufzeit geschützt sind. Ihr Szenario und Ihre Scores mehr als Ihres, unterstreichen den anhaltenden Bedarf an Desktop-Apps. (solange diese Art von Apps weiterhin benötigt wird;)).

Tut mir leid, wenn das eine schlechte Nachricht ist.

Wie zum Aufzählen anderer Apps. Dies ist auch nicht möglich. Sie können nicht wissen, ob eine andere App installiert ist oder ob sie gerade ausgeführt wird. Sie können eine andere App durch Protokollaktivierung oder Dateiaktivierung oder (in gewissem Sinne) durch den Share-Vertrag aufrufen. Aber Sie wissen nicht, ob sie die Nachricht erhalten und ob der Benutzer sie installiert hat. Und das ist Absicht.

Es ist erwähnenswert, dass Sie Win32-APIs in Ihrer WinRT-Anwendung anheften können. Es verursacht viele Probleme und kann Kopfschmerzen verursachen, um in den Laden zertifiziert zu werden. Aber selbst dann stehen Ihnen nicht alle APIs offen. Und Sie werden feststellen, dass dieser spezielle Anwendungsfall ein Nicht-Starter ist.

    
Jerry Nixon - MSFT 27.11.2012 03:32
quelle
0

Ich bin mir sicher, dass das nicht möglich sein wird. Mit Windows 8 'Metro' ist nur eine einzige Anwendung aktiv. Alle anderen Anwendungen befinden sich in einem angehaltenen Zustand, während die oberste Anwendung ausgeführt wird. Dies macht es unmöglich, eine Anwendung zu schreiben, die andere Anwendungen überwacht, die gerade ausgeführt werden.

Weitere zahlreiche Artikel zum Windows 8 App-Lebenszyklus

    
ColinE 26.11.2012 09:37
quelle