PDA

View Full Version : تغیر بک گراندویندوز



amir_civil
جمعه 09 دی 1384, 00:04 صبح
سلام دوستان
من چه جوری میتونم بک گراند ویندوز رو عوض کنم
ممنون

amir_civil
جمعه 09 دی 1384, 17:49 عصر
سلام
کسی نمیتونه راهنمایی کنیه:متعجب:

interchange
جمعه 09 دی 1384, 19:49 عصر
:قهقهه: سلام
شما چطور بلدید وارد اینترنت بشوید و از سایت برنامه نویس استفاده بکنید ولی بلد نیستید بک گراند ویندوز را عوض کنید؟:قهقهه:
ضمنا این گونه موارد را در مباحث مربوط به سیستم عامل ها وارد کنید :لبخند:
ممنون

amir_civil
جمعه 09 دی 1384, 20:46 عصر
سلام دکتر جون
iq=10000000
منظور من بابرنامه نویسی بود:اشتباه:

C++Lover
شنبه 10 دی 1384, 05:09 صبح
اینجور مسائل مربوط می شه به Windows Shell که می تونی تو MSDN هر چی بخوای پیدا کنی.
در مورد Wallpaper هم می تونی از Interface ای به نام IActiveDesktop تعریف شده در فایل shlobj.h استفاده کنی. اسم متدش هم SetWallpaper هست.

amir_civil
شنبه 10 دی 1384, 10:20 صبح
ممنون:قلب:

amir_civil
شنبه 10 دی 1384, 12:55 عصر
سلام دوست عزیز
من هر کاری میکنم نمیتونم از دستور زیر استفاده کنم همش ارور میده

SetWallpaper
اگه میشه یه مثال بزنید ممنون میشم
من یه مشکل دیگه هم دارم
اونم اینه که اکثر دستورهایی رو که با وی سی 2003 مینوشتم حالا با وی سی 2005 مینویسم ایراد میگیره
به نظر شما چیکار کنم

sh_roohani
شنبه 10 دی 1384, 15:56 عصر
C++Lover جان،
شما خودتون با این IActiveDesktop تا حالا تونستین کار کنین. راستش یه جورایی چموشه. اصلا با آدم راه نمیاد. من تو اینترنت هم گشتم خیلیا به دردسر خورده بودن. هم ShlObj.h رو include کردم، هم ShlGuid.h، هم ComDef.h و حتی شاید باورتون نشه، WinINet.h. بله، چند جا دیدم که نوشته بودن این یه اشکاله و باید حتما wininet.h رو include کرد! محیطی هم که آزمایش کردم، هم Visual Studio 98 بود و هم Visual Studio 2003.
توی هر دو محیط می گه

'IActiveDesktop' : undeclared identifier

Inprise
یک شنبه 11 دی 1384, 08:35 صبح
مدتها قبل وقتی با دلفی Shell ای برای ویندوز مینوشتم از IActiveDesktop هم استفاده کردم که البته بدون مسئله کار میکرد ، لیکن با VC ازش استفاده نکرده ام ، معهذا به نظرم میاد باید هدر afxext.h ( برای MFC Extensions ) رو داشته باشی ، اگر برنامه ات MFC است که احتمالا" هم هست . اما اگر مسئله صرفا" تغییر پس زمینه Desktop از طریق اجرا کردن یک کد هست ( و نه با یک Shell Extension ) میشه براحتی از تابع SystemParametersInfo با پارامتر SPI_SETDESKWALLPAPER استفاده کرد .



SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\\Barnamenevis.Bmp", SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);



( عموما" از Shell API ویندوز برای توسعهء Shell Extension ها استفاده میشه ، و برای سایر موارد عموما" یک راه معمولی با استفاده از Win32 API وجود داره )

sh_roohani
یک شنبه 11 دی 1384, 10:13 صبح
سلام،
ممنون جناب Inprise، در مورد SystemParametersInfo دیروز یه جایی خوندم که اگه Active Desktop فعال باشه، SystemParametersInfo دیگه پس زمینه ویندوز رو بعد از صدا کردن این تابع update نمی کنه. واسه همین توصیه کرده بود از IActiveDesktop استفاده بشه.

Inprise
یک شنبه 11 دی 1384, 10:29 صبح
بله ، حالت Active Desktop اصولا" از ویژگیهای افزوده شده به Shell هست و خودش به نوعی یک Shell Extension است بنابراین باید از IActiveDesktop استفاده کرد . من برای دلفی از این کد استفاده میکردم :


uses
ShlObj, ComObj;


function ChangeWallpaper(aFile: String): Boolean;
const
CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
hObj: IUnknown;
ADesktop: IActiveDesktop;
str: string;
wstr: PWideChar;
begin
hObj := CreateComObject(CLSID_ActiveDesktop);
ADesktop := hObj as IActiveDesktop;
wstr := AllocMem(MAX_PATH);
try
StringToWideChar(aFile, wstr, MAX_PATH);
ADesktop.SetWallpaper(wstr, 0);
ADesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
finally
FreeMem(wstr);
end;
end;

شاید مطلبی که اینجاست (http://msdn.microsoft.com/msdnmag/issues/01/05/c/) برای رفع مشکل VC مفید باشه ؛

C++Lover
دوشنبه 12 دی 1384, 20:40 عصر
سلام.
اول از همه با عرض پوزش به خاطر تأخیر. به علت یه سری گرفتاری خیلی دیر به دیر می تونم اینجا یه سری بزنم.
در مورد IActiveDesktop ، بله خودم ازش استفاده کردم و مشکلی هم نداشت. اگر تو هدر فایل shlobj.h را نگاه کنید می بینید که برای IActiveDesktop ذکر شده که باید فایل WININET.H رو هم include کنید دلیلش هم استفاده از ثابت INTERNET_MAX_URL_LENGTH در IActiveDesktop هست که این ثابت در هدر فایل WININET.H تعریف شده است. در ضمن برای استفاده از WININET.H باید از قبل windows.h رو هم Include کرده باشید. بنابراین به ترتیب باید فایلهای Windows.h و wininet.h و shlobj.h را include کنید.
این هم یک مثال که یک برنامه کنسوله که wallpaper رو عوض می کنه. البته برای خوانایی کدهای مربوط به اداره خطاها رو حذف کردم.


#include <windows.h>
#include <WININET.H>
#include <shlobj.h>


int main()
{
HRESULT hr;
IActiveDesktop *ad;
WALLPAPEROPT wo;

hr = CoInitialize(NULL);

hr = CoCreateInstance(CLSID_ActiveDesktop, NULL,
CLSCTX_INPROC_SERVER, IID_IActiveDesktop, reinterpret_cast<LPVOID*>(&ad));

hr = ad->SetWallpaper(L"c:\\bck.bmp", 0);
wo.dwSize = sizeof(wo);
wo.dwStyle = WPSTYLE_STRETCH;
hr = ad->SetWallpaperOptions(&wo, 0);
hr = ad->ApplyChanges(AD_APPLY_ALL);
ad->Release();

CoUninitialize();
return 0;
}

موفق باشید.