دوست عزیز
اشتباه شما اینه که سعی میکنید یک متغیر رشته ای حاوی متنی رو با تابع VAL تبدیل به یک متغیر عددی کنید و بعد هم یک شرط اشتباه رو مینویسید. در واقع کدی که تو پست های قبلی پیشنهاد شده بدون تغییرات لازم نمیتونه مشکل شما رو رفع کنه و قاعدتا با این روش نباید هم برنامه شما به درستی کار کنه.
اگه منابع آموزشی که معرفی کردم رو با دقت مطالعه کرده باشید حتما به این نکته رسیدید که نمیشه هر متنی رو با تابع VAL به عدد تبدیل کرد.
متاسفانه چون فعلا دسترسی ندارم تا نمونه بسازم براتون، اجازه بدید مراحل رو خط به خط تشریح کنم شاید بهتر تونستم منظورم رو برسونم.
ما در زمان نصب برنامه یک کلید در رجیستری ایجاد میکنیم که حاوی یک مقدار هست درسته؟
این مقدار چیه؟ طبق تصویری که من از رجیستری شما دیدم این کلید حاوی یک متغیر رشته ای هست که آدرس محل نصب برنامه رو داره.
خب حالا به دو روشی که تو پست اول گفتم با استفاده از این اطلاعات میشه فهمید که برنامه یا همون بازی شما به درستی نصب هست یا نه
1- اینکه ما با استفاده از این آدرس و دستور FileExist در این مسیر بگردیم و فایل اجرایی بازی رو ببینیم که در صورت وجود فایل شرط شما صحیح و دکمه play نمایش داده میشه.
2- با استفاده از روشی که تو چند تا پست قبلی طی می کردیم مقدار کلید رو برگردونیم و با شرط خودمون مقایسه کنیم که در صورت صحت دکمه play نمایش داده میشه.
اول باید مقدار ذخیره شده در رجیستری رو بخونیم. از اونجایی که میدونیم کلید ما متغیری از نوع متن خواهد بود. برای اینکار با پلاگین این مقدار رو تو یک متغیر رشته ای بر میگردونیم.
کد:
regpath$='HKEY_LOCAL_MACHINE\Software\Firefly Studios\Stronghold Crusader\1.00.0000\Stronghold Crusader'
PluginSet("PlugIn","regpath$")
PluginRun("PlugIn","RegistryRead")
PluginGet("PlugIn","get$")
مقدار موجود در متغیر $get همون متغیر رشته ای ماست که حاوی آدرس محل نصب بازی هست.
خب حالا برای روش اول باید با دستور FileExist و یک شرط وجود فایل رو مسیر مقصد چک کنیم.
با فرض اینکه نام فایل اجرایی بازی شما game.exe هست این کد رو استفاده میکنیم.
کد:
path$=get$+'game.exe'
FileExist("path$","x")
If (x=1) Then
Show("play")
Hide("install")
*** or any commands
Else
Hide("play")
Show("install")
*** or any commands
End
تو کد بالا وجود فایل اجرایی game.exe در مسیر مورد نظر ما که همون مقدار $get هست جستجو میشه و نتیجه به در یک متغیر عددی به نام x بر میگرده.
اگه فایل وجود داشته باشه مقدار x برای یک خواهد بود. و اگه فایل وجود نداشته باشه مقدار x صفر خواهد شد.
پس طبق شرط ما اگه x=1 دکمه play نمایش داده میشه و اگه غیر از این بود دکمه play مخفی میشه و یا هر فرمان دیگه ای که مدنظر شماست اجرا میشه.
اما برای روش دوم: وقتی شما بازی رو نصب میکنید کلیدی هم تو رجیستری ساخته میشه. پس اگه کاربر برنامه رو نصب نکرده باشه قاعدتا کلیدی هم ساخته نمیشه.
پس میشه فقط با یک شرط چک کرد که آیا کلیدی حاوی مقدار مورد نظر تو رجیستری وجود داره یا نه که اگه وجود داره پس نتیجه میگیریم که بازی نصبه و باید دکمه play نمایش داده بشه و اگه وجود نداره نتیجه میگیریم بازی هم نصب نیست و نباید دکمه Play نمایش داده بشه.
کد:
regpath$='HKEY_LOCAL_MACHINE\Software\Firefly Studios\Stronghold Crusader\1.00.0000\Stronghold Crusader'
PluginSet("PlugIn","regpath$")
PluginRun("PlugIn","RegistryRead")
PluginGet("PlugIn","get$")
If (get$<>'') Then
Show("play")
Hide("install")
*** or any commands
Else
Hide(("play")
Show("install")
*** or any commands
End
تو کد بالا فقط چک میشه که در متغیر $get مقداری وجود داره یا نه. در صورتی که این متغیر خالی نباشه یعنی ' '<>$get پس نتیجه میگیریم که بازی نصب شده و میشه دکمه play رو نمایش داد.
دوست من سعی کنید کمی به مراحل کار و راهنمایی ها فکر کنید. صرفا استفاده از کدی که بنده یا دوستان پیشنهاد میدن که نمیتونه نیاز شما رو برای حل مسئله برآورده کنه اگه خودتون نسبت به اون کدها آشنایی و درک کافی نداشته باشید.
------------------------------------------------
دوستان دیگه هم اگه دسترسی دارن لطف کنن و یک مثال برای دوستمون بزارن من فعلا نمیتونم مثال بسازم. ممنون
موفق باشید.