"Ruhezustand" ermitteln
"Ruhezustand" ermitteln
Hallo,
ich habe mir gerade mal die Beta2 der Google-Desktopsuchmaschine
installiert. Dieses Teil wird ja nur dann aktiv, wenn sich der Rechner in einem
"Ruhezustand" befindet (sprich: Wenn der Anwender momentan nichts am
Rechner macht).
Die Ermittlung eines solchen Ruhezustands könnte ich für mein derzeitiges
Projet gut gebrauchen. Weiss wer, wie man diesen Zustand ermittelt? Einfach
Maus- und Tastaturaktivitäten abfragen und wenn sich da seit längerer Zeit
nix tut, loslegen?
Und wenn ja: wie kann man möglichst schonend Tastatur- und
Mausaktivitäten abfragen?
OK, die Tastatur kann man ja relativ einfach mit einem programminternen
Hook abfragen. Bei der Maus wird's aber schwierig, weil man hier u.U. eine
globale Hook-DLL benötigt(?).
Grüße ... Kiffi
ich habe mir gerade mal die Beta2 der Google-Desktopsuchmaschine
installiert. Dieses Teil wird ja nur dann aktiv, wenn sich der Rechner in einem
"Ruhezustand" befindet (sprich: Wenn der Anwender momentan nichts am
Rechner macht).
Die Ermittlung eines solchen Ruhezustands könnte ich für mein derzeitiges
Projet gut gebrauchen. Weiss wer, wie man diesen Zustand ermittelt? Einfach
Maus- und Tastaturaktivitäten abfragen und wenn sich da seit längerer Zeit
nix tut, loslegen?
Und wenn ja: wie kann man möglichst schonend Tastatur- und
Mausaktivitäten abfragen?
OK, die Tastatur kann man ja relativ einfach mit einem programminternen
Hook abfragen. Bei der Maus wird's aber schwierig, weil man hier u.U. eine
globale Hook-DLL benötigt(?).
Grüße ... Kiffi
a²+b²=mc²
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Vielleicht hilft dieser link: http://msdn.microsoft.com/library/defau ... mation.asp
Bei mir ist Ruhezustand Gott sei Danke, deaktiviert
//Edit: tschuldige, nicht richtig gelesen
, Thema verfehlt
Bei mir ist Ruhezustand Gott sei Danke, deaktiviert

//Edit: tschuldige, nicht richtig gelesen

Zuletzt geändert von ts-soft am 13.10.2005 22:29, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Ich finde ihn ganz praktisch. Wenn man gerade an einer größeren Sache arbeitet und dann schließlich zwecks diverser Gründe (Schlaf, Essen, etc.) unterbrechen muss, wirft man einfach den Ruhezustand an. Der Rechner kopiert dann alle im Speicher befindlichen Prozesse auf die Festplatte und schaltet sich aus. Wenn man dann später den Rechner wieder startet, wird der Arbeitsspeicher einfach mit den Daten, die auf der Festplatte liegen, gefüttert. Anschließend kann man an der Stelle weiterarbeiten, wo man vorher aufgehört hat. Alle Programme, die vorher schon gestartet waren, laufen auch danach noch. Es ist, als hätte man den Rechner nie ausgeschaltet.Bei mir ist Ruhezustand Gott sei Danke, deaktiviert
Von daher, Ruhezustand = guter Zustand

(Deinen


Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
> Ich glaube kiffi meint das anders,der rechner ist dann ja nicht aus!
jepp, ich meine die Zeit, in der der Anwender etwas längere Zeit nicht auf der
Tastatur herumhackt oder die Maus schubst. Nun könnte man ja davon
ausgehen, dass der User sich gerade einen Kaffee holt (oder einen
wegbringt). Diese Zeit kann man dann prima nutzen, um rechenintensive
Funktionen aufzurufen (den Anwender stört's ja nicht, weil er momentan nicht
am Rechner arbeitet). Wenn er aber wieder loslegt, dann sollen die
Berechnungen unterbrochen werden, damit der Anwender wieder die volle
Rechenpower für sich hat.
Grüße ... Kiffi
jepp, ich meine die Zeit, in der der Anwender etwas längere Zeit nicht auf der
Tastatur herumhackt oder die Maus schubst. Nun könnte man ja davon
ausgehen, dass der User sich gerade einen Kaffee holt (oder einen
wegbringt). Diese Zeit kann man dann prima nutzen, um rechenintensive
Funktionen aufzurufen (den Anwender stört's ja nicht, weil er momentan nicht
am Rechner arbeitet). Wenn er aber wieder loslegt, dann sollen die
Berechnungen unterbrochen werden, damit der Anwender wieder die volle
Rechenpower für sich hat.
Grüße ... Kiffi
a²+b²=mc²
-
- Beiträge: 476
- Registriert: 23.03.2005 23:19
Wie wärs, wenn Du die CPU Auslastung checkst und ab einem gewissen Schwellwert in Aktion trittst? Oder Du bleibst gleich in Aktion und setzt die Priorität deines Prozesses auf extrem niedrige Stufe. Damit hab ich gute Erfahrungen gemacht. Ich habs sogar beim Zocken nicht gemerkt, dass ein Programm von mir im Hintergrund lief. Das hat sich einfach die restliche Idle-Zeit geschnappt.
Optimismus ist ein Mangel an Information.
Achso! Standby war gemeint. Ok, dann hat sich das ja erledigt.Kiffi hat geschrieben:> Ich glaube kiffi meint das anders,der rechner ist dann ja nicht aus!
jepp, ich meine die Zeit, in der der Anwender etwas längere Zeit nicht auf der
Tastatur herumhackt oder die Maus schubst.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
And we're out of beta. We're releasing on time.
Also ich finde das Thema ebenfalls sehr interessant, wenn auch aus anderem Grund. Ich habe ein Hintergrundprogramm geschrieben, das systembedingt den Rechner nie automatisch in den Ruhe- oder Standby-Modus gehen lässt.
Die Aktivitäten des Programms verhindern also die systemeingestellte Funktion. Daran kann ich auch nichts ändern, aber ich würde gerne die Windos-eigene Funktion nachbilden, die man im Energiemanagement einstellen kann.
Den Rechner in Syspend to Disk oder Suspend to Ram zu schicken ist ja nicht das Problem, aber eben die Erkennung der Nutzerinaktivität.
CPU-Auslastung fällt als Erkenungskrierium aus, da das doch zu ungenau ist. Es bleibt also nur die Erkennung von Benutzerinaktivität (keine Maus- oder Tastaturnutzung) oder noch besser wäre natürlich, das eigene Programm für die Erkennung der windowseigenen Funktion "unsichtbar" zu machen.
Dass also trotz Programmaktivität der Rechner genauso automatisch schlafen geht, als ob dieses eine Programm eben nicht aktiv wäre.
Vielleicht hat ja jemand eine gloreiche Idee dazu ...
Gruß,
Martin
Die Aktivitäten des Programms verhindern also die systemeingestellte Funktion. Daran kann ich auch nichts ändern, aber ich würde gerne die Windos-eigene Funktion nachbilden, die man im Energiemanagement einstellen kann.
Den Rechner in Syspend to Disk oder Suspend to Ram zu schicken ist ja nicht das Problem, aber eben die Erkennung der Nutzerinaktivität.
CPU-Auslastung fällt als Erkenungskrierium aus, da das doch zu ungenau ist. Es bleibt also nur die Erkennung von Benutzerinaktivität (keine Maus- oder Tastaturnutzung) oder noch besser wäre natürlich, das eigene Programm für die Erkennung der windowseigenen Funktion "unsichtbar" zu machen.
Dass also trotz Programmaktivität der Rechner genauso automatisch schlafen geht, als ob dieses eine Programm eben nicht aktiv wäre.
Vielleicht hat ja jemand eine gloreiche Idee dazu ...

Gruß,
Martin
<dämlicheIdde>
Programm als Bildschirmschonder speichern
</dämlicheIdee>
Aber es wird doch wohl irgendo diese Funktion stehen, mit der Windows den Bildschirmschoner bei mangelder Maus und Tastaturnutzung startet. (msdk?)
Programm als Bildschirmschonder speichern
</dämlicheIdee>
Aber es wird doch wohl irgendo diese Funktion stehen, mit der Windows den Bildschirmschoner bei mangelder Maus und Tastaturnutzung startet. (msdk?)
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Code: Alles auswählen
Structure tagLASTINPUTINFO
cbSize.l
dwTime.l
EndStructure
PLASTINPUTINFO.tagLASTINPUTINFO
PLASTINPUTINFO\cbSize=SizeOf(PLASTINPUTINFO)
For i=1 To 10
;move mouse or click key ...
GetLastInputInfo_(@PLASTINPUTINFO)
Debug PLASTINPUTINFO\dwTime
Delay(2000)
Next

1:0>1