Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 19:37   #1
Cooler2
Новичок
Джуниор
 
Регистрация: 11.06.2008
Сообщений: 2
По умолчанию Смена обоев, проблема с записью в реестр

Здравствуйте!
вопрос в следующем, делаю программку для смены обоев в Windows Seven Starter.
Механизм смены обоев мне известнен. Все обходится записью в реестр значений и посылке системе сообщения, что реестр обновлен. Надо открыть HKCU, далее Control Panel
и Desktop. Так вот возникли проблемы с открытием раздела Desktop. Проблемы заключается в следующем: что этот раздел можно открыть только для чтения.
А если в самом реестре (через regedit) открыть все права, то запись значений происходит, но после вызова функции SystemParametrsInfo Windows записанные значения перезаписывает своими,т.е. вставляет свою стандартную обоину.
Теперь пришло время запросить при запуске моей программы повышенные права у системы через UAC используя манифест. Сделал. Права запрашивает, нажимаю да, = результат тот же. Доступа к разделу Desktop для записи я по прежнему не имею.
Подскажите, в чем моя ошибка. Что не так. Исходник прилагаю).

Еще хочу добавить, что программа personalization под той же учеткой и с тем же запросом повышенных прав со своей задачей справляется и данные в реестр вносит.
Вложения
Тип файла: rar Смена фона рабочего стола Vista Seven.rar (7.9 Кб, 16 просмотров)

Последний раз редактировалось Cooler2; 30.10.2011 в 20:17.
Cooler2 вне форума Ответить с цитированием
Старый 30.10.2011, 23:31   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Вот возьмите вот эти функции меняют картинку на рабочем столе и сохраняет при этом её
Код:
uses
  ...ComObj, ShlObj;

...

 function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var
  pw: PWideChar;
  iSize: integer;
begin
  iSize := Length(sStr) + 1;
  iNewSize := iSize * 2;

  pw := AllocMem(iNewSize);

  MultiByteToWideChar(CP_ACP, 0, PChar(sStr), iSize, pw, iNewSize);

  Result := pw;
end;

procedure ChangeActiveWallpaper(putwallpaper:pwidechar);
const
  CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
  ActiveDesktop: IActiveDesktop;
begin
  ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
    as IActiveDesktop;
  ActiveDesktop.SetWallpaper(putwallpaper, 0);
  ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
isize:integer;
begin
ChangeActiveWallpaper(StringToPWide('D:\Wallpaper1.bmp',isize));
end;
P.S. Проанализировав реестр я заключил следующие: что-бы поменять картинку на рабочем столе нужно менять не путь а саму картинку по вот этому пути C:\Users\Пользователь\AppData\Roami ng\Microsoft\Windows\Themes\Transco dedWallpaper.jpg
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось dmitriegorovih; 31.10.2011 в 09:39.
dmitriegorovih вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с учетной записью Mortimoro Операционные системы общие вопросы 2 11.07.2011 14:51
Смена обоев для рабочего стола программно Windows 7 sanatik Операционные системы общие вопросы 2 26.04.2011 15:09
Проблема с записью на CD pavel42 Компьютерное железо 2 24.09.2009 16:33
Смена обоев через папку? KWN, lnc Общие вопросы Delphi 1 25.02.2009 08:27
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49