تشخیص نوع ویندوز

sogoli

Active Member
ایا میشه با mmb نوع ویندوز کاربر (منظورم 64 بیت بودن یا 32 بیت بودن ) را تشخیص داد؟
 

the_king

مدیرکل انجمن
ایا میشه با mmb نوع ویندوز کاربر (منظورم 64 بیت بودن یا 32 بیت بودن ) را تشخیص داد؟

از خیلی راه ها میشه تشخیص داد، اما فکر کنم برای 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
 

sogoli

Active Member
قبل از اینکه دستوری رو که گفتید،اجرا کنم سوالی داشتم.فرض کنید من با دستورات شما برنامه ایی رو نوشتم .ایا برنامه کامپایل شده توسط mmb در ویندوزهای 64 بیتی اجرامی شه؟درواقع اگر اجرا نشه مراحل فوق بی فایده هست؟
 

the_king

مدیرکل انجمن
قبل از اینکه دستوری رو که گفتید،اجرا کنم سوالی داشتم.فرض کنید من با دستورات شما برنامه ایی رو نوشتم .ایا برنامه کامپایل شده توسط mmb در ویندوزهای 64 بیتی اجرامی شه؟درواقع اگر اجرا نشه مراحل فوق بی فایده هست؟

اغلب برنامه هایی که در ویندوز های 64 بیتی اجرا می شوند خودشون 32 بیتی اند، برنامه هایی که با MMB
نوشته شده اند هم مثل سایر برنامه های 32 بیتی اجرا خواهد شد، اما سازگاری MMB با ویندوز های 64 بیتی
صد در صد نیست :

سیاه شدن صفحه هنگام مینیمایز در windows 7

نشون داده نشدن فرم طراحی mmb توی ویندوز 7

ایراد MMB در vista 64 bit
 

im110

Member
با Shell32.dll چطور میشه 32بیت بودن یا 64بیت بودن ویندوزو پیدا کرد ؟ از سریق رجیستری پیدا کردم ولی بدردم نخورد چون تو Server 2008 R2 کار نکرد . ولی با Shell32.dll میشه . ولی چطورشو نمیدونم . یعنی نمیدونم از تو Shell چطور مقداره processorArchitecture برگردونم . میشه لطفا راهنمایی کنید ؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
برای ارتباط با سایر DLLها پلاگینی وجود داره بنام MMBDLL که متاسفانه رایگان نیست و هربار یک پیغام مبنی بر رجیستر نشدن نمایش میده.
میتونید از برنامه های جانبی هم استفاده کنید، مثلاً AutoIt توانایی انجام اینکار رو داره
ساخت پلاگینش هم سخت نیست (چون زبانهای دیگه این قابلیت رو دارن - یک تابع ساده که تابع موردنظر در اون فایل DLL رو فراخوانی کنه و نتیجه ش رو بگیره، یک پلاگین ساده)
 

im110

Member
خوب اسکرسپتایی مثل : Run("rundll32.exe","shell32.dll,Control_RunDLL desk.cpl,@0,3")
که قابلیت فراخونی پنجرهای ویندوزو دارن نمیشه برای برگردوندن مقدار ProcessorArchitecture استفاده کرد ؟
 

the_king

مدیرکل انجمن
خوب اسکرسپتایی مثل : Run("rundll32.exe","shell32.dll,Control_RunDLL desk.cpl,@0,3")
که قابلیت فراخونی پنجرهای ویندوزو دارن نمیشه برای برگردوندن مقدار ProcessorArchitecture استفاده کرد ؟

برگردوندن تو چی؟ تابع که نیستند، برنامه اند، فوقش یک پنجره رو نشون کاربر می دهند. MMB که نمی تونه
بدون پلاگین از توابع API مستقیما مقداری دریافت کنه.
اصولا چند روش مرسوم برای تشخیص دادن 32 بیتی و 64 بیتی بودن سیستم وجود داره که جز اون روش استفاده از
متغیر های Environment سیستم بقیه شون به دلیل محدودیت های MMB قابل اجرا نیستند.
 

im110

Member
برگردوندن تو چی؟ تابع که نیستند، برنامه اند، فوقش یک پنجره رو نشون کاربر می دهند. MMB که نمی تونه
بدون پلاگین از توابع API مستقیما مقداری دریافت کنه.
اصولا چند روش مرسوم برای تشخیص دادن 32 بیتی و 64 بیتی بودن سیستم وجود داره که جز اون روش استفاده از
متغیر های Environment سیستم بقیه شون به دلیل محدودیت های MMB قابل اجرا نیستند.


اهااااااااا
م 30
البته اون روشی که بالا گفتیدو استفاده کردم جواب داد ولی برای محکم تر شدن پروژم میخواست از Shell استفاده کنم .

راستی یه سوال دیگه . از بانک sql چطور میشه با mmb اطلاعات استخراج کرد
میشه sintax اسکریپتشو برام بگین ؟
 

im110

Member
دوتا باتون داریم میخوایم وقتی اولیو میزنیم یه عکسی رو صفحه اجرا شه و وقتی دومی رو میزنیم اولی پاک و دومی به جاش اجراشه . میشه راهنمایی کنین ؟
 

evil_gates

اين نيز بگذرد ...
دوتا باتون داریم میخوایم وقتی اولیو میزنیم یه عکسی رو صفحه اجرا شه و وقتی دومی رو میزنیم اولی پاک و دومی به جاش اجراشه . میشه راهنمایی کنین ؟

دوست عزيز
توصيه ميكنم قوانين سايت رو با دقت بيشتري مطالعه كنيد و اگه سوالات متنوعي داريد بهتره قبل از مطرح كردن سوال اول جستجو كنيد و در صورتي كه به پاسخ نرسيديد يك تاپيك جداگانه براي سوالتون بسازيد.

مطرح كردن همه سوالات در يك تاپيك خلاف قوانين انجمن هست

اما در مورد سوالتون عرض ميكنم ميتونيد با استفاده از دستور ReplaceImage در يك شي Bitmap تصوير موردنظر رو نمايش بديد.

مثلا:

کد:
path$ = 'x:\pic1.jpg'
ReplaceImage("Bitmap","path$")

موفق باشيد
 

Singular

Active Member
از خیلی راه ها میشه تشخیص داد، اما فکر کنم برای 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





سلام..این کد درست عمل میکند..اما وقتی برنامه را کامپایل میبکنم ...... این کد ب درستی عمل نمیکند...و تشخیص اشتباه میده....دلیل چی هست؟؟؟


(در جریان قدیمی بودن پست هستم.)
 

Singular

Active Member
دوستان پلاگین نویس... کسی هست پلاگین تشخیص نوع ویندوزز....تشخیص نوع 32 بیتی 64 بیتی بنویسه؟؟؟؟

آخ از طریق mmb دقیق نیست...همش نقص داره..یبار درست انجام میده ...یبار غلط


یکی یه کمک خوب در این زیمنه بکنه.و.... قبلا هم همچین مشکلی داشتم

ممنون
 

MahmoodM30

مدیر <A href="http://forum.majidonline.com/forums/
شما این نمونه رو چک کنید با استفاده از ریجستری ساختم

رو دو تا سیستم با ویندوز های 32 بیتی و 64 بیتی چک کنید ببنید درست کار میکنه؟
 

پیوست ها

  • media1.rar
    8 کیلوبایت · بازدیدها: 17

Singular

Active Member
شما این نمونه رو چک کنید با استفاده از ریجستری ساختم

رو دو تا سیستم با ویندوز های 32 بیتی و 64 بیتی چک کنید ببنید درست کار میکنه؟


سلام با تشکر از شما...
ولی متاسفانه جواب نداد

فکر کنم دلیل بر این باشه که برنامه میگه اگر X86 باشه بگه 32 در غیر این صورت 64.... یعنی هوشمند نیست که اگر در سیستم های مختلف مثلا باشه X86 intel .... باز هم تشخیص بده در واقع از تابع POS استفاده کنه اگر اشتباه نکنم

در سیتم من آدرس مربوطه این اسم نوشته x86 Family 6 Model 23 Stepping 10


نکته بعدی اینکه..من میخوام از 32 و 64 بیتی ویندوزم با خبر بشم...نه سخت افزار م که چند بیتی رو ساپورت میکنه.
 

Singular

Active Member
کد فکر کنم اشتباه نوشتید


**"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

کد به این شکل ویرایش کردم..درست جواب داد ..تو 32 بیتی تست کردم

نکته بعدی اینکه..من میخوام از 32 و 64 بیتی ویندوزم با خبر بشم...نه سخت افزار م که چند بیتی رو ساپورت میکنه.

و اینکه.... توی کد فرق If (pos>0) Then با If (pos=1) Then چیه؟؟؟/
 

محمدمهدی

Well-Known Member
فرید جان توی راهنمای ام ام بی نوشته POS چی خروجی میده.
توی نتیجه فرقی ندارن اما توی منطق فرقشون اینه که POS عدد مکان اولین حرف کاراکتر مورد جستجوی موجود در متغیر رو میده و اگر اصلا وجود نداشته باشه مقدارش رو صفر بر می گردونه.
پس یعنی اگر pos بزرگتر از صفر باشه حتما اون کاراکتر موجود هست. اما اگر بگی فقط pos مساوی 1 باشه یعنی فقط وقتی کاراکتر مد نظرت توی اولین حرف متغیر پیدا شد.
 

Singular

Active Member
سلام با تشکر از محمد جان عزیز

متوجه شدم
پس استفاده از دستور pos>0 بهتر است دگ ..در زمینه جست و جو و....





در زمینه 32 و 64 بیتی ..منتظر جواب دوستان هستم... که آیا این روش 32 یا 64 بیتی ویندوز نشون میده یا 32 64 بیتی سخت افزار کامپیوتر که تا چ بیتی ساپورت میکند رو..؟؟؟
 

MahmoodM30

مدیر <A href="http://forum.majidonline.com/forums/
بهترین کار این هست که تو گوگل سرچ بکنید و موارد رو تست کنید درضمن اگه نمونه ای با دلفی پیدا کردید میتونم با استفاده از اون پلاگینش رو بنویسم که تو بیلدر استفاده کنید
 

جدیدترین ارسال ها

بالا