2011-02-11 33 views
6

Windows đặt lại thời gian IDLE mỗi khi người dùng chạm vào bàn phím hoặc chuột. Ứng dụng của tôi cần phải đặt lại thời gian IDLE tại những thời điểm cụ thể, nhưng tôi không thể tìm ra cách thực hiện điều này theo chương trình.Đặt lại theo lập trình thời gian Windows XP IDLE

Sau đây KHÔNG đặt lại thời gian IDLE bằng VB, C# hoặc QT4.
- Di chuyển/nhấp chuột có lập trình.
- Phím tắt có lập trình.
Bằng cách nào đó Windows biết những hành động này được mô phỏng.

Làm cách nào tôi có thể đặt lại thời gian IDLE? Bất kỳ suy nghĩ nào cũng sẽ được đánh giá cao!

+0

Tại sao bạn cần đặt lại thời gian rảnh? – Anders

+4

Đã thử [kỹ thuật chim uống] (http://www.goozex.com/community/cfs-filesystemfile.ashx/__key/CommunityServer.Discussions.Components.Files/7/1007.drinking_5F00_bird.jpg)? – Trinidad

+0

Bạn đã thử [keybd_event] (http://msdn.microsoft.com/en-us/library/ms646304.aspx) chưa? – Trinidad

Trả lời

4

Sử dụng SetThreadExecutionState(). Tùy chọn ES_SYSTEM_REQUIRED (2) đặt lại bộ hẹn giờ không hoạt động của hệ thống. Truy cập pinvoke.net để biết các khai báo bắt buộc.

+0

Tôi nghĩ điều này giải đáp cụ thể hơn câu hỏi của Anders. – Earlz

+0

@Earlz: Vâng, anh ta không chỉ định _why_ anh ta muốn thiết lập lại và hẹn giờ rỗi (hệ thống hoặc hiển thị) Một chương trình ghi đĩa cd/dvd chẳng hạn sẽ sử dụng ES_SYSTEM_REQUIRED trong khi một điểm điện như chương trình sẽ chỉ định ES_DISPLAY_REQUIRED. – Anders

3

Nếu bạn cần hiển thị để ở trên ví dụ, bạn sẽ gọi SetThreadExecutionState (ES_DISPLAY_REQUIRED | ES_CONTINUOUS);

On 2000/XP, bạn có thể sử dụng lá cờ ES_USER_PRESENT (Không hoạt động trên Vista +)

Để vô hiệu hóa các trình bảo vệ màn hình, bạn có thể xử lý SC_SCREENSAVE WM_SYSCOMMAND của (Bạn phải là cửa sổ phía sau, nếu không sử dụng SystemParametersInfo)

1

Về nguyên tắc SetThreadExecutionState() nên làm những gì bạn cần. Nhưng tôi thấy nó không hoạt động với cờ yêu cầu hệ thống trong một số tình huống trên một số Windows hiện đại. Rất tiếc, tôi không thể nhớ chi tiết chính xác.

Là một dự phòng, bạn chỉ có thể giả mạo một số đầu vào bằng cách gọi SendInput() với một thông báo di chuyển chuột trống chẳng hạn. Tôi đoán là giả mạo đầu vào của bạn không thành công vì bạn đã gọi SendMessage hoặc PostMessage.

Các vấn đề liên quan