امروز قصد دارم در مورد API های ویندوز و چگونگی استفاده از آنها در ویژوال بیسیک بطور خلاصه توضیح دهم و همچنین دو مثال پراستفاده را نیز در این زمینه بیان کنم که عبارتند از چگونگی پخش فایلهای Wav و ساخت یک تایمر با دقت بالا :
۱ – آشنایی با Windows API : واژه API مخفف Application Programming Interface می باشد . API های ویندوز مجموعه ای از توابع از پیش آماده موجود در سیستم عامل هستند که شما می توانید آنها را در برنامه های خود فراخوانی کنید . این توابع در چندین کتابخانه DLL ویندوز ذخیره شده اند . برای دسترسی به این توابع در ویژوال بیسیک ابتدا باید آنها را برنامه خود declare کنید . برای مثال :
Declare Function sndPlaySound Lib “winmm.dll” Alias “sndPlaySoundA” (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
همانطور که می بینید مثال فوق یک Declare از تابع sndPlaySound می باشد که این تابع در کتابخانه Winmm.dll موجود است . کلمه Alias نشان می دهد که این تابع نام دیگری در dll دارد . سایر بخشها مربوط به تعریف پارامترهای تابع می باشند که در مورد مثال فوق ، این تابع دو پارامتر ورودی و یک خروجی از نوع Long دارد .
پس از Delare کردن API در برنامه می توانید از آن استفاده نمائید .
۲ – پخش فایلهای Wav : تابعی که برای پخش فایلهای Wav استفاده می شود تابع sndPlaySound است که در بالا با آن آشنا شدید . پارامتر lpzSoundName نام و مسیر فایل Wavو پارامتر uFlags چگونگی پخش فایل را مشخص می کند . مقادیر ممکن این پارامتر عبارتند از :
- SND_ASYNC : اجازه می دهد طوری فایل Wav پخش شود که آنرا بتوان وقفه داد . بعبارت دیگر قادر خواهید بود فایل Wav تان را هر زمان که بخواهید پخش کنید و مطمئن باشید که حتماً شنیده می شود .
- SND_LOOP : فایل Wav را بطور ممتد پخش می کند .
- SND_NODEFAULT : اگر فایل Wav پیدا نشود صدای دیگری پخش نخواهد شد ( مثلاً برخی صداهای default ویندوز )
- SND_SYNC : در طول پخش فایل Wav کنترل به برنامه داده نمی شود . این پارامتر در زمانیکه می خواهید فایل Wav ای را در پس زمینه برنامه تان پخش کنید مناسب نمی باشد .
- SND_NOSTOP : اگر فایل Wav ای قبلاً در حال پخش باشد ، فایل Wav شما آنرا دچار وقفه نمی کند . از این پارامتر زمانی استفاده می شود که بخواهیم فایل Wav مان هیچوقت در وسط کار قطع نشود .
اگر بخواهید از بیش از یکی از این پارامترها استفاده کنید توسط Or آنها را ترکیب نمائید مثال :
sndPlaySound App.path & “\ding.wav”, SND_ASYNC or SND_LOOP
نکته : برای استفاده از توابع صوتی پیچیده تر بایستی از DirectSound که یکی از اجزای DirectX می باشد استفاده کنید . در مورد DirectSound بعداً صحبت خواهم کرد .
۳ – ساخت یک تایمر با دقت بالا : شاید تا بحال از کنترل تایمر موجود در نوار ابزار ویژوال بیسیک استفاده کرده باشید . این تایمر دارای دقت حدود ۵۵ میلی ثانیه است . برای دستیابی به زمانهای با دقت بالاتر این کنترل مفید نخواهد بود .
تابع GetTickCount یک API موجود در کتابخانه Kernel32.dll است . این تابع طول زمانی را که سیستم شروع به کار کرده است را برحسب میلی ثانیه برمی گرداند :
Private Declare Function GetTickCount Lib “kernel32″ () As Long
برای بررسی طی شدن یک مدت زمانی خاص شما ابتدا باید مقدار این تابع را در یک متغیر کمکی مثل TempTime قرار دهید سپس در یک حلقه Do-Loop باید اختلاف زمان GetTickCount جدید و زمان TempTime را با مقدار زمانی که می خواهید سپری شود مقایسه کنید :
TempTime = GetTickCount()x
Do While DesiredTime < GetTickCount() – TempTime
Do some things’
Loop
توسط کد بالا می توان یک عملیات خاص را برای یک مدت زمانی مشخص اجرا کرد .
کد زیر نشان می دهد که چگونه می توان دستورات خاصی را در فواصل زمانی خاص اجرار کرد :
ExitFunction = False
TempTime = GetTickCount()x
Do While not(ExitFunction)x
If DesiredTime < GetTickCount() – TempTime then
Reset the temporary variable’
TempTime = GetTickCount()x
Do some things’
End If
Loop
همچنین از تابع GetTickCount می توان برای benchmark برنامه ها استفاده کرد . بعبارت دیگر می توان زمان اجرای یکسری دستورات خاص را بدست آورد
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن