यह सवाल थोड़ा पुराना है, लेकिन मैं सिर्फ एक ही समस्या को हल करने के लिए किया था और निम्नलिखित समाधान के साथ आया था:
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);
असल में, स्क्रीनसेवर के प्रदर्शन नाम में पहली संसाधन स्ट्रिंग है एसएससीआर फ़ाइल। ध्यान दें कि कुछ स्क्रीनसेवर (जैसे विंडोज़ अंतर्निहित स्क्रीनसेवर) के लिए, स्थानीय संसाधन मुख्य .scr फ़ाइल में नहीं हैं बल्कि एक .scr.mui फ़ाइल में संस्कृति-विशिष्ट उपनिर्देशिका में हैं। आपको इसके बारे में चिंता करने की ज़रूरत नहीं है, क्योंकि LoadString
जानता है कि पर्याप्त संसाधन कहां मिलना है।
स्रोत
2009-11-15 15:23:53
बहुत बढ़िया .. मुझे पूरी तरह से एहसास नहीं हुआ कि यह संभव था। –