C#: получите названия установленных экранных заставок

Обновление: Jenkins является самой актуальной версией Гудзона. Все должны использовать Jenkins теперь. Я буду обновлять ссылки соответственно.

Гудзон свободен и чрезвычайно легок настроить и будет легко работать на VM.

Частично из старого моего сообщения:

Мы используем его для [1 142]

  • , Развертываются, службы Windows
  • Развертывают веб-сервисы
  • Выполнение MSTests & отобразите столько же информации, сколько любые тесты junit
  • Отслеживают низкие, медицинские, высокие задачи
  • , trendgraph предупреждения и ошибки

Вот являются некоторыми созданными в материале .NET тот Гудзон поддержки

кроме того, бог запрещает Вам, используют визуальный безопасный источник, это поддерживает это также . Я рекомендовал бы смотреть на [1 112] статья Redsolo о создании проектов .NET с помощью Гудзона

вопросы

  • Q: В каких инструментах/лицензиях я буду нуждаться? Прямо сейчас мы используем Visual Studio и Умный блок для создания, и По необходимости для управления исходным кодом. Я буду нуждаться в чем-то еще или являюсь там эквивалентом задания крона для выполнения автоматизированных сценариев?

  • А: я просто установил Visual Studio на новой копии VM выполнение нового, исправленного, установки Windows Server ОС. Таким образом, Вам были бы нужны лицензии для обработки этого. Гудзон будет устанавливать себя как сервис окон и работать на порте 8080, и Вы настроите, как часто Вы хотите, чтобы он просканировал Ваш репозиторий кода для обновленного кода, или можно сказать ему создавать в определенное время. Все настраивающиеся через браузер.

  • Q: , Что, точно, это получит меня кроме признака поврежденной сборки? Я должен настроить тестовые проекты в этом решении (sln файл), который будет выполнен этими сценариями, таким образом, мне можно было протестировать конкретные функции? У нас есть, в данный момент, два таких теста, потому что у нас не было времени (или откровенно говоря, опыт) для создания хороших модульных тестов.

    А: Вы получите электронное письмо на первом разе, когда сборка перестала работать или становится нестабильной. Сборка нестабильна, если модульный тест перестал работать, или это может быть отмечено нестабильное через любое количество критериев, которые Вы устанавливаете. Когда модульный тест или сбои сборки, которые Вы будете посланы по электронной почте и это скажет Вам, где, почему и как это перестало работать. С моей конфигурацией мы добираемся:

    • список всех фиксаций начиная с последней рабочей сборки
    • примечания фиксации тех фиксаций
    • список файлов, измененных в фиксациях
    • консольный вывод от самой сборки, показывая ошибку или тестовый отказ
  • Q: , В каких аппаратных средствах я буду нуждаться для этого?

    А: А VM будет достаточен

  • Q: , Как только сборка была закончена и протестирована, действительно ли это - обычная практика, чтобы поднять ту сборку на FTP-сайте или иметь некоторый другой путь к внутреннему доступу? Идея состоит в том, что эта машина делает сборку, и все мы переходим к ней, но можем сделать сборки отладки, если мы имеем к.

    А: Гудзон может сделать то, что Вы хотите с ним, который включает ID'ing он через хеш md5, загружая его, копируя его, архивируя его, и т.д. Это делает это автоматически и предоставляет Вам длительную историю артефактов сборки.

  • Q: , Как часто мы должны сделать этот вид сборки?

    А: у Нас есть наш опрос SVN каждый час, ища изменения кода, затем выполняя сборку. Ночью в порядке, но несколько бесполезный IMO начиная с того, что Вы продолжили работать вчера привычка быть новыми в Вашем уме утром, когда Вы входите.

  • Q: , Как пространством управляют? Если мы делаем ночные сборки, мы должны иметь в наличии все старые сборки или начать угробить их приблизительно после недели или так?

    А: Это ваше дело, после того, как так долго я перемещаю наши артефакты сборки в длительное хранение или удаляю их, но все данные, которые хранятся в текстовых файлах / XML-файлы, которые я имею в наличии, это позволяет мне сохранить журнал изменений, графики тенденции, и т.д. на сервере с verrrry мало занимавшего места. Также можно установить Гудзон до, только сохраняют артефакты от запаздывания # сборок

  • Q: там что-либо еще, что я не вижу здесь?

    А: нет, Пойдите, получают Гудзон прямо сейчас, Вы привычка быть разочарованным!

7
задан Adam Haile 27 August 2009 в 14:44
поделиться

4 ответа

Этот вопрос немного устарел, но мне просто нужно было решить ту же проблему, и я пришел к следующему решению:

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. Обратите внимание, что для некоторых заставок (например, встроенных заставок Windows) локализованные ресурсы находятся не в основном файле .scr, а в файле .scr.mui в подкаталоге, зависящем от языка и региональных параметров. Вам не нужно беспокоиться об этом, потому что LoadString знает, где найти подходящий ресурс.

5
ответ дан 7 December 2019 в 07:48
поделиться

Взгляните на вопрос, который я однажды задавал здесь о хранителе экрана . Это направление к решению. Кроме того, похоже, что в самом фреймворке такого нет.

HTH,

2
ответ дан 7 December 2019 в 07:48
поделиться

Я предполагаю, что если вы не можете найти его где-либо в системе, он сохраняется в сборке как некие метаданные. Откройте файл в двоичном редакторе и найдите имя, которое вы ищете.

0
ответ дан 7 December 2019 в 07:48
поделиться

Я обыскал всю систему ... проверил реестр, поискал имена в содержимом каждого файла, открыл файлы .scr в шестнадцатеричной программе просмотра, но нигде не мог найти имена ... Затем я также попытался установить другие хранители экрана и заметил, что они всегда отображаются в настройках как имя файла. То, на что я изменил имя файла, появилось там. Таким образом, для нестандартных хранителей экрана он не ищет никаких специальных имен ... это наводит меня на мысль, что имена встроенных хранителей экрана были каким-то образом жестко закодированы в диалоге настроек как особые случаи.

Так я и сделал. то же самое в моем приложении ... просто создал массив всех особых случаев и обработал соответственно. Кажется, единственный вариант.

0
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: