ایا میشه با mmb نوع ویندوز کاربر (منظورم 64 بیت بودن یا 32 بیت بودن ) را تشخیص داد؟
echo %PROGRAMFILES(X86)%
env$ = '%PROGRAMFILES(X86)%'
file$ = 'value.txt'
cmd$ = '<System>\cmd.exe'
arg$ = 'HIDE,WAIT /C echo ' + env$
arg$ = arg$ + ' > "%TEMP%\\' + file$ + '"'
Run("cmd$","arg$")
path$ = '<Temp>\\' + file$
LoadText("value$","FILE:path$")
count = LEN(env$)
value$ = StrCopy(value$,1,count)
If (value$ = env$) Then
Message("32-bit","")
Else
Message("64-bit","")
End
قبل از اینکه دستوری رو که گفتید،اجرا کنم سوالی داشتم.فرض کنید من با دستورات شما برنامه ایی رو نوشتم .ایا برنامه کامپایل شده توسط mmb در ویندوزهای 64 بیتی اجرامی شه؟درواقع اگر اجرا نشه مراحل فوق بی فایده هست؟
خوب اسکرسپتایی مثل : Run("rundll32.exe","shell32.dll,Control_RunDLL desk.cpl,@0,3")
که قابلیت فراخونی پنجرهای ویندوزو دارن نمیشه برای برگردوندن مقدار ProcessorArchitecture استفاده کرد ؟
برگردوندن تو چی؟ تابع که نیستند، برنامه اند، فوقش یک پنجره رو نشون کاربر می دهند. MMB که نمی تونه
بدون پلاگین از توابع API مستقیما مقداری دریافت کنه.
اصولا چند روش مرسوم برای تشخیص دادن 32 بیتی و 64 بیتی بودن سیستم وجود داره که جز اون روش استفاده از
متغیر های Environment سیستم بقیه شون به دلیل محدودیت های MMB قابل اجرا نیستند.
دوتا باتون داریم میخوایم وقتی اولیو میزنیم یه عکسی رو صفحه اجرا شه و وقتی دومی رو میزنیم اولی پاک و دومی به جاش اجراشه . میشه راهنمایی کنین ؟
path$ = 'x:\pic1.jpg'
ReplaceImage("Bitmap","path$")
از خیلی راه ها میشه تشخیص داد، اما فکر کنم برای MMB بدون پلاگین استفاده از متغیر های Environment ساده تر باشه،
توی ویندوز های 32 بیتی متغیر (PROGRAMFILES(X86 تعریف نشده به همین جهت دستور زیر در Command Prompt
اسم خود متغیر تعریف نشده رو بدون تغییر نشون میده :
کد:echo %PROGRAMFILES(X86)%
اما در ویندوز های 64 بیتی متغیر (PROGRAMFILES(X86 مسیر Program Files برنامه های 32 بیتی است، مثلا
مسیر شبیه به (C:\Program Files (x86 به همین دلیل دستور قبلی مسیر مورد نظر رو نشون میده، نه اسم متغیر رو.
با استفاده از تفاوت این دو وضعیت میشه تشخیص داد ویندوز 32 بیتی است یا 64 بیتی :
کد:env$ = '%PROGRAMFILES(X86)%' file$ = 'value.txt' cmd$ = '<System>\cmd.exe' arg$ = 'HIDE,WAIT /C echo ' + env$ arg$ = arg$ + ' > "%TEMP%\\' + file$ + '"' Run("cmd$","arg$") path$ = '<Temp>\\' + file$ LoadText("value$","FILE:path$") count = LEN(env$) value$ = StrCopy(value$,1,count) If (value$ = env$) Then Message("32-bit","") Else Message("64-bit","") End
شما این نمونه رو چک کنید با استفاده از ریجستری ساختم
رو دو تا سیستم با ویندوز های 32 بیتی و 64 بیتی چک کنید ببنید درست کار میکنه؟
**"Registry operations 1.0" by Mahmood Hoseini ( MahmoodM30 )
***********************
Path$='HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0,Identifier'
PluginSet("PlugIn","Path$")
PluginRun("PlugIn","SetRegistryPath")
PluginRun("PlugIn","RegistryRead")
PluginGet("PlugIn","RetVal$")
lov$=UPP(RetVal$)
string$='X86'
pos=POS(string$,lov$)
If (pos>0) Then
MessageEx("","32Bit")
Else
MessageEx("","64Bit")
End