Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Изменение рисунка рабочего стола

Автор: 18192123 14.09.2008 23:24

Попыталась изменить рисунок на рабочем столе с использованием функции SystemParametersInfo:


char filename[15];
strcpy(filename,"D:\Lab1.bmp");
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,&filename,SPIF_SENDWININICHANGE);
DWORD dwError = GetLastError();
printf("LastError() = %d \n", dwError);



Проблема в том, что указанный рисунок не устанавливается на рабочем столе...а использование GetLastError() свидетельствует о том, что произошла ошибка №2 - Файл не найден...
Скажите пожалуйста, в чём может быть причина?

Автор: volvo 15.09.2008 0:35

Ну, во-первых, С++ это не Дельфи, обратный слэш должен быть двойным... А во-вторых (насколько я помню) ты можешь поменять картинку только на тот файл, который хранится там же, где все остальные картинки десктопов Windows... У меня получилось вот так:

#include <tchar.h>
...
::SystemParametersInfo(
SPI_SETDESKWALLPAPER,
0,
_T("C:\\WINDOWS\\Web\\Wallpaper\\my_pic.bmp"),
SPIF_SENDWININICHANGE
);


Автор: 18192123 15.09.2008 1:41

Цитата(volvo @ 14.09.2008 21:35) *

У меня получилось вот так:

Спасибо!! Картинка теперь меняется, только сообщается о ошибке №6...это о чём??

Автор: volvo 15.09.2008 1:59

Ни о чем... Нет никакой ошибки. Ты должна брать GetLastError только, если тебе сама функция сигнализировала об ошибке (то есть, если вернулся 0):

	if(::SystemParametersInfo(SPI_SETDESKWALLPAPER,	0,
_T("C:\\WINDOWS\\Web\\Wallpaper\\my_pic.bmp"),
SPIF_SENDWININICHANGE) == 0)
{
DWORD dwError = GetLastError();
printf("LastError() = %d \n", dwError);
}


Автор: 18192123 15.09.2008 2:35

Цитата(volvo @ 14.09.2008 22:59) *

Ни о чем... Нет никакой ошибки.

Спасибо большое!! Теперь ясно!

Автор: 18192123 19.09.2008 22:14

то же самое для С++ builder
Пользователь может ввести полное имя рисунка, который требуется установить на рабочий стол, в Set_Desk ( компонент Edit).


//SystemParametersInfo(SPI_SETDESKWALLPAPER,0,&filename,SPIF_SENDWININICHANGE);
String filename;
filename=Set_Desk->Text;
//"D:\\WINDOWS\\Lab1.bmp"
if(::SystemParametersInfo(SPI_SETDESKWALLPAPER,0,_T(&filename),SPIF_SENDWININICHANGE) == 0)
{
DWORD dwError = GetLastError();
Control_Panel->Text=IntToStr(dwError);
}
else
Control_Panel->Text= "Change is OK!";




в результате - 2-я ошибка- файл не найден
вводится в Set_Desk путь к файлу в следующей форме: "D:\\WINDOWS\\Lab1.bmp"
что я не так делаю?