Welcome Guest [Log In] [Register]
Welcome to DIỄN ĐÀN HỌC VIỆN KĨ THUẬT QUÂN SỰ.




Tham gia

Vui lòng đăng kí thành viên để sử dụng diễn đàn 1 cách tốt nhất !

Username:   Password:
Add Reply
[C#] Vô hiệu hoá Screen Saver; [C#] Vô hiệu hoá Screen Saver
Topic Started: May 18 2011, 01:25 AM (1,359 Views)
Tesulakata
Member Avatar
Administrator
[C#] Vô hiệu hoá Screen Saver






Buồn buồn 1 ngày đẹp trời nào đó phá máy bạn mình chơi

Khi viết ra một chương trình, có thể chúng ta không muốn để Screen Saver chạy khi chương trình của chúng ta đang hoạt động. Vậy làm cách nào để tắt chúng đi mà không dùng bằng phương pháp thủ công. Có nhiều phương pháp để vô hiệu hóa chương trình Screen...
Khi viết ra một chương trình, có thể chúng ta không muốn để Screen Saver chạy khi chương trình của chúng ta đang hoạt động. Vậy làm cách nào để tắt chúng đi mà không dùng bằng phương pháp thủ công. Có nhiều phương pháp để vô hiệu hóa chương trình Screen Saver nhưng ở đây xin đưa ra các cách như sau:
Cách 1:

Cách tạm thời để disable Screen Saver đó là sử dụng Windows API SystemParametersInfo

[PHP] BOOL SystemParametersInfo(
UINT uiAction, // system parameter to retrieve or set
UINT uiParam, // depends on action to be taken
PVOID pvParam, // depends on action to be taken
UINT fWinIni // user profile update option
);
[/PHP]
Đoạn mã cần thực hiện như sau

[PHP] private const int SPI_SETSCREENSAVEACTIVE = 17;
private const int SPI_GETSCREENSAVEACTIVE = 16;
[DllImport("user32", CharSet = CharSet.Auto)]
private static extern int SystemParametersInfo(int action, int param, int param2, int winIni);
public static bool ActiveScreenSaver(bool enable)
{
int iEnable = (enable) ? 1 : 0;
int iRes1 = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, iEnable, 0, 0);
bool res = (iRes1 == 0) ? false : true;
return res;
}
[/PHP]

Cách này chỉ là tạm thời, khi restart máy tính thì nó sẽ hết tác dụng.
Cách 2:

Đó là truy xuất vào Registry để sửa. Sở dĩ Screen Saver chạy được là do Window đăng ký vào Registry ở: "HKEY_CURREN_USER\Control Panel\Desktop" có một subkey là "SCRNSAVE.EXE" và có giá trị: "C:\\WINDOWS\\system32\\sspipes.scr" nếu Screen Saver của Window ở chế độ Enable.
Như vậy để tắt Screen Saver ta có làm những cách sau: cho giá trị của SCRNSAVE.EXE = "". hoặc xóa bỏ luôn subkey SCRNSAVE.EXE. Còn nếu muốn Enable lại thì ta có thể tạo lại Subkey SCRNSAVE.EXE và gán lại giá trị cho nó là: "C:\\WINDOWS\\system32\\sspipes.scr".
Dưới đây là đoạn code minh họa:

[PHP] //Đăng ký truy xuất và mở một RegistryKey
RegistryKey rkScreenSaver = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
if ((string)rkScreenSaver.GetValue("SCRNSAVE.EXE") == "C:\\WINDOWS\\system32\\sspipes.scr")
{
//Dissable Screen Saver
rkScreenSaver.SetValue("SCRNSAVE.EXE", "");
rkScreenSaver.Close();
}
[/PHP]

Chú ý:

  • cần phải import thư viện Microsoft.Win32
  • giá trị của KeyValue("SCRNSAVE.EXE") không phải là một chuỗi cố định mà nó sẽ thay đổi tùy theo người dùng chọn chế độ Screen Saver nào trong Window. Thật ra chuỗi giá trị này chính là đường dẫn đến các chương trình Screen Saver ở trong Window. Bạn có thể thử bằng cách copy đường dẫn này vào Run để chạy thử. Khi đó bạn có thể bỏ đi điều kiện if ((string)rkScreenSaver.GetValue("SCRNSAVE.EXE") == "C:\\WINDOWS\\system32\\sspipes.scr") hoặc là xóa bỏ luôn key SCRNSAVE.EXE này bằng lệnh: rkScreenSaver.DeleteValue("SCRNSAVE.EXE",true);

    sưu tầm
[/QUOTE]

[/b]
Offline Profile Quote Post Goto Top
 
1 user reading this topic (1 Guest and 0 Anonymous)
« Previous Topic · Hướng dẫn · Next Topic »
Add Reply

[font=Times New Roman] .c_post img,#topic_review img { max-width:60%; } a.view_full { insert CSS styling here; } [/font]
Xây dựng bởi "Tesulakata" , dựa trên mã nguồn mở Zetaboards.
Xem tốt nhất trên các trình duyệt: Oprera, Mozilla Firefox, Google Chrome ở độ phân giải 1024 x 768 pixels.
Diễn đàn là một hệ thống mở, chúng tôi sẽ không chịu trách nhiệm về nội dung đăng tải do người dùng đưa lên.