-
دوشنبه, ۶ ارديبهشت ۱۴۰۰، ۰۱:۴۸ ق.ظ
-
۱۴۸۳
![](http://bayanbox.ir/view/1591064609745459303/wallpaper-changer-pic-1.jpg)
سلام دوستان :)
امروز قراره با هم نحوه ساخت یک اسکریپت برای تغییر پس زمینه با پایتون رو ببینیم
خب چون روش خاصی برای اینکار توی پایتون وجود نداره پس ما میتونیم از Windows API کمک بگیریم
Windows API چیه ؟ Windows API در اصل کلاس ها و متد های آماده ای هست که خود مایکروسافت اونا رو در اختیار برنامه نویس ها قرار داده تا بتونن از اونا برای کنترل و انجام دادن انواع فعالیت ها در زبان های برنامه نویسی مختلف در ویندوز استفاده کنن.
windows API تابعی داره به اسم SystemParametersInfoA که به وسیله ی اون میتونیم تنظیمات مختلف یک یوزر از جمله تصویر پس زمینه شو تغییر بدیم .
خب برای استفاده از Windows API در پایتون میتونیم از کتابخونه ctypes استتفاده کنیم که بطور پیشفرض روی پایتون نصب هست.
بریم برای نوشتن اسکریپت
سورس کد:
from ctypes import * picture = "C:\\Users\\Farbod\\Desktop\\wallpaper.jpg".encode() windll.user32.SystemParametersInfoA(20 , 0 , c_char_p(picture) , 0)
خب اول ماژول ctypes رو import کردیم. بعدش متغییری به نام picture درست کردیم و آدرس عکسمون رو از string تبدیل به byte کردیم و داخلش ریختیم.
بعد از اون از تابع SystemParametersInfoA استفاده کردیم. توی ورودی اول عدد 20 رو دادیم یعنی میخوایم عکس پس زمینه رو عوض کنیم ورودی دوم رو 0 دادیم و ورودی سوم رو آدرس عکس رو دادیم ورودی چهارم هم صفر گذاشتیم.
فقط یک نکته خیلی مهم اینکه آدرسی که داخل متغییر picture میزارید باید حتما مطلق باشه. مطلق یعنی آدرس کامل باشه یعنی حتی اگر عکستون کنار اسکریپتتون هم بود باید آدرس کامل رو بدید. همونطوری که توی کد بالا میبینین من از درایو C آدرس دادم تا رسیدم به عکس wallpaper.jpg .
خب این اسکریپت اصل کار رو انجام میده میتونیم با استفاده از اسکریپت بالا یک کار باحال بکنیم.
اسکریپت زیر رو ببینید:
from ctypes import * from time import sleep wall1 = "C:\\Users\\Farbod\Desktop\\wallpaper1.jpg".encode() wall2 = "C:\\Users\\Farbod\\Desktop\\wallpaper2.jpg".encode() wall3 = "C:\\Users\\Farbod\\Desktop\\wallpaper3.jpg".encode() while True: windll.user32.SystemParametersInfoA(20 , 0 , c_char_p(wall1),0) sleep(2) windll.user32.SystemParametersInfoA(20 , 0 , c_char_p(wall2),0) sleep(2) windll.user32.SystemParametersInfoA(20 , 0 , c_char_p(wall3),0) sleep(2)
توی اسکریپت بالا اول متد sleep رو از ماژول time ایمپورت کردیم و بعدش ماژول ctypes رو برای استفاده از Windows API
بعدش سه تا آدرس عکس دادیم برای عوض کردن عکس ها بین اونا
بعدش حلقه بینهایت نوشتیم که هر 2 ثانیه تصویر رو عوض میکنه
همینطور که در GIF زیر میبینید تصویر هر دو ثانیه عوض میشه