themaster Geschrieben 2. August 2002 Teilen Geschrieben 2. August 2002 Hallo, ich habe schon wieder ein unschönes Windows-Programmier-Problem: Ich muß herausfinden, ob in einem Moment an dem Rechner gearbeitet wird. Das ist die Aufgabe. Zwar gibt es da verschiedene Ansätze, aber ich weiß nicht wie ich am einfachsten das Ziel erreiche: 1. Abfangen alles Maus- und Tastatureingaben: Wenn eine bestimmte Zeit keine Maus- oder Tastaturnachrichten im ganzen System versendet worden sind, dann wird nicht gearbeitet? Die Frage hier ist nur: Wie fange ich alle Nachrichten ab? Normalerweise empfange ich doch nur Nachrichten innerhalb der eigenenen Anwendung 2. CPU-Auslastung: Wenn die CPU-Auslastung einen Zeitraum lang, sehr niedrig ist, dann wird nicht gearbeitet. Auch hier die Frage: Wie finde ich das heraus? 3. Gibt es vielleicht noch andere bessere Methoden? <OffTopic> Gibt es eine Möglichkeit diese Aufgabe auch mit Java zu lösen? </OffTopic> CU themaster Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 2. August 2002 Teilen Geschrieben 2. August 2002 Zu 1: Sieh Dir mal SetWindowsHookEx an. Zu 2: Da bietet der Performance Data Helper Möglichkeiten. Siehe dazu auch http://fachinformatiker-world.de/forums/showthread.php?s=&threadid=28987&werbeid=40 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crush Geschrieben 2. August 2002 Teilen Geschrieben 2. August 2002 Wegen dem Nachrichten abfangen. Da gab´s mal ein ähnliches Problem, wo einer jedesmal eine eindeutige FensterID haben wollte, welche auch von Anwendungen außerhalb kommt. Grundsätzlich ist ein System-Hook eine bessere Möglichkeit, aber man kann mit PreTranslateMessage() auch einen ähnlichen Effekt erzielen. Du mußt nur den Filtern aus dem Beispiel rausnehmen. Ich weiß auch auf anhieb nicht genau wie man das anstellen könnte, aber wenn man auf höherer Ebene die Funktion überschreiben könnte (z.B. vom System-Fenster - zu finden mit GetDeskTopWindow() evtl. das PreTranslateMessage() vom CWnd-Objekt hart mit dem eigenen austauschen ... hab ich ja kürzlich erklärt, mit was für Tricks man das auch ohne Erlaubnis machen kann) würde man mit Sicherheit absolut alle Nachrichten abfangen - so sind die auf bestimmt vorgefiltert glaube ich. Allerdings bekommt man nur beim Reaktivieren des Programmfensters die Messages mit einem Schlag durchgereicht (ich hab´s nicht genauer ausgetestet, aber vielleicht wird auch jede Message korrekt abgefangen und nur der Trace beim Reaktivieren aktualisiert) Vielleicht reicht Dir das schon irgendwie aus. 1. Beitrag 2. Beitrag <- hier ist das Beispiel - wirf einfach den Window-Filter raus und dann gibt´s schon wesentlich mehr zu sehen. Auch Fenster-IDs externer Fenster, die nicht zum Programm selber gehören! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.