Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как после смены обоев обновить рабочий стол?

442
05 октября 2002 года
HexoGenus
121 / / 20.03.2000
//Меняю обои
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C:\\Windows\\лес.bmp",SPIF_UPDATEINIFILE);
// после этого на рабочем столе
// все еще старые обои
// перехожу на рабочий стол жму F5
// для обновления или перезагружаю комп
// и после этого обои изменены...
// Как это сделать программно?
// (т.е. не перезагружая комп)
// Где то находил способ сослаться
// на канву рабочего стола но щас
// не могу откопать этот способ...
// может он бы помог???
// Может Refresh или Redraw какой нибудь?
250
06 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by HexoGenus
//Меняю обои
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C:\\Windows\\лес.bmp",SPIF_UPDATEINIFILE);
// после этого на рабочем столе
// все еще старые обои
// перехожу на рабочий стол жму F5
// для обновления или перезагружаю комп
// и после этого обои изменены...
// Как это сделать программно?
// (т.е. не перезагружая комп)
// Где то находил способ сослаться
// на канву рабочего стола но щас
// не могу откопать этот способ...
// может он бы помог???
// Может Refresh или Redraw какой нибудь?


Если знаешь хендл рабочего стола(его узнать легко), то можешь просто послать мессадж WM_PAINT
или
ShellExecute(Application->Handle,
Pchar('Open'),Pchar('C:\Windows\Rundll32.exe'),
Pchar(команда),
Pchar('C:\Windows'),SW_SHOWNORMAL);

"rundll32 user,repaintscreen" - Обновить рабочий стол

442
12 октября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Joker

Если знаешь хендл рабочего стола(его узнать легко), то можешь просто послать мессадж WM_PAINT
или
ShellExecute(Application->Handle,
Pchar('Open'),Pchar('C:\Windows\Rundll32.exe'),
Pchar(команда),
Pchar('C:\Windows'),SW_SHOWNORMAL);

"rundll32 user,repaintscreen" - Обновить рабочий стол



Сначала даю команду
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, "C:\\Windows\\лес.bmp", SPIF_UPDATEINIFILE);

Потом повторяю при нажатии F5 обновляется рабочий стол и все ок...
НО ПРОГРАМНО... НЕ ПОЛУЧАЕТСЯ :-(
Давал я эту команду rundll32 user,repaintscreen
Стол мигает но новый фон не появляется...
Нашел как определить Handle рабочего стола и даже рисовать на нем...
TCanvas *WCanvas=new TCanvas();
WCanvas->Handle=GetDC(HWND_DESKTOP);
//{Теперь рисуем что хотим и где хотим}
WCanvas->Brush->Color=clRed;
WCanvas->Rectangle(100,100,200,200);
Но даже после этого команда которая я думал поможет не действует :-(((
>>---> WCanvas->Refresh();

Может как ты пишешь можно послать месадж WM_PAINT по данному хэндлу ... :-(( но я понятия не имею какой это командой делается... я попробовал поискать но пока не нашел....
ShellExecute тоже не помогла... хотя может я в нее неправильно подставил команду...

Вобщем вопрос открыт...
Как обновить рабочий стол или как изменить обои рабочего стола что бы сразу был виден результат ...???

250
13 октября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by HexoGenus


Сначала даю команду
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, "C:\\Windows\\лес.bmp", SPIF_UPDATEINIFILE);

Потом повторяю при нажатии F5 обновляется рабочий стол и все ок...
НО ПРОГРАМНО... НЕ ПОЛУЧАЕТСЯ :-(
Давал я эту команду rundll32 user,repaintscreen
Стол мигает но новый фон не появляется...
Нашел как определить Handle рабочего стола и даже рисовать на нем...
TCanvas *WCanvas=new TCanvas();
WCanvas->Handle=GetDC(HWND_DESKTOP);
//{Теперь рисуем что хотим и где хотим}
WCanvas->Brush->Color=clRed;
WCanvas->Rectangle(100,100,200,200);
Но даже после этого команда которая я думал поможет не действует :-(((
>>---> WCanvas->Refresh();

Может как ты пишешь можно послать месадж WM_PAINT по данному хэндлу ... :-(( но я понятия не имею какой это командой делается... я попробовал поискать но пока не нашел....
ShellExecute тоже не помогла... хотя может я в нее неправильно подставил команду...

Вобщем вопрос открыт...
Как обновить рабочий стол или как изменить обои рабочего стола что бы сразу был виден результат ...???



Посылать сообщения:
LRESULT SendMessage(

HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
два последних параметра дай NULL

442
22 октября 2002 года
HexoGenus
121 / / 20.03.2000
Нашел все-таки причину облома...
я давал команду
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, "C:\\Windows\\лес.bmp", SPIF_UPDATEINIFILE);

Она выдавала результат не сразу а после перезагрузки или ручного обновления рабочего стола...
Чуть подразобрался и оказалось что если в настройках рабочего стола отключить Active Desctop то в этом случае фон меняется сразу... стал искать как не перезагружая комп отключить Active Desktop ... Предположили что функция SystemParametersInfo должна уметь и это...
Но когда вместе с Дельфином полезли в доки то обнаружили что есть более полный вариант команды для смены рабочего стола...
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, "C:\\Windows\\лес.bmp", (SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE));
Прекрасно работает и сразу обновляет стол!!!
Уррааа!!!! :D
250
24 октября 2002 года
Joker
1.4K / / 20.02.2000
А чего обновление не сработало..??
442
24 октября 2002 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by Joker
А чего обновление не сработало..??



Когда выключен АктивДесктоп обновление и не нужно... а когда включен то даже обновление не помагает если дать команду неправильно (Ваш вариант, а через F5 обновляется) ...
Если же правильно
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0, "C:\\Windows\\лес.bmp", (SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE));
То оно и не нужно
:D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог