2011-02-11 13 views
6

System Windows resetuje czas IDLE za każdym razem, gdy użytkownik dotknie klawiatury lub myszy. Moja aplikacja musi zresetować czas IDLE w określonych momentach, ale nie mogę wymyślić, jak to zrobić programowo.Programowo zresetować system Windows XP IDLE czas

Następujące NIE resetuje czasu IDLE za pomocą VB, C# lub QT4.
- Programistyczne ruchy/kliknięcia myszą.
- Zautomatyzowane naciśnięcie klawisza.
W jakiś sposób Windows wie, że te akcje są symulowane.

Jak mogę zresetować czas IDLE? Wszelkie przemyślenia zostaną docenione!

+0

Dlaczego konieczne jest zresetowanie czasu bezczynności? – Anders

+4

Próbowałem już [technika picia ptaków] (http://www.goozex.com/community/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/7/1007.drinking_5F00_bird.jpg)? – Trinidad

+0

Czy próbowałeś już [keybd_event] (http://msdn.microsoft.com/en-us/library/ms646304.aspx)? – Trinidad

Odpowiedz

4

Użyj SetThreadExecutionState(). Opcja ES_SYSTEM_REQUIRED (2) resetuje licznik czasu bezczynności systemu. Odwiedź pinvoke.net, aby uzyskać wymagane deklaracje.

+0

Myślę, że to konkretnie odpowiada na pytanie, niż robi to Anders. – Earlz

+0

@Allz: Cóż, nie określił, dlaczego chciał zresetować i który bezczynny timer (system lub wyświetlacz) Program nagrywarki cd/dvd użyłby na przykład ES_SYSTEM_REQUIRED, podczas gdy program taki jak Power Point określiłby ES_DISPLAY_REQUIRED. – Anders

3

Jeśli potrzebujesz, aby wyświetlacz pozostał na przykład, możesz zadzwonić pod numer SetThreadExecutionState (ES_DISPLAY_REQUIRED | ES_CONTINUOUS);

Na 2000/XP można użyć flagi ES_USER_PRESENT (Nie działa na Vista +)

Aby wyłączyć wygaszacz ekranu, można obsługiwać SC_SCREENSAVE WM_SYSCOMMAND użytkownika (musi być na pierwszym planie okno, inaczej używać SystemParametersInfo)

1

Zasadniczo funkcja SetThreadExecutionState() powinna wykonać to, czego potrzebujesz. Ale odkryłem, że nie działa z wymaganą przez system flagą w niektórych sytuacjach w niektórych nowoczesnych systemach Windows. Przepraszam, nie pamiętam dokładnych szczegółów.

Jako awarię można po prostu sfałszować niektóre dane wejściowe, wywołując SendInput() z na przykład komunikatem przeniesienia pustej myszy. Domyślam się, że wprowadzanie danych nie powiodło się, ponieważ wywołałeś SendMessage lub PostMessage.

Powiązane problemy