Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > смена обоев


Автор: nikitao 6.2.2006, 22:05
Мужики, подскажити WinAPI ф-ции для САБЖа(обои и заставки).Интересуют еще такие опции как "замастить","растянуть" ,"по центру".
smile

ЗЫ Зарание спасибо.

Автор: Fixin 6.2.2006, 22:23
Код

SystemParametersInfo(SPI_SETDESKWALLPAPER, 
                                    0, 
                                    PChar('C:\SOMEPATH\SOME.BMP'), 
                                    SPIF_SENDWININICHANGE);

Автор: Helicopterr 6.2.2006, 23:42
Код

WCHAR DIRNAME[200];

GetCurrentDirectory( 200, DIRNAME ); //допустим обои в том же каталоге, что и программа
lstrcatW( DIRNAME, L"\\my.bmp" );  

SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,  DIRNAME,  SPIF_UPDATEINIFILE );


Это будет растягивать.
Тип пути WCHAR может быть важен т.к. с некоторыми другими типами у меня обои устанавливались, но сбрасывались после первой перезагрузки Windows.

А кто-нибудь знает, как установить не bmp а, например, jpg...

Автор: forker 7.2.2006, 17:20
А jpg-шки винда перегоняет все равно в bmp и сохраняет в AppData\Microsoft\ по-моему.
Т.е. надо как-то вызывать виндовский конвертор, я пытался найти его как программку, но не нашел.
ТАК ЧТО, МНЕ ТОЖЕ ИНТЕРЕСЕН ЭЭТОТ ВОПРОС!!! smile

Автор: nikitao 10.2.2006, 00:10
Я че то туплю.У меня старые обои пропадают,а вот новые не грузятся.
Может я че то не так делаю smile . Я почти не работаю пока с WinAPI

Автор: Helicopterr 11.2.2006, 00:45
Покажи код.

Автор: Vendigo 20.2.2006, 22:41
У меня тож не работает smile
Уж, все перепробовал...
Код

//---------------------------------------------------------------------------

#include <windows.h>
#pragma hdrstop
#include<Winuser.h>
#include <winbase.h>


//---------------------------------------------------------------------------

#pragma argsused
WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WCHAR DIRNAME[200];
    GetCurrentDirectory(200,DIRNAME);     //допустим обои в том же каталоге, что и программа
    lstrcatW( DIRNAME, L"\\temp.bmp" );

    SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,  DIRNAME,  SPIF_UPDATEINIFILE );
    return 0;
}


На этот вариант ругается компилятор:
[C++ Ошибка] Unit1.cpp(15): E2034 Cannot convert 'wchar_t *' to 'char *'
[C++ Ошибка] Unit1.cpp(15): E2342 Type mismatch in parameter 'lpBuffer' (wanted 'char *', got 'wchar_t *')
Добавлено @ 22:43
Цитата(Helicopterr @ 6.2.2006, 23:42 Найти цитируемый пост)
А кто-нибудь знает, как установить не bmp а, например, jpg...

Может быть так:
Код

#include <JPEG.hpp>    //используется только в том случае,
                                     // когда используется формат jpeg


Автор: Fixin 20.2.2006, 23:03
Цитата(Vendigo @ 20.2.2006, 22:41 Найти цитируемый пост)
Может быть так:
Нет, это используется вместе с компонентами, испозльзующими jpeg-кодирование.
Цитата(Vendigo @ 20.2.2006, 22:41 Найти цитируемый пост)
На этот вариант ругается компилятор:
Код

char DIRNAME[MAX_PATH];
WCHAR NEW_DIRNAME[MAX_PATH];
GetCurrentDirectory(200, DIRNAME);
lstrcpy(NEW_DIRNAME, DIRNAME);
lstrcatW(NEW_DIRNAME, L"\\temp.bmp" );    
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,  NEW_DIRNAME,  SPIF_UPDATEINIFILE );

Добавлено @ 23:05
Модератор: Пожалуйста, один топик - один вопрос.
Надо было отдельно создавать


Автор: Vendigo 21.2.2006, 19:36
Работаю в Builder 6 и все вышеописанные примеры не компилируются smile
Вот так работает smile


Код

#include <windows.h>
#include<Winuser.h>
#pragma hdrstop
#include <system.hpp>
#include<string.h>

//---------------------------------------------------------------------------

#pragma argsused

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    char FName[100];
    strcpy(FName,"D:\\Документы\\S.bmp");        // #include<string.h>

                                                        // #include<Winuser.h>
    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, FName, SPIF_UPDATEINIFILE);
    return 0;
}

Автор: Helicopterr 22.2.2006, 02:24
Vendigo
прошу прощения, я одну букву пропустил
Код

WCHAR DIRNAME[200];
GetCurrentDirectoryW ( 200, DIRNAME ); // ! Unicode
lstrcatW( DIRNAME, L"\\my.bmp" );  
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, DIRNAME, SPIF_UPDATEINIFILE );

Автор: nikitao 22.2.2006, 22:01
Цитата(Helicopterr @ 11.2.2006, 01:45 Найти цитируемый пост)
Покажи код.

Да код особо показывать нечего.
Создаю мфсину,кидаю кнопку и в событии нажатия ее прописываю,чтоб обои сменила.Остается только голубой экран,как-будто неверно адрес файла пишу smile

Автор: Fixin 22.2.2006, 22:15
Кинь этот кусок по смене обоев и получению адреса

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)