جناب آقای Mask از توجهتون ممنونم
من یه برنامه نوشتم که توی اتوران اجرا میشه و در قسمتی از برنامه کدهای زیر رو نوشتم :
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.KeyExists('\Software\Microsoft\Windows\Current Version\Policies\Explorer\')=False then
begin
ShellExecute(Handle, 'runas', '.\CReg.exe', nil, nil, SW_SHOWNORMAL);
end
else
begin
Loop:=Reg.ReadInteger('NoDriveTypeAutoRun');
if Loop<>4 then ShellExecute(Handle, 'runas', '.\CReg.exe', nil, nil, SW_SHOWNORMAL);
end;
همونطور که میبینید در خط سوم کدبالا من شرطی رو گذاشتم که در صورت عدم وجود کلید رجیستری یه برنامه جانبی اجرا بشه و در غیر این صورت اگر کلید مورد نظر وجود داشت ، متغیر Loop رو مساوی Value مربوطه کنه و بعد چک کنه که اگر Value مخالف عدد 4 بود باز اون نرم افزار جانبی اجرا بشه .
کار اون نرم افزار جانبی اینه که اگر کلید یا Value بالا وجود نداشته باشه یا مغایر 4 باشه اون رو تغییر بده .
حالا مشکل من اینه که خط سوم کد بالا زمانی که برنامه به صورت نرمال اجرا میشه چه کلید وجود داشته باشه چه نداشته باشه مقدار False رو برمیگردونه و باقی قضایا ، و اگر برنامم رو در حالت ادمین اجرا کنم این دستور درست عمل میکنه .
توی آدرسی که شما فرستادین و قبلاً مطالعش کرده بودم ، بررسی انجام میشه که UAC ویندوز فعال هست یا نه ؟ البته همون بررسی هم اگر برنامه در حالت نرمال اجرا بشه جواب غلط برمیگردونه !
به نظر شما مشکلم رو چطور میتونم حل کنم ؟
البته این توضیح رو بدم که برنامه اصلی رو بدلیل اینکه توی اتوران اجرا میشه نمیخوام در حالت ادمین اجرا کنم و همچنین نمیخوام UAC ویندوز رو غیر فعال کنم .
ممنون از توجه شما