Autor Beitrag
uko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: Do 02.09.10 16:33 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 02.09.10 20:54 
msdn.microsoft.com/e...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 ;)
msdn.microsoft.com/e...ms646292(VS.85).aspx

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
uko Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 220
Erhaltene Danke: 1

Win XP, VISTA, WIndows 7
Delphi 2007/2010 Prof
BeitragVerfasst: 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