ويندوز چيست (از نگاه برنامه نويسي و توابع API):
ويندوز يک سيستم عامل چند وظيفه اي و چند کاربره گرافيکي براي کامپيوتر هاي شخصي است.
در زمان سيستم عامل Dos کاربران درون يک محيط متني ساده ، تک کاربره و تک وظيفه اي کارهاي خود را انجام مي دادند . اما در اواسط دهه 1980 ميلادي نيازهاي جديدي پيدا شد از قبيل امکان اجراي چند برنامه همزمان ، امکان دسترسي چند کاربر ، رابط کاربري زيباتر ، مديريت کامل بر منابع و غيره. اينگونه بود که سيستم عامل Windows متولد شد.
سيستم عامل Windows به تمام نيازهاي فوق پاسخ داد اما محدوديت هايي نيز بوجود آورد مخصوصا براي برنامه نويسان سيستمي.
در محيط Dos شما مجاز به استفاده از تمام قسمت هاي حافظه بوديد. اما در Windows چنين چيزي نيست زيرا نمي توان به بخشهايي از حافظه که متعلق به برنامه ديگري است دسترسي داشت حتي نمي توان آنها را خواند. و يا استفاده از فضاي حافظه مجازي تحت نظر سيستم فايل است که اجازه هيچ گونه دسترسي مستقيم به Hard Disk را به ما نمي دهد. مورد بسيار مهم ديگر اين است که در Dos برنامه نويس مي بايست خودش با Port ها ارتباط برقرار کند اما در Windows چنين اجازه اي ندارد. و موارد بسيار زياد ديگر(مخصوصا در ارتباط با سخت افزار).
اما اينها هيچ کدام ضعف نيست بلکه نشان دهنده قدرت Windows است که اجازه نمي دهد برنامه ها در کارهاي يکديگر دخالت کنند . با وجود اين دست برنامه نويس هم براي انجام کارهاي مورد نياز بسته نيست بلکه همان ويندوزي که تمام کارها را بدست مي گيرد همان نيز امکاناتي را به برنامه نويس مي دهد تا بتواند برنامه سيستمي بنويسد . اين امکانات API (Application Programming Interface)ناميده مي شوند . در واقع API يکسري توابع استاندارد است که شرکت Microsoft داخل يکسري فايل DLL براي برنامه نويسي سيستمي قرار داده است و بيش از 1000 تابع و رويه (Procedure) مي باشد.
API را اصطلاحا قلب ويندوز مي نامند ، هر کاري که در اين سيستم عامل انجام مي شود API است يعني خود اين سيستم عامل هم براي بسياري از اعمال خويش نيز از آن استفاده مي کند. زبانهاي برنامه نويسي که تحت Windows کار مي کنند (مثل Delphi) از API استفاده مي نمايند . مثلا اگر يک متغير تعريف کنيد يک API بصورت خودکار اجرا شده و مقدار حافظه مورد نياز را به برنامه شما اختصاص مي دهد.
پس به زباني مي توان ادعا کرد که Windows مجموعه اي از توابع API است و مي توان گفت که نه تنها اين سيستم عامل ما را محدود نکرده است بلکه کار ما را ساده نموده است. مثلا اگر در Dos مجبور بوديم براي Save يک فايل ، کلي برنامه نويسي کنيم وهمه چيز را در نظر بگيريم که مثلا مبادا اطلاعاتمان روي اطلاعات ديگري Overwrite شود ، در Windows کافي است يک API را فراخواني کنيد و به همين سادگي Window تمام کارهاي مربوطه را انجام مي دهد.
در اين Topic باز هم از API و نحوه کارکردن با آن ، DLL ها ، Message ها ، DC ها و غيره در چند روز آينده صحبت خواهد شد.
امروز براي نمونه دو سه تا از API هاي ساده و کارآمد را معرفي مي کنيم. البته قبل از آن اين مطلب را بگويم که Delphi استفاده از توابع API را ساده کرده است و ما حداکثر با Use کردن يک فايل از آنها استفاده مي کنيم.
1- رويه ( Procedure ) Sleep:
با استفاده از اين رويه در اجراي برنامه مي توان وقفه اي ايجاد کرد.
شکل کلي اين رويه به صورت زير است.
- کد: انتخاب همه
Procedure Sleep(dwMilliseconds:DWord);
همانطور که پيدا است اين رويه يک ورودي از جنس DWord مي گيرد. اين ورودي عددي است که زمان توقف را بر حسب ميلي ثانيه مشخص مي کند(مثلا عدد 1000 معرف يک ثانيه است).
مثال:کد زير مقدار Progress يک ProgressBar را از 0 تا 100 درصد در طول 10 ثانيه زياد مي کند.
- کد: انتخاب همه
var
i:Byte;
begin
i:=0;
while i<100 do
begin
i:=i+10;
ProgressBar1.Position:=i;
Sleep(1000);
end;
end;
2- تابع CopyFile:
يک فايل را از محلي به محلي ديگر کپي مي کند.
شکل کلي اين تابع به صورت زير است.
- کد: انتخاب همه
Function CopyFile (lpExistingFilename, lpNewFilename:PChar, bFailIfExists:BOOL):BOOL;
پارامتر lpExistingFilename يک String(در حقيقت PChar که نوعي رشته است) است که مسير و نام فايل مبدا را مشخص مي کند.
پارامتر lpNewFilename يک String(در حقيقت PChar که نوعي رشته است) است که مسير و نام فايل مقصد را مشخص مي کند. دقت کنيد که نام فايل مقصد نيز بايد قيد شود و معمولا برابر با نام فايل مبدا گرفته مي شود.
پارامتر bFailIfExists يک مقدار منطقي(Boolean) است که اگر فايل در مقصد وجود داشت چه کاري انجام شود. اگر True بود و فايل مقصد قبلا موجود باشد کار تابع نيمه تمام مي ماند و اگر False باشد روي فايل اول Overwrite مي گردد.
خروجي تابع منطقي است و اگر کارش به درستي انجام شود، True و در غير اين صورت False است.
مثال:خط زير يک فايل را از درايو C داخل درايو D کپي مي کند و اگر فايل در مقصد وجود داشته باشد آنرا Overwrite مي کند.
- کد: انتخاب همه
CopyFile('C:\Chortke.jpg','D:\Chortke.jpg',False);
3- تابع GetDriveType :
اين تابع نوع هر يک از درايوهاي سيستم را مشخص مي کند انواعي از قبيل فلاپي ، ديسک سخت ، CDROM و غيره.
شکل کلي اين تابع به صورت زير است.
- کد: انتخاب همه
Function GetDriveType(lpRootPathName:PChar): LongWord;
پارامتر lpRootPathName يک رشته است و نام درايو مورد نظر را مشخص مي کند مثل "C:\".
خروجي اين تابع يک عدد است که مي تواند مقادير زير باشد.
DRIVE_UNKNOWN: درايوي که معرفي شده است قابل دسترسي نمي باشد. برابر با عدد 0 مي باشد.
DRIVE_NO_ROOT_DIR: درايوي که معرفي شده است وجود ندارد. برابر با عدد 1 مي باشد.
DRIVE_REMOVABLE: برابر با مقدار عددي 2 مي باشد و مشخص مي کند که ديسک درايو مورد نظر از نوع قابل حمل مي باشد.
DRIVE_FIXED: برابر با مقدار عددي 3 مي باشد ومشخص مي کند که درايو مورد نظر از نوع ثابت است.
DRIVE_REMOTE: برابر با مقدار عددي 4 مي باشد و مشخص مي کند که درايو مورد نظر از نوع درايوشبکه مي باشد.
DRIVE_CDROM: برابر با مقدار عددي 5 مي باشد و مشخص مي کند که درايو مورد نظر از نوع CD_Drive مي باشد.
DRIVE_RAMDISK: برابر با مقدار عددي 6 بوده و مشخص مي کند درايو مورد نظر از نوع درايو هاي ساخته شده در RAM مي باشد.
مثال: خط زير مشخص کننده نوع درايو C مي باشد.
- کد: انتخاب همه
if GetDriveType('C:\') = DRIVE_FIXED then
ShowMessage ('It is a hard drive Partition');
يک مثال با سه تابع فوق ساخته ام که مي توانيد بوسيله لينک زير آنرا همراه Source Code اش DownLoad کنيد.
http://rightclick.ir/downloads/Api_Delphi_Test1_rar