Entwickler-Ecke

Windows API - Wie bestimmen, ob Anwendung vor n Schritten aktiv war?


uko - Do 02.09.10 16:33
Titel: Wie bestimmen, ob Anwendung vor n Schritten aktiv war?
Hi,

Ausgangslage ist wie folgt:

- meine Anwendung ist gestartet und es istschon damit gearbeitet worden.
- der Benutzer hat nun eventuell ein anderes Programm zum Arbeiten in den Vordergrund geholt (z.B. Word)
- durch ein äußeres Signal (kommt von einer Hardware) wird nun eine dritte Anwendung aktiviert
- diese sendet nun an ALLE laufenden Anwendungen das Signal, daß sich etwas geändert hat
- Wenn nun z.B. Word zuletzt aktiv war, dann soll meine Anwendung nur Daten im Hintergrund umstellen (sprich inaktiv bleiben)
- Wenn aber meine Anwendung die aktive war, dann soll sie nun in den Vordergrund geholt werden

Nun meine Frage: wie könnte man das machen? Genauer, kann man irgendwie bestimmen ob eine bestimmte Anwendung aktiv war und danach mehr als eine weitere Anwendung aktiviert wurde?


Grüße,
Uli


Xion - Do 02.09.10 20:54

http://msdn.microsoft.com/en-us/library/ms633505(VS.85).aspx

GetForegroundWindow könnte dir helfen. Die Funktion gibt dir die "vorderste" Anwendung. Grundsätzlich ist ja bei Windows die aktive Anwendung im Vordergrund. Wie das bei StayOnTop Fenstern aussieht...müsste man ausprobieren. *probiert* Jo, scheint zu gehen.

Oh, oder du verwendest GetActiveWindow ;)
http://msdn.microsoft.com/en-us/library/ms646292(VS.85).aspx


uko - Fr 03.09.10 09:38

Danke für die Hints. Die haben aber leider nicht das gewünschte Ergebnis: GetActiveWindow geht nur auf die MessageQueue des aufrufenden Threads und GetForegroundWindow liefert mir das falsche Handle (nämlich das der durch das Signal aktivierten Anwendung).

Aber es hat mich auf eine Idee gebracht: ich müßte herauskriegen, ob meine Anwendung das erste in der Liste der Programme ist, die man mit ALT+TAB erhält. Kennst Du dafür einen Suchbegriff oder einen Link, der beschreibt, welche Daten dort liegen und wie man sie rankommt?

Nur noch zur allgemeinen Info: es geht darum, auf die Werkzeugauswahl der SMART Whiteboard Software zu reagieren.

EDIT: Problem gelöst: ich bestimme mir eine Liste aller Taskfenster mit den Funktionen aus madKernel (MadShi) mittel 'TaskWindows' und filtere daraus noch die Fenster ohne Text heraus.
Wenn dann das Handle des ersten Elements der Liste gleich meinem MainForm-Fensterhandle ist, dann war meine Anwendung zum Zeitpunkt des Signal im Vordergrund und mit SetForegroundWindow, AttachThreadInput etc. ist sie es dann auch gleich wieder.
Andernfalls war eine andere Anwendung im Vordergrund und ich tut nur die Rohdaten verarbeiten.


Grüße,
Uli