PDA

View Full Version : آموزش: مشکل در تغییر عکس دسکتاپ در ویندوز XP



farzadkamali
دوشنبه 03 تیر 1392, 23:25 عصر
با سلام

من از دستور زیر برای تغییر دادن عکس دسکتاپ استفاده می کنم.(عکس ها در پوشه ای کنار برنامه هست)



PicPath := ExtractFilePath(Application.ExeName)+'pictiure\'+l istbox1.Items.Strings
[listbox1.ItemIndex];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pChar(PicPath), SPIF_SENDCHANGe);




اما مشکل اینجاست که در ویندوز 7 و 8 کار می کنه ولی توی ویندوز XP جواب نمیده. چرا؟

farzadkamali
سه شنبه 04 تیر 1392, 13:55 عصر
بعدش باید تو xp یه مسیج هم بفرستی. که سیستم عامل بفهمه و برات تغییر بده.

؟؟؟؟؟؟؟؟؟؟؟

Pr0grammer
سه شنبه 04 تیر 1392, 17:11 عصر
این کد رو یه امتحان کنید :

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, pChar(PicPath), 0);
فقط پارامتر آخرش متفاوته ؛ ولی امیدوارم کارتون رو راه بندازه...

موفق باشید/

Mask
سه شنبه 04 تیر 1392, 18:44 عصر
رسیدن بخیر. حجی

var R:TRegistry;
Filename:string;
begin
OpenPictureDialog1.Execute;
Filename:=OpenPictureDialog1.FileName;
Edit1.Text:=Filename;
with TRegistry.Create do
begin
Rootkey := HKEY_CURRENT_USER;
if OpenKey('Control Panel\Desktop',False) then
begin
WriteString('Wallpaper',Filename);
end;
Free;
end;
// update the system
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,Pointe r(Filename),SPIF_UPDATEINIFILE);
end;

farzadkamali
سه شنبه 04 تیر 1392, 21:44 عصر
ممنون از پاسخ دوستان
اما هیچ کدوم روی ویندوز XP جواب نمیده. ولی روی 7 چرا.
البته با کلیک راست روی دسکتاپ و رفتن به properties عکس دسکتاپ دقیقاً روی همونیه که ما انتخاب کردیم و تنظیمات هم جوریه که انگار تغییر کرده ولی هیچ عکسی در دسکتاپ نشون نمیده. جالب اینجاست که عکس دسکتاپ رو هم می بره و صفحه آبی میشه.

Felony
سه شنبه 04 تیر 1392, 21:59 عصر
رسیدن بخیر. حجی

var R:TRegistry;
Filename:string;
begin
OpenPictureDialog1.Execute;
Filename:=OpenPictureDialog1.FileName;
Edit1.Text:=Filename;
with TRegistry.Create do
begin
Rootkey := HKEY_CURRENT_USER;
if OpenKey('Control Panel\Desktop',False) then
begin
WriteString('Wallpaper',Filename);
end;
Free;
end;
// update the system
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,Pointe r(Filename),SPIF_UPDATEINIFILE);
end;

چه نیازی به ارسال پیغام SPIF_UPDATEINIFILE هست ؟!

جای اون باید پیغام SPIF_SENDCHANGE رو ارسال کنید .

farzadkamali
سه شنبه 04 تیر 1392, 22:15 عصر
چه نیازی به ارسال پیغام SPIF_UPDATEINIFILE هست ؟!

جای اون باید پیغام SPIF_SENDCHANGE رو ارسال کنید .

همچنان در XP جواب نمیده

Felony
سه شنبه 04 تیر 1392, 22:22 عصر
من یادمه چند سال پیش از همچین کدی استفاده کردم و مشکلی نداشت : http://delphi.about.com/od/windowsshellapi/a/tregistry.htm

فکر میکنم ویندوز XP فقط فایل های Bitmap رو به عنوان تصویر میز کار قبول میکرد و خود برنامه نویس باید تصویر انتخابی کاربر رو به Bitmap تبدیل میکرد و بعد به عنوان تصویر میز کار ست میکردش ، البته مطمئن نیستم ولی همچین نکته ای یادم هست ، شما با کدی که تولینک مذکور هست و یک تصویر Bitmap تست کنید .

farzadkamali
سه شنبه 04 تیر 1392, 23:01 عصر
من یادمه چند سال پیش از همچین کدی استفاده کردم و مشکلی نداشت : http://delphi.about.com/od/windowsshellapi/a/tregistry.htm

فکر میکنم ویندوز XP فقط فایل های Bitmap رو به عنوان تصویر میز کار قبول میکرد و خود برنامه نویس باید تصویر انتخابی کاربر رو به Bitmap تبدیل میکرد و بعد به عنوان تصویر میز کار ست میکردش ، البته مطمئن نیستم ولی همچین نکته ای یادم هست ، شما با کدی که تولینک مذکور هست و یک تصویر Bitmap تست کنید .

درسته. عکس های .bmp رو میزاره. ولی من عکس هام همه jpg هست. چه طور ممکنه!!! به صورت دستی که شما میتونید هر عکسی رو با هر فرمتی برای دسکتاپ قرار بدین. چرا اینجوری نمیشه؟



خود برنامه نویس باید تصویر انتخابی کاربر رو به Bitmap تبدیل میکرد

چه جوری؟ کدی؟ مثالی؟ سورسی؟ ندارین؟ کیفیت پایین نمیاد؟
کلک رشتی؟ چیزی نداره که بشه jpg رو هم گذاشت؟

یوسف زالی
سه شنبه 04 تیر 1392, 23:59 عصر
یه نگاه به رجیستری بنداز ببین چطور این کار رو می کنه.
با همون داستان معروف RunDll32

Felony
چهارشنبه 05 تیر 1392, 04:58 صبح
به صورت دستی که شما میتونید هر عکسی رو با هر فرمتی برای دسکتاپ قرار بدین. چرا اینجوری نمیشه؟
یکم در موردش فکر کن ... نمیشه چون این تابع API وظیفه نداره برات عکس رو به Bitmap تبدیل کنه ، وقتی به صورت دستی عکس Jpg رو قرار میدید خود ویندوز به Bitmap تغییر فرمت میدش و در پوشه خاصی ذخیره میکنش و بعد ازش به عنوان تصویر زمینه استفاده میکنه !


Uses
Jpeg;

procedure JPEG2BMP(const SourceFile, DestFile: string);
var
Source: TJPEGImage;
Dest: TBitmap;
begin
Source := TJPEGImage.Create;
Dest := TBitmap.Create;
try
Source.LoadFromFile(SourceFile);
Dest.Assign(Source);
Dest.SaveToFile(DestFile);
finally
Source.Free;
Dest.Free;
end;
end;