اجرا شدن اسکریپت پایتون هنگام روشن شدن رایانه

سلام به همگی!!

امروز اومدیم با یه اسکریپت باحال و در برخی موارد خطرناک⛔(ما از ازش استفاده خطرناک نمی کنیم!)

میخوایم یه کاری کنیم که زمانی که ویندوز بالا اومد این اسکریپتمون هم اجرا بشه یعنی خودش روش دابل کلیک کنه!!(توجه کنین در حالت های sleep و hibernate کار نمی کنه)

خب بگذریم...

برای اینکار دو راه هست:

1-استفاده از پوشه Startup

2-استفاده از Registry ویندوز

روش اول ساده تر هست اما روش دوم باید با رجیستری آشنا باشین!

قطعا راه سخت تر مطمئن تره!

چون فکر کنم آدرس پوشه Startup در ویندوز های مختلف تفاوت داره و اینجوری شاید به هدفتون نرسین!



مرحله اول(هدف):

هدفمون اینه یه اسکریپتی بنویسیم که وقتی ویندوز بالا اومد یه بوق ممتد بزنه!

برای زدن بوق هم به تابع Beep نیاز داریم که از winsound میاریمش داخل برنامه!

from winsound import Beep

مرحله دوم(نوشتن اسکریپت بوق زدن):

خب این تابع Beep دو تا ورودی میگیره:

1-فرکانسش(بین 37 تا 32767 هرتز)

2-زمانش(بر حسب میلی ثانیه)

خب میگیم در زمان 30 ثانیه یعنی 30000 میلی ثانیه یه صدایی با فرکانس 1500 رو پخش کن!

این شکلی:

from winsound import Beep
Beep(1500, 30000)

مرحله سوم(استفاده از روش اول):

خب در ویندوز یه پوشه ای هست به نام Startup که هر چی اونجا باشه رو خودکار باز می کنه!

انگار داره روشون دابل کلیک می کنه!

پس ما باید بیایم فایلمون رو بندازیم توی این پوشه!

برای پیدا کردن این پوشه دکمه های Windows+R رو بگیرین و در پنجره ای که باز میشه عبارت shell:startup رو بزنین و ok:

آدرس این پوشه در ویندوز های جدید معمولا اینه:

C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

اینجا ویندوز در درایو C نصب شده و به جای USERNAME هم نام کاربری خودتون رو قرار میدین!

خب ما باید فایلمون رو در این پوشه قرار بدیم یعنی کپی کنیم در این پوشه || چجوری؟

با shutil

import shutil

کتابخونه های دیگری برای کپی هستن ولی ما از همین shutil استفاده می کنیم!

و برای گرفتن نام کاربری مخاطب از تابع getuser استفاده می کنیم:

from getpass import getuser

خب بریم برای کپی:

username = getuser()
startup = f&quotC:/Users/{username}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup&quot
shutil.copy(__file__, startup)

خب در خط اول اومدیم نام کاربری رو گرفتیم!

بعدش آدرس پوشه Startup رو ریختیم در متغیر startup

اینجا از f string استفاده کردیم!

در خط آخر هم از تابع copy در کتابخونه shutil استفاده کردیم.

در ورودی اول ادرس فایل جاری رو دادیم!

جناب __file__ زحمت دادن آدرس این این فایل رو میکشن و نیاز نیست با کارای دیگه خودمون آدرس فایل جاری رو بگیریم!

در ورودی بعدی هم آدرس پوشه ای که فایل میخواد بره اون جا رو دادیم!

الان شما هر وقت رایانه رو روشن کنین این صدای آزار دهنده رو میشنوید!

{{درسته این کد ضرر نرم افزاری نداره یعنی مثلا فایلی حذف نمی کنه یا ... ولی مخاطب وقتی بخواد 30 ثانیه این صدای داغون کننده رو تحمل کنه میزنه کل رایانه رو داغون میکنه تا قطع شه!?}}

و کد نهایی این قسمت میشه این:

from getpass import getuser
import shutil
from winsound import Beep

username = getuser()
startup = f&quotC:/Users/{username}/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup&quot
shutil.copy(__file__, startup)
Beep(1500, 30000)

مرحله چهارم(استفاده از روش دوم):

خب این روش نیاز داره که درباره رجیستری ویندوز بدونین!

رجیستری یه پایگاه داده برای سیستم عامله!

همه کانفیگ ها، تنظیمات، پسورد ها و ...... همه و همه اینجا هستن(از گنجم با ارزش تره)

رجیستری بر اساس معماری Key/Value کار میکنه!

یعنی چند کلید داره مثل چندین پوشه که توی دیسک هستن و هر کلید چند مقدار داره مثل فایل هایی که داخل پوشه هستن!

باحال شد ! نه؟

{{میخوام بخونم}}

خب توی این دنیای رجیستری کلیدی هست با آدرس :

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

که هر مقداری توش اضافه کنیم با سطح دسترسی administrator اجرا میشه!

پس ما باید یک مقدار در این کلید بسازیم و فایلمون رو بذاریم اونجا!

برای اینکار به کتابخونه winreg نیاز داریم!

import winreg as reg

و بریم سراغ گذاشتن فایلمون در این کلید:

key = reg.OpenKey(reg.HKEY_CURRENT_USER, &quotSoftware\Microsoft\Windows\CurrentVersion\Run&quot, 0, reg.KEY_ALL_ACCESS)
reg.SetValueEx(key ,&quotfile&quot , 0 , reg.REG_SZ , __file__)
reg.CloseKey(key)

خب این کدها برای کتابخونه winreg و رجیستری هست که برای خوندن درباره winreg بزنین اینجا!

ولی اگه بخوام کلی توضیح بدم در خط اول کلید رو باز کردیم!

بعدش گفتیم یه مقدار رو ست کن با اسم file و دیتای آدرس فایلمون!

و در نهایت هم ببند!

و اگه الان برین در منوی استارت جستجو کنین:

Registry Editor

و بازش کنین میتونین تمامی رجیستری و دیگه کُلُّهُم اَجمَعین ویندوز رو ببینین!

در نوار بالا آدرس کلید موردنظر رو وارد کنین و در سمت راست می تونین لیست مقدار هاش رو ببینین

ما اینجا اومدیم یک مقدار با نام file ساختیم پس اگه آدرس کلیدمون رو بزنیم باید file رو ببینیم!

کد نهایی این روش:

import winreg as reg
from winsound import Beep

key = reg.OpenKey(reg.HKEY_CURRENT_USER, &quotSoftware\Microsoft\Windows\CurrentVersion\Run&quot, 0, reg.KEY_ALL_ACCESS)
reg.SetValueEx(key ,&quotfile&quot , 0 , reg.REG_SZ , __file__)
reg.CloseKey(key)

Beep(1500, 30000)

خب اگه شما یک بار این اسکریپت ها رو اجرا کنین فایل میره در قسمت موردنظر و بعد از بالا آومدن ویندوز اجرا میشن!

شاید برای این اسکریپت ذهنمون بره سمت ویروس نویسی و اسکریپت های مخرب اما میشه از این قابلیت استفاده های درست هم کرد!

خب امیدوارم براتون مفید باشه!

تا کُدی دیگر خدانگهدار :)