Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Aladser
0 / 2 / 0
Регистрация: 31.01.2015
Сообщений: 45
#1

Программная смена обоев. Черный экран на Win 8.1

03.02.2015, 09:22. Просмотров 750. Ответов 4
Метки нет (Все метки)

Меняю обои на рабочем столе с помощью:
C++
1
2
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "1.bmp",
   SPIF_UPDATEINIFILE | SPIF_SENDCHANGE)
В Win7 Домашняя Расширенная - работает, в Win 8.1 - черный экран.
Но при этом функция возвращает всегда 1, а GetLastError()в-основном 0, хотя рандомно появилась 1460 и 1477.

Тут мне реально нужно сделать костыль. Как сделать, чтобы в Win 8.1 заработала?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2015, 09:22
Ответы с готовыми решениями:

Программная смена обоев рабочего стола...
Как в Windows XP программно сменить обои рабочего стола? Пробовал сделать так:...

Смена обоев рабочего стола.
Добрый день! Я меняю например картинку на рабочем столе вот этим способом....

Вместо обоев черный фон, win 7 pro
Суть в том,что однажды при запуске фон рабочего стола стал черным и никаким...

Win 7 до Win 10. Черный экран + мышка
Обновил 7ку до Вин 10. В итоге появился черный экран с мышкой. Мне посоветовали...

Win 8.1 Черный экран (курсор)
На ноутбуке до не давнего времени стояла пиратская восьмерка, зайдя случайно в...

4
Убежденный
Ушел с форума
Эксперт С++
15954 / 7266 / 1178
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
03.02.2015, 11:59 #2
Лучший ответ Сообщение было отмечено Aladser как решение

Решение

Во-первых, попробуйте указать полный путь к файлу.
Во-вторых, звать GetLastError имеет смысл только если функция
завершается с ошибкой (это общее правило для практически любой
WinAPI-шной функции, хотя есть и исключения).
1
demmax2004
116 / 138 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.02.2015, 12:24 #3
а файл "1.bmp" где находится ?
0
Aladser
0 / 2 / 0
Регистрация: 31.01.2015
Сообщений: 45
04.02.2015, 11:26  [ТС] #4
В папке с программой

Добавлено через 7 минут
Спасибо! Заработало, хотя непонятно почему так. 1 же возвращает, значит видел файл в папке с программой.

Добавлено через 19 часов 6 минут
Проблема вернулась. Если напрямую писать имя файла в функцию, то все нормально.
C++
1
2
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\Program Files\\1.bmp",
                       SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Но если вместо имени файла писать void|AnsiString-указатель или ссылку на переменную типа AnsiString, то опять черный экран!
C++
1
2
3
4
5
6
7
8
AnsiString FN = GetCurrentDir();
  void *pFN = &FN;
  for(int i=1; i<FN.Length();i++){
     if(FN[i]=='\\')
       FN.Insert('\\', ++i);}
  FN.Insert("\\\\CurWall.bmp", FN.Length()+1);
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pFN,
                       SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
Еще одно наблюдение - если вместо имени файла поставить любую строку, то функция выполнится!

Ну как с ней бороться или она вообще не воспринимает в третьем аргументе переменную?
0
BRcr
4015 / 2305 / 291
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
04.02.2015, 14:23 #5
Зашибись. Указатель void, под которым AnsiString. Кто научил такой ерунде-то? По шее ему.

У AnsiString есть метод c_str() - он отдает как раз то, что тебе нужно.
1
04.02.2015, 14:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2015, 14:23

Win XP SP2 черный экран
3драствуйте! Однажды я во время загрузки ПК резко его обесточил. После чего он...

Не устанавльвается Win XP (Любая) черный экран
Меня попросили переустановить винду на ноутбуке TOSHIBA. Сначала воткнул LIVESD...

Не хочет устанавливаться Win 8, черный экран!
Здравствуйте! Поставил Винду 8 ( windows 8 профессиональная 32 битная) на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru