Câu hỏi này là một chút cũ, nhưng tôi chỉ phải giải quyết cùng một vấn đề và đưa ra các giải pháp sau đây:
public class ScreenSaverInfo
{
public string FileName { get; set; }
public string Name { get; set; }
}
public IEnumerable<ScreenSaverInfo> GetScreenSavers()
{
string currentSSPath = null;
using (RegistryKey desktopKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop"))
{
if (desktopKey != null)
{
string screenSaverExe = desktopKey.GetValue("SCRNSAVE.EXE") as string;
if (!string.IsNullOrEmpty(screenSaverExe))
{
currentSSPath = Path.GetDirectoryName(screenSaverExe);
}
}
}
HashSet<string> directories = new HashSet<string>();
directories.Add(Environment.GetFolderPath(Environment.SpecialFolder.System));
directories.Add(Environment.GetFolderPath(Environment.SpecialFolder.SystemX86));
if (currentSSPath != null)
directories.Add(currentSSPath);
foreach (string dir in directories)
{
foreach (string file in Directory.EnumerateFiles(dir, "*.scr", SearchOption.TopDirectoryOnly))
{
yield return GetScreenSaverInfo(file);
}
}
}
public ScreenSaverInfo GetScreenSaverInfo(string filename)
{
IntPtr hLibrary = IntPtr.Zero;
try
{
hLibrary = LoadLibrary(filename);
StringBuilder sb = new StringBuilder(1024);
LoadString(hLibrary, 1, sb, sb.Capacity);
return new ScreenSaverInfo
{
FileName = filename,
Name = sb.ToString()
};
}
finally
{
if (hLibrary != IntPtr.Zero)
FreeLibrary(hLibrary);
}
}
[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32.dll")]
static extern bool FreeLibrary(IntPtr hLibrary);
[DllImport("user32")]
static extern int LoadString(IntPtr hInstance, int wID, [Out] StringBuilder lpBuffer, int nBufferMax);
Về cơ bản, tên hiển thị của màn hình là chuỗi tài nguyên đầu tiên trong .scr. Lưu ý rằng đối với một số trình bảo vệ màn hình (ví dụ: các trình bảo vệ màn hình tích hợp sẵn Windows), các tài nguyên được bản địa hóa không có trong tệp .scr chính nhưng trong tệp .scr.mui trong một thư mục con văn hóa cụ thể. Bạn không cần phải lo lắng về nó, bởi vì LoadString
biết nơi để tìm nguồn tài nguyên đầy đủ.
Nguồn
2009-11-15 15:23:53
Awesome..Tôi hoàn toàn không nhận ra điều đó là có thể. –