-
آموزش Api در VB
مقدمه
API رو می توان قلب ویندوز فرض کرد . زیرا ما هر کاری که در ویندوز انجام می دهیم در واقع یکی از تابع های َAPI فراخوانی می شود .
برای مثال وقتی شما در محیط برنامه نویسی vb وارد شده و یا هر محیط دیگری پروژه جدیدی را آغاز می کنید و فرم اولیه را روی صفحه آورده و آماده طراحی می شوید در واقع استفاده از Api را آغاز کرده اید در حقیقت در همین لحظه تابع Create Window فراخوانی شده و فرم مزبور در مقابل شما قرار می گیرد .
Api شاید به نظر پیچیده به نظر برسه با بیش از 1000 تابع ولی یک امکان بسیار قوی است .
توابع Api در یکسری فایل ها با پسوند DLL قرار دارند . DLL مخفف ( Dynamic Linked Library ) یا همان کتابخانه پیوندی پویا می باشد که می تواند شامل یکسری کد و داده ( مثل تصویر ، صوت و ... ) باشد .
مهمترین DLL ها kernel32.dll , user32.dll , shell32.dll و ... می باشد .
طریقه استفاده از Api
| Public | Private ] Declare Function name Lib "libname"[Alias "aliasname"](arglist) As type
Declare Function : یعنی شما قصد استفاده از روال تابع Function را دارید
name : نام تابع مورد نظر
libname : نام Dll مورد نظر
aliasname : این قسمت اختیاری است . وقتی استفاده می شود که در زبان برنامه نویسی نام اصلی این تابع وجود داشته باشد .
arglist : این قسمت هم می تونه اختیاری باشه از این قسمت برای فرستادن پارامتر ها استفاده می شه .
البته به چند نوع دیگه هم می شه تعریف کرد .
اگه این تعریف رو دیده باشید حتما می گید خیلی سخته ولی یه راه آسون بهتون می گم که بیشتر API ها در آن موجود است . می توانید از برنامه کاربردی API Text Viewer استفاده نمایید که در پوشه نصب vb موجود است .
جلسه اول
تابع Copy File :
این تابع یک فایل را در محل مورد نظر کپی می کنه .
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
lpExistingFileName : این پارامتر یک متغیر از نوع String است که مسیر و نام فایل مبدا یعنی فایلی که قرار است کپی شه .
lpNewFileName : این پارامتر یک متغیر از نوع String است که مسیر و نام فایل مقصد را مشخص می کنه .
bFailIfExists : این پارامتر از نوع Boolean ، که اگر این پارامتر True باشه و فایل مقصد قبلا وجود داشته باشه کار تابع نیمه کاره می مونه ولی اگه False باشه فایل قبلی Over Write می شه .
خروجی این تابع اگه Ture یا یک باشه یعنی تابع کار خودشو به درستی انجام داده و اگه False یا صفر باشه کار تابع نیمه تمام مانده است .
تابع Delete File :
با استفاده از این تابع می توان یک فایل را از روی دیسک پاک کرد .
اصل تابع :
Public Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
پارامتر ها :
lpFileName : این تابع دارای یک پارامتر است که از نوع String می باشد و مسیر و نام فایلی که قرار است از روی دیسک پاک شود را مشخص می کند .
خروجی :
از نوع Boolean بوده و اگر یک یا True باشه یعنی تابع به درستی کار خود را انجام داده است .
تابع Move File :
از این تابع برای انتقال یک فایل از یک مسیر به یک مسیر دیگه استفاده می شه .
اصل تابع :
Public Declare Function MoveFile Lib "kernel32" Alias "MoveFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
پارامتر ها :
lpExistingFileName : نوع String ، مسیر و نام فایل مبدا
lpNewFileName : نوع String ، مسیر و نام فایل مقصد
خروجی :
نوع Boolean ، یک یا True ---> کار تابع انجام شده است .
صفر یا False ---> کار تابع انجام نشده است .
تابع GetFileAttributes :
این تابع خصوصیات فایل از قبیل Readonly و System و... را برمی گرداند .
اصل تابع :
Public Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
پارامتر ها :
lpFileName : نوع String ، مسیر و نام فایل .
خروجی :
تابع می تواند چند حالت زیر را داشته باشد :
1). FILE_ATTRIBUTE_ARCHIVE : مشخص می کند که فایل یا فهرست خاصیت ARCHIVE دارد و مقدار آن برابر &H20 است
2). FILE_ATTRIBUTE_COMPRESSED : مشخص می کنه که فایل فشرده است و مقدار آن برابر &H800 است .
3). FILE_ATTRIBUTE_DIRECTORY : مشخص می کنه که مسیری که در lpFileName داده شده یک فهرست است و مقدار آن برابر &H10 است .
4). FILE_ATTRIBUTE_HIDDEN : مشخص می کنه که فایل خاصیت HIDDEN دارد و مقدار آن برابر &H2 است .
5). FILE_ATTRIBUTE_NORMAL : مشخص می کنه که فایل خاصیت NORMAL دارد و مقدار آن برابر &H80 است .
6). FILE_ATTRIBUTE_READONLY : مشخص می کنه که فایل خاصیت READONLY دارد و مقدار آن برابر &H1 است .
7). FILE_ATTRIBUTE_SYSTEM : مشخص می کنه که فایل خاصیت SYSTEM دارد و مقدار آن برابر &H4 است .
8). FILE_ATTRIBUTE_TEMPORARY : مشخص می کنه که فایل از نوع Temp است و مقدار آن برابر &H100 است .
گزینه های بالا می توان به صورت ثابت تعریف کرد برای مثال : Const FILE_ATTRIBUTE_HIDDEN = &H2
تابع SetFileAttributes :
این تابع دقیقا برعکس تابع قبلی عمل می کنه یعنی می توان خاصیت های فایل را تغییر داد .
اصل تابع :
Public Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long
پارامتر ها :
lpFileName : نوع String ، مسیر و نام فایل .
dwFileAttributes : از نوع Long ، دقیقا همان مقدارهایی خروجی تابع GetFileAttributes است که عبارتند از :
1). FILE_ATTRIBUTE_ARCHIVE : مشخص می کند که فایل یا فهرست خاصیت ARCHIVE دارد و مقدار آن برابر &H20 است
2). FILE_ATTRIBUTE_COMPRESSED : مشخص می کنه که فایل فشرده است و مقدار آن برابر &H800 است .
3). FILE_ATTRIBUTE_DIRECTORY : مشخص می کنه که مسیری که در lpFileName داده شده یک فهرست است و مقدار آن برابر &H10 است .
4). FILE_ATTRIBUTE_HIDDEN : مشخص می کنه که فایل خاصیت HIDDEN دارد و مقدار آن برابر &H2 است .
5). FILE_ATTRIBUTE_NORMAL : مشخص می کنه که فایل خاصیت NORMAL دارد و مقدار آن برابر &H80 است .
6). FILE_ATTRIBUTE_READONLY : مشخص می کنه که فایل خاصیت READONLY دارد و مقدار آن برابر &H1 است .
7). FILE_ATTRIBUTE_SYSTEM : مشخص می کنه که فایل خاصیت SYSTEM دارد و مقدار آن برابر &H4 است .
8). FILE_ATTRIBUTE_TEMPORARY : مشخص می کنه که فایل از نوع Temp است و مقدار آن برابر &H100 است .
-
به زودی
به زودی تابع های بیشتری یاد می دم :40:
-
جلسه دوم
تابع Open File :
از این تابع برای ساختن ، باز کردن و حذف کردن یک فایل می توان استفاده کرد ولی کار اصلی آن بدست آوردن دستگیره (Handle) یک فایل می باشد .
اصل تابع :
Public Declare Function OpenFile Lib "kernel32" Alias "OpenFile" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
پارامتر ها :
lpFileName : نام و مسیر مورد نظر
lpReOpenBuff : این متغیر به ساختار OFSTRUCT برای درایفت اطلاعات فایل وقتی برای اولین بار باز می شود ، اشاره می کند .
Public Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type
- cBytes : ندازه ساختار .
- fFixedDisk : اگر این فیلد غیر صفر باشد یعنی فایل از هارد است
- nErrCode : اگر فایل باز نشود شماره خطا را درون خود نگه داری می کند
- Reserved1 و Reserved2 : رزرو شده است
- szPathName : این فیلد شامل مسیر و نام فایل می باشد
Public Const OFS_MAXPATHNAME = 128
wStyle : این پارامتر می تواند مقادیر زیر را داشته باشد :
OF_CREATE : با مقدار عددی &H1000 وقتی استفاده می شود که بخواهیم یک فایل ایجاد کنیم .
OF_DELETE : با مقدار عددی &H200 فایل مورد نظر را Delete می کند
OF_EXIST : با مقدار عددی &H4000 وقتی استفاده می کنیم که بخواهیم بفهمیم که فایل مورد نظر وجود دارد یا خیر اگر وجود داشته باشد مقدار 1 بر فردانده می شود
OF_PARSE : با مقدار عددی &H100 فقط ساختار OFSTRUCT را پر می کند
OF_READ : با مقدار عددی &H0 و فایل را فقط برای عملیات خواند باز می کند
OF_READWRITE : با مقدار عددی &H2 و فایل را برای خواندن و نوشتن باز می کند
OF_REOPEN : با مقدار عددی &H8000 فایل را با اطلاعاتی که در ساختار OFSTRUCT وجود دارد دوباره باز می کند .
OF_WRITE : با مقدار عددی &H1 و فایل را فقط برای نوشتن باز می کند
خروجی :
این تابع یک عدد است که دستگیره فایل می باشد به جز حالت EXIST .
تابع GetFileSize :
این تابع اندازه فایل را به بایت بر می گرداند .
اصل تابع :
Public Declare Function GetFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
پارامتر ها :
hFile : دستگیره فایل می باشد که با استفاده از تابع OpenFile می توان به دست آورد .
lpFileSizeHigh : در vb برابر صفر قرار می دهیم ( این پارامتر از نوع اشاره گر است )
خروجی :
اندازه فایل مورد نظر برگردانده می شود
تابع FindFirstFile :
این تابع برای پیدا کردن یک فایل با مشخصاتی که به آن داده می شه می گردد .
اصل تابع :
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
پارامتر ها :
lpFileName : این پارامتر از نوع String بوده و نام فایل مورد جستجو یا شرایط مورد نظر برای فایل را شامل می شه .
نام فایل : "c:\vb.exe"
شرایط پسوندی : "c:\*.exe"
lpFindFileData : این متغیر اشاره می کند به ساختار WIN32_FIND_DATA و هر فایلی که توسط تابع پیدا شود اطلاعات آن در این ساختار ذخیره می شود .
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
dwFileAttributes : خصوصیات فایل پیدا شده را مشخص می کند . خصوصیاتی که در توابع GetFileAttributes و SetFileAttributes گفته شد .
ftCreationTime : این فیلد از نوع FILETIME می باشد و زمان ساخت فایل پیدا شده را مشخص می کنه .
ftLastAccessTime : این فیلد از نوع FILETIME می باشد و زمان آخرین دسترسی به فایل پیدا شده را مشخص می کنه .
ftLastWriteTime : این فیلد از نوع FILETIME می باشد و زمان آخرین باری که فایل پیدا شده نوشته شده را مشخص می کنه .
nFileSizeHigh : بالاترین اندازه فایل را به بایت را بر می گرداند .
nFileSizeLow : پایین ترین اندازه فایل را به بایت بر می گرداند .
cFileName : این پارامتر نام فایل پیدا شده را بر می گرداند . و MAX_PATH برابر 255 است .
cAlternate : این پارامتر مثل پارامتر بالایی با تفاوت اینکه فقط 8 کاراکتر نام فایل و 3 کاراکتر پسوند فایل می باشد .
خروجی :
اگر این تابع کار خود را به خوبی به اتمام برساند دستگیره یک فایل را بر می گرداند اگر تابع کار خود را به خوبی انجام ندهد مقدار 1- را بر می گرداند .
ساختار FILETIME :
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
توضیح خاصی ندارد ولی شاید بعدا بگم .
تابع FindNextFile :
این تابع فایل دیگری را با خصوصیاتی که در تابع FindFirstFile تعریف شده را پیدا می کنه .
اصل تابع :
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
پارامتر ها :
hFindFile : این پارامتر از نوع عددی است و دستگیره فایلی را که توسط تابع پیدا شده می باشد .
lpFindFileData : این پارامتر قبلا در تابع FindFirstFile گفته شده است .
خروجی :
اگر تابع کار خود را به خوبی انجام دهد مقدار یک یا True بر گردانده می شود .
-
جلسه سوم
تابع FindClose :
این تابع الگویی که توسط تابع FindFirstFile برای جستجو یک یا چند فایل تعیین شده است را از بین می برد .
اصل تابع :
Public Declare Function FindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long
پارامتر ها :
hFindFile : این پارامتر از نوع عددی و دستگیره فایلی می باشد که با الگوی تابع FindFirstFile پیدا شده است .
خروجی :
اگر تابع کار خود را به درستی انجام دهد مقدار یک یا True بر گردانده می شود .
تابع CreateDirectory :
از این تابع برای ساختن یک فهرست استفاده می شود .
اصل تابع :
Public Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
پارامتر ها :
lpPathName : این پارامتر از نوع رشته می باشد و مسیر و نام فهرست جدید را مشخص می کند .
lpSecurityAttributes : این پارامتر از نوع ساختار SECURITY_ATTRIBUTES می باشد و برای تعین خصوصیات حفاظت فهرست به کار می رود .
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
nLength : اندازه ساختار می باشد و تابع Len در VB مشخص می شود .
lpSecurityDescriptor :
bInheritHandle :
خروجی :
اگر تابع کار خود را به درستی انجام دهد مقدار یک یا True بر گردانده می شود .
تابع RemoveDirectory :
از این تابع برای حذف یک فهرست استفاده می شود .
اصل تابع :
Public Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long
پارامتر ها :
lpPathName : این پارامتر از نوع رشته می باشد و مسیر و نام فهرستی که قرار است پاک شود .
خروجی :
اگر تابع کار خود را به درستی انجام دهد مقدار یک یا True بر گردانده می شود .
تابع GetCurrentDirectory:
این تابع فهرست پوشه فعال را مشخص می کند .
اصل تابع :
Public Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
پارامتر ها :
nBufferLength : این پارامتر از نوع عدد بوده و طول فهرست فعال را مشخص می کند .
lpBuffer : از نوع رشته بوده و فهرست فعال درون این متغیر قرار می گیرد .
مثال :
dim s as string
s= string(255,0)
GetCurrentDirectory 255,s
msgbox s
تابع SetCurrentDirectory:
این تابع دقیقا بر عکس تابع Get CurrentDirectory است یعنی می توان مسیر یا فهرست فعال سیستم را تعیین کرد
اصل تابع :
Public Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
پارامتر ها :
lpPathName : این پارامتر از نوع String و مسیر یا فهرستی که باید فهرست فعال سیستم شود را مشخص می کند
خروجی :
اگر تابع کار خود را به درستی انجام دهد مقدار یک یا True بر گردانده می شود .
-
جلسه چهارم
تابع GetDiskFreeSpaceEx :
این تابع اطلاعاتی درباره حجم درایو ها می دهد ( فضای خالی و فضای کل )
اصل تابع :
Public Declare Function GetDiskFreeSpaceEx Lib "kernel32" Alias "GetDiskFreeSpaceExA" (ByVal IpDirectoryName As String, IpFreeByteAvailableToCaller As Currency, IpTotalNumberOfBytes As Currency, IpTotalNumberOfFreeBytes As Currency) As Long
پارامتر ها :
IpDirectoryName : این پارامتر از نوع رشته بوده و نام دیسک درایو مورد نظر را مشخص می کند .
IpFreeByteAvailableToCaller : این پارامتر از نوع عددی بوده و مقدار فضای خالی قابل استفاده دیسک را به Byte بر می گرداند .
IpTotalNumberOfBytes : این پارامتر از نوع عددی بوده و فضای کل دیسک درایو را به Byte بر می گرداند .
IpTotalNumberOfFreeBytes : این پارامتر از نوع عددی بوده و فضای خالی دیسک درایو را به Byte بر می گرداند .
خروجی :
اگه خروجی این تابع برابر 1 یا True باشه -- > تابع کارش و به درستی انجام داده .
تابع GetDriveType :
این تابع نوع هر یک از دیسک درایو های سیستم را مشخص می کند انواعی از قبیل فلاپی ، سی دی و دیسک سخت .
اصل تابع :
Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
پارامتر ها :
lnDrive : این پارامتر از نوع رشته بوده و درایو مورد نظر را مشخص می کند
خروجی :
خروجی این تابع مقادیر زیر می باشد :
DRIVE_REMOVABLE : برابر مقدار 2 می باشد و مشخص می کند دیسک درایو مورد نظر از نوع قابل حمل است (Floppy drive )
DRIVE_FIXED : برابر مقدار 3 بوده و مشخص می کند که درایو مورد نظر از نوع ثابت (Hard disk) است .
DRIVE_REMOTE : برابر مقدار 4 بوده و مشخص می کنه که درایو مورد نظر از نوع درایو شبکه است .
DRIVE_CDROM : برابر مقدار 5 مشخص می کنه که درایو مورد نظر از نوع CD-Drive است .
DRIVE_RAMDISK : برابر مقدار 6 و مشخص می کنه که درایو مورد نظر از نوع درایو های ساخته شده در Ram می باشد .
تابع GetLogicalDriveStrings :
این تابع دیسک درایو های موجود در سیستم را بر می گرداند .
اصل تابع :
Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
پارامتر ها :
nBufferLength : این پارامتر از نوع عددی و مقدار فضای لازم را برای ذخیره سازی نام دیسک درایو مشخص می کند .
lpBuffer : این پارامتر از نوع رشته بوده و نام دیسک درایو در این پارامتر قرار می گیرد .
خروجی :
اگر این تابع کار خود را به خوبی انجام دهد تعداد کارکتر هایی را که در رشته کپی شده است را بر می گرداند و اگر تابع کار خود را ناقص انجام دهد مقدار صفر بر می گردد.
مثال :
Dim StrSave As String
Dim ret As Long
Dim i As Byte
Dim Drive As String
StrSave = String(255, Chr$(0))
ret = GetLogicalDriveStrings(255, StrSave)
For i = 1 To 100
If Left$(StrSave, InStr(1, StrSave, Chr$(0))) = Chr$(0) Then Exit For
Drive = Left$(StrSave, InStr(1, StrSave, Chr$(0)) - 1)
StrSave = Right$(StrSave, Len(StrSave) - InStr(1, StrSave, Chr$(0)))
Next i
تابع GetVolumeInformation :
این تابع اطلاعات مربوط به یک دیسک درایو از قبیل نوع سیستم ، بر چسب ، شماره سریال و ... را بر می گرداند .
اصل تابع :
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
پارامتر ها :
lpRootPathName : این پارامتر از نوع رشته بوده و نام درایو مورد نظر را مشخص می کند .
lpVolumeNameBuffer : این متغیر از نوع رشته بوده و بر چسب (Label ) دیسک درایو مورد نظر را بر می گرداند .
nVolumeNameSize : این متغیر از نوع عددی بوده و فضای لازم برای متغیری که شامل برچسب می باشد را مشخص می کند .
lpVolumeSerialNumber : این متغیر اشره گری به یک عددی می باشد که شماره سریال دیسک درایو می باشد .
lpMaximumComponentLength : این متغیر نیز از نوع عددی می باشد و حداکثر طول فایل سیستم را بر می گرداند .
lpFileSystemFlags : این متغیر عددی بوده و من چیز خاصی ازش نمی دونم .
lpFileSystemNameBuffer : این پارامتر از نوع رشته بوده و نام فایل سیستم را بر می گردونه .
nFileSystemNameSize : این پارامتر از نوع عددی بوده و مقدار لازم برای متغیر نام فایل سیستم را مشخص می کند .
خروجی :
اگه خورجی 1 یا True باشه -- > تابع کارش و به درستی انجام داده .
تابع SetVolumeLabel :
از این تابع برای تعیین بر چسب ( Label ) یک دیسک درایو استفاده می شود .
اصل تابع :
Public Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" (ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long
پارامتر ها :
lpRootPathName : این پارامتر از نوع رشته بوده و نام دیسک درایو مورد نظر را مشخص می کند .
lpVolumeName : این پارامتر از نوع رشته بوده و برچسب جدید دیسک گردان مورد نظر را مشخص می کند .
خروجی :
اگه خورجی 1 یا True باشه -- > تابع کارش و به درستی انجام داده .
-
-
سلام.
ممنون از توضیحاتت. ادامه بده.
-
سلام دوست عزیز
ممنون بابت زحمتی که کشیدی
اگه ممکنه در مورد **** هم مطلب بذار
ممنون
ویرایش:
منم فانکشن پست شماره 9 رو میخام
اگه لطف کنین بذارین
مشکل قبلیم حل شد
ممنون
-
یه تابع api هست که پوسته برنامه رو یعنی دکمه ها و... رو تبدیل به پوسته ویندوز xp میکنه اگر ممکنه اونو برامون بذار
ممنون
-
تشکر
دمتون گرم بچه ها که نظر دادید
خوشحال شدم