Составляем программу - менеджер фоновых рисунков для рабочего стола.
Дата отправки отчёта:
30 января 2016 г.
Задание выполнено: за
5 час. 00 мин.
Чему научился:
Научился работать с реестром, с папками на диске (создавать папку, считывать файлы), работать с элементами управления Listbox и Combobox.
Что было сложным:
См. комментарии.
Комментарии:
Большое спасибо! Менеджер картинок рабочего стола мне очень понравился. К сожалению, больше часа мучился с выводом картинки на рабочий стол. Оказалось, что нужно было выводить полный путь к картинке, а не относительный. У меня функция PlacePicture заработала так:
public void PlacePicture(string name) { if (name == "") return; string path = dir + name; if (!File.Exists(path)) return; string path1 = Path.GetFullPath(path); // полный путь к картинке (path – относительное имя файла; path1 – полное имя файла) SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path1, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); } Помог просмотр значения Wallpaper в реестре.
Научился: Взаимодействию с Windows API. Трудности: Подружиться с Windows API.
Да, и почему то в редакторе реестра, в том параметре, где указывается путь к скриншоту, у меня написан короткий путь к файлу, а не полный. Поэтому у меня вместо фона устанавливался черный фон. Пришлось немного пошаманить с переменной dir, чтобы в этот параметр заносился полный путь. Я добился своего, но обратной стороной медали стало то, что теперь в перечне скриншотов в самой программе я не могу избавиться от косой черты в именах файлов. Но основную задачу я при этом выполнил - файлы успешно скачиваются по ссылке и устанавливаются в виде фона.
Если будет время и настраение - буду думать как избавиться от косой черты.
Спасибо за интересный, хоть и сложный урок.
Научился: Управлять обоями рабочего стола, управлять файлами, создавать папки. Трудности: Вывести обои рабочего стола (потребовалось указать полный путь) 1) При попытке установить фоновый рисунок экран закрашивался в черный цвет. В реестре путь выглядел как paper/file.jpg. Пришлось прописать полный путь следующим образом:
string dir = Environment.CurrentDirectory + "\\paper\\";
Может, конечно, в уроке это место просмотрела.
2) Я не стала удалять PictureBox, а просто освободила ресурсы перед удалением файла, и все получилось:
private void list_picture_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Delete)
{
if (list_picture.SelectedIndex < 0) return;
try
{
picture.Image.Dispose(); // вот эта строка высвобождает ресурсы
picture.Image = null;
File.Delete(dir + list_picture.SelectedItem.ToString());
ReloadPictures();
}
catch
{ }
}
}