بعضی وقت ها نیازمند این هستیم که بدونیم برناممون دسترسی ادمین داره یا خیر و نسبت به اون اقدام کنیم (در بد افزار ها مثلا اکسپلویت و در برنامه ها گرفتن دسترسی و...)
برای اینکار باید از کتابخونه ی ctypes معروف استفاده کنیم:)
ابتدا کتابخونه ی shell32 رو به برناممون اضافه میکنیم و توی متغیر S32 میریزیم :
import ctypes
S32 = ctypes.windll.LoadLibrary('shell32.dll')
سپس میتونیم از توابع استفاده کنیم :)
تابع IsUserAnAdmin چیست؟
این تابع از مجموعه توابع لایبراری shell32 هست که درصورتی دسترسی برنامتون ادمین باشه TRUE و اگر نباشه FALSE برمیگردونه
حالا اونو توی متغیر IsAdmin میریزیم :
IsAdmin = S32.IsUserAnAdmin()
بعدش میخوایم اگر دسترسیمون ادمین نبود با دسترسی ادمین باز بشه که باید از کتابخونه ی Shell32 و تابع ShellExecute استفاده کنیم
ابتدا کتابخونه ی sys رو ایمپورت کنید (برای بدست آوردن مسیر برنامه) :
import sys
سپس :
if !IsAdmin:
S32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
توضیح آرگومان : ارگومان اول که 0 شده یک هندل هست و ما بهش نیازی نداریم پس 0 میدیم
آرگومان دوم که روش باز شدن هست (این ها رو میتونید توی MSDN و یا در پست های سی پلاس پلاس خودمون ببینید) که run as سیو شده:)
آرگومان سوم آدرس فایل هست که آدرس برنامه ی خودمونو دادیم
آرگومان چهارم که آرگومان های فایل هست و آرگومان های خودمونو بهش دادیم
آرگومان ششم هم میگه که به صورت SHOW یا همون SW_SHOW ران بشه
امیدوارم خوشتون اومده باشه
ایران همیشه سر افراز
نایس