2010-09-08 37 views
12

Trong chương trình C++ chạy trên Win7, có cách nào để giả mạo chuyển động của chuột hoặc thứ gì đó như thế, chỉ để giữ cho trình bảo vệ màn hình không khởi động và hệ thống chuyển sang chế độ ngủ? Tôi đang tìm cách tiếp cận tối thiểu và tôi không thích sử dụng .NET. Cảm ơn, -nuunTôi làm cách nào để ngăn chặn trình bảo vệ màn hình và ngủ trong khi thực hiện chương trình?

+2

tại sao sao bạn không thay đổi cài đặt trình bảo vệ màn hình hoặc cài đặt nguồn điện của hệ thống? –

+1

Là người dùng chương trình của bạn, _I_ muốn tự quyết định xem tôi có muốn chương trình thực thi chương trình bị chậm lại bởi một số trình bảo vệ màn hình hay không. Nếu bạn là người dùng của riêng bạn, bạn luôn có thể tự thay đổi cài đặt của hệ thống. – sbi

+4

Thực ra đây là câu hỏi hợp lệ. Tôi nghĩ rằng Windows Media Player thực hiện điều này khi chơi video và sau đó nó là hợp lý (bạn không muốn đứng lên mỗi năm phút và di chuyển con chuột của bạn chỉ để thưởng thức bộ phim của bạn, phải không? Cũng vô hiệu hóa màn hình tiết kiệm chỉ để xem một phim quá mức). – Tomek

Trả lời

29

Không gây rối với cài đặt bảo vệ màn hình, sử dụng SetThreadExecutionState. Đây là API cho thông báo cho các cửa sổ trên thực tế là ứng dụng của bạn đang hoạt động:

Cho phép một ứng dụng để thông báo cho hệ thống rằng nó đang được sử dụng, do đó ngăn cản hệ thống từ khi nhập ngủ hoặc tắt màn hình trong khi ứng dụng đang chạy.

, và

các ứng dụng đa phương tiện, chẳng hạn như video người chơi và các ứng dụng trình bày, phải sử dụng ES_DISPLAY_REQUIRED khi họ hiển thị video trong thời gian dài của thời gian mà không cần người dùng nhập vào

+0

SetThreadExecutionState() là rất tốt cho việc kiểm soát hệ thống và hiển thị giấc ngủ, nhưng nó sẽ * không * ngăn chặn trình bảo vệ màn hình khởi chạy. Ít nhất là hàm doc nói nó sẽ không. – naor

+4

Hiệu chỉnh: mặc dù trang MSDN cho các chức năng này nói rằng "Chức năng này không ngừng trình bảo vệ màn hình thực thi." gọi bằng ES_DISPLAY_REQUIRED trong thực tế ngăn trình bảo vệ màn hình kích hoạt. – naor

+3

đây cũng là cách để đi (thông qua p/gọi) nếu bạn đang sử dụng .NET - http://pinvoke.net/default.aspx/kernel32.SetThreadExecutionState –

-2

Tôi không chắc chắn lý do tại sao bạn phải sử dụng điều này. Việc vô hiệu hóa các tùy chọn này đơn giản trong cài đặt nguồn sẽ thực hiện.

Bạn đang cố gắng đạt được điều gì bằng cách thực hiện điều đó. Ứng dụng của bạn có phải là dịch vụ không. Trong trường hợp nó là sau đó bạn không cần phải được bothering về điều này.

Trong trường hợp đơn đăng ký của bạn là một ứng dụng giao diện người dùng, tôi cũng không thể nghĩ ra trường hợp sử dụng hợp lệ.

Hoặc chúng ta cần thêm thông tin.

+0

cho biết đó là tính năng phát tự động dài trong trò chơi mà người dùng không cần phải nhập, bạn không muốn trình bảo vệ màn hình làm phiền người dùng của bạn – gldraphael

0

Đây thường là ý tưởng đặc biệt xấu. Máy tính để bàn thuộc về người dùng ứng dụng của bạn, không phải là đơn đăng ký của bạn.

Nếu tôi đang chạy một ứng dụng đã tắt trình bảo vệ màn hình (hoặc di chuyển quanh các biểu tượng trên màn hình của tôi hoặc thêm vào các thanh công cụ truy cập nhanh) mà không được sự cho phép của tôi, nó sẽ bị văng ra trên tai một cách nhanh chóng.

Và nếu bạn người dùng, không làm điều đó trong ứng dụng của bạn. Thay đổi nó theo cách thủ công như phần còn lại của chúng tôi :-)

Nếu bạn phải làm điều đó (và tôi khuyên bạn không nên, nhưng bạn có thể bỏ qua điều đó), tôi không nghĩ rằng phương pháp đã thay đổi kể từ NT. Bạn sử dụng SystemParametersInfo với SPI_SETSCREENSAVEACTIVE để thay đổi hành vi. Đây là số user32.dll từ bộ nhớ.

Nhưng tôi có một hồi ức mơ hồ nhìn thấy vấn đề báo cáo với việc sử dụng phương pháp dưới Win7 và tôi nghĩ rằng giải pháp là một sự thay đổi registry, thiết ScreenSaveActive dưới HKEY_CURRENT_USER\Control Panel\Desktop-0 (và trở về 1 khi bạn đã hoàn tất).

+1

nói rằng nó sẽ tự động phát * trong một trò chơi mà người dùng không cần phải nhập, không muốn trình bảo vệ màn hình làm phiền người dùng của bạn – gldraphael

+3

Ý tưởng tồi? những gì về người chơi phương tiện truyền thông? –

1

Đó không phải là một ý tưởng tồi, bất kỳ trình phát phương tiện truyền thông phong nha nào ... Tìm kiếm chức năng SystemParametersInfo(SPI_SETSCREENSAVEACTIVE ...) trong Win32 api, bạn nên thực hiện thủ thuật.

+2

Đó không phải là những gì người chơi phương tiện làm. Xem câu trả lời của tôi. –

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