View Full Version : اموزش استفاده از api ها
setroyd
دوشنبه 08 فروردین 1390, 00:49 صبح
سلام به همه بچهای عزیز برنامه نویس چطورید ؟؟ امروز بعداز 1 هفته نشستم فک کردم دیدم چرا ما همش به طور پراکنده تو این تاپیک تو اون تاپیک کدهای خوب و کاربردی رو به طور پراکنده میزاریم من دیدم اگه
بیایم فقط 1 api هر کدوم از ما در این تاپیک بزاریم با توضیح فقط با توضیح کامل حالا حساب کنید در روز 10 نفر 10 api در این تاپیک بزارن ما در هر ماه 300 api با توضیح داریم حالا هرکی که دوست داره
که بتونیم برنامه نویسه قدرتمندی بشیم از الان شروع کنه به نوشتن با توضیح من خودم واسه شروع یکی میزارم شما هم واسه خوانایی بیشتر مثل من به همین شکل دنبال کنید و یک خواهش دارم از گذاشتن api تکراری خودداری کنید بچاها فقط به این فک کنید که میتونیم چه پیشرفتی کنیم پس خواهش میکنم یاریم کنید
برای این کار . و اگرم کسی سوالی داشت در مورد api مطرح کنه تا کمکش کنم یا هر کسی دیگه
کمکتون کنه mer30.
setroyd
دوشنبه 08 فروردین 1390, 00:54 صبح
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Sub Command1_Click()
SetCursorPos 200, 200
End Sub
کار این تابع تنظیم کردن مقدار (x) و (y) موس در ویندوز هست
(ByVal x As Long (x مختصات طولی رو مشخص میکنه
(ByVal x As Long (y) مختصات عرضی رو مشخص میکنه
setroyd
دوشنبه 08 فروردین 1390, 01:07 صبح
فقط دوستان لطف کنید از زیاده نویسی کد خودداری کنید تا از پیچیدگی جلو گیری کنه و سعی کنید api هارو 1دونه بنویسید نه چنتا با هم مگر انکه به هم وابسته باشناینجوری همه بهتر یاد میگیرن راستی این ایدی yahoo منه هرکی دوست داشت add کنه برای کمک کردن در مورد api
id: setroyd@yahoo.com هرکی مشکلی داشت pm بزاره جوابشو تا جایی که در توانمه و بلدم میدم
www.pc3enter.tk
پنج شنبه 11 فروردین 1390, 18:35 عصر
توابع API یعنی چی؟
واژه API مخفف شده سه كلمه Application Programming Interfaceمیباشدآن یك رابط نرم افزار است كه در برنامه های دیگر استفاده میگردد. همانند صفحه كلید ماشین حساب كه رابط میان كلید و عدد نمایش داده شده میباشد.یك APIرابط نرم افزاری سیستم های عامل میباشدAPI یك سیستم عامل دلیلی بنیادی و اساسی میباشد برای عدم هماهنگی سیستمهای عامل با هم .
برای مثال یك قطعه در یك سیستمی بر پایه مكینتاش نمیتواند در ویندوز اجرا شود (البته بدون وجود شبیه ساز آن) زیرا سیستم عامل مكینتاش و ویندوز API های متفاوتی دارند.
نحوه تعریف تابع :
قبل از اینكه بتوانید یك تابع API را در ویژوال بیسیك استفاده نمایید باید آن را نخست تعریف ومشخص نمایید. برای تعریف تابع باید به ویژوال بیسیك بگویید كه چگونه میتواند آن را پیدا نماید. برای تعریف نخست نام تابع سپس نام فایل DLL حامل تابع و سپس پارامترهای موردنیاز آن به همراه نوع آنها و نوع مقدار برگشتی(در صورت موجود بودن). با این اطلاعات ویژوال بیسیك میداند كه تابع API را از كجا پیدا نماید البته این رویه منحصر به توابع API نیست و هر تابعی كه درون یك DLL فایل قراردارد نیز باید همانند روش بالا تعریف گردد.
در زیر روش تعریف تابع نشان داده شده است. دستور Declare برای تعریف تابع استفاده میشود ، این دستور میتواند داخل یك ماجول یا یك فرم بكار گرفته شود اگر داخل فرم استفاده شود باید پیشوند Private برای آن بكار گرفته شود و اگر داخل یك ماجول بكار رود میتواند با یكی از دو پیشوند Public و یا Private مورد استفاده قرار گیرد ، توجه نمایید استفاده از واژه Public باعث میگردد تابع در بقیه قسمتهای برنامه نیز قابل استفاده باشد ولی واژه Private باعث میگردد تابع فقط در همان ماجولی كه تعریف شده قابل استفاده باشد.
کد:
[{Public | Private}] Declare Function function name Lib "DLL_filename" [Alias "function alias"] (argument list) As data type
[{Public | Private}]
می توانید یکی از دو عبارت بالا را نسبت به نیاز در تعریف تابع API خودتان به کار ببرید
اگر کمی با برنامه نویسی آشنا باشید با واژه میدان دیدScope و یا میدان عمل بیگانه نخواهید بود اگر تابع خود را در قسمت General برنامه تعریف کنید بایستی از کلمه کلیدی Private یعنی محلی استفاده کنید در این صورت از این تابع فقط در محلی که نوشته اید می توانید استفاده کنید و در سایر قسمت های برنامه نمی توانید از از آن تابع استفاده کنید و باید دوباره آن را در آن محل تعریف کنید که اصلا این نوع تعریف رو به جز در برنامه های بسیار ابتدایی پیشنهاد نمی کنم
نوع دوم استفاده از Public یا عمومی است که در آن ابتدا باید تابع را در یک ماژول دیگر تعریف کرد و سپس در سایر قسمت های برنامه و بدون محدودیت استفاده کرد
Declare Function
کلمه کلیدی است و حتما باید ردر تعریف تابع استفاده گردد
FunctionName
نام تابع API است این نام می تواند هرچیزی باشد و شما می توانید حتی از نام خودتان به جای این پارامتر استفاده کنید ولی هرگز نباید این پارامتر را خالی بگذارید و نوشتن آن الزامی است البته توصیه می کنم برای بالا رفتن خوانایی برنامه از نام اصلی تابع استفاده کنید زیرا در غیر این صورت می بایستی از قسمت Function Alias استفاده کنید
Lib "Library Name"
اصولا توابع API ویندوز در درون فایل های کتابخانه ای ویندوز(DLL) قراردارند و برای استفاده از این توابع می بایستی از درون کتابخانه مربوط به خود فراخوانی شود در این قسمت که نوشتن آن الزامی است شما باید نام کتابخانه ای را که تابع در درون آن قرار دارد را در درون کوتیشن بنویسید
کتابخانه های توابع در ویندوز مختلف هستند و از پر کاربرد ترین اونا می تونم به موارد زیر اشاره کنم
Kernel32.DLL
USER32.DLL
GDI32.DLL
WINMM.DLL
و ...
البته در نوشتن نام کتابخانه نوشتن پسوند .DLL اختیاری است
[Alias "function alias"]
در این قسمت که البته نوشتن اون اختیاریه در اکثر موارد باید نام کامل تابع رو تایپ کرد و در صورتی باید این قسمت رو حتما نوشت که نام تابع رو به دلخواه خودمون عوض کردیم ابته این بخش دارای کاربرد های دیگه ای هم هست که در انجا به اونا اشاره نمی کنم
(Argument list)
هر تابع API ویندوز مانند توابع داخلی ویژوال بیسیک می توان دارای چندین آرگومان باشد که این آرگومان ها بسته به نوع تابع متغیرند ، توابعی وجود دارند که شاید بیش از هفت آرگومان داشته باشند و توابعی هم وجود دارن که هیچ آرگومانی ندارند
As data type
اصولا هدف از فراخوانی تابع گرفتن خروجی از تابع است تمامی توابع API یک مقدار را برمی گردانند که برای معین نمودن نوع مقدار برگشتی از واژه کلیدی As و سپس نوع داده استفاده می کنیم که در اکثر توابع مقدار برگشتی از نوع Long و یا String خواهد بود
اگر همه به این صورتی که من می نویسم بنویسند خوب میشه
فقط از هر کدام یک تابع ها خوشتان آمد تشکر لطفا یادتان نرود تا من تا آنجا می توانم api بگذارم
-----------------------------------------------------------------------------
1.با این تابع می توان برچسب یا عنوان درایو را فهمید
Public Declare Function SetVolumeLabelA Lib "kernel32.dll" (ByVal lpRootName As String,
ByVal lpVolumeName As String) As Long
دستور کار با api
Dim A As Long
Private Sub Commad1_Click()
A = SetVolumeLabelA("C:\", "VisualBasic")
End Sub
www.pc3enter.tk
پنج شنبه 11 فروردین 1390, 18:56 عصر
2.با این تابع می توان زمان روشن بودن سیستم را فهمید
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
دستور کار با api
Dim A as Long
Private Sub Command1_Click()
A = timeGetTime
Text1.Text = A
End Sub
www.pc3enter.tk
پنج شنبه 11 فروردین 1390, 18:56 عصر
3.با این تابع می توان لیست تمام داریو ها فهمید
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
دستور کار با api
Dim StrBuffer As String
Me.AutoRedraw = True
StrBuffer = String(255, Chr$(0))
ret& = GetLogicalDriveStrings(255, StrBuffer)
For I = 1 To 100
If Left$(StrBuffer, InStr(1, StrBuffer, Chr$(0))) = Chr$(0) Then Exit For
Print Left$(StrBuffer, InStr(1, StrBuffer, Chr$(0)) - 1)
StrBuffer = Right$(StrBuffer, Len(StrBuffer) - InStr(1, StrBuffer, Chr$(0)))
Next I
www.pc3enter.tk
پنج شنبه 11 فروردین 1390, 18:57 عصر
4.با این تابع می توان فولدر را حذف کرد
Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVallpPathName As String) As Long
دستور کار با api
RemoveDirectory "C:\VB6"
www.pc3enter.tk
جمعه 12 فروردین 1390, 02:01 صبح
این تابع جای دکمه های موس رو عوض می کنه
کد:
کد:
Private Const MS_DEFAULT = 0
Private Const MS_SWAP = 1
Private Declare Function SwapMouseButton Lib "user32.dll" (ByVal bSwap As Long) As Long
bswap تعیین می کند خالت موس چگونه باشد
یعنی اگر
MS_DEFAULT = 0 و MS_SWAP = 1
به این صورت تعریف شوند جای دگمه های موس تغییر می کند اگر بر عکی باشد به حالت اول باز می گردند
setroyd
جمعه 12 فروردین 1390, 12:19 عصر
pc3enter برای همکاریت ممنونم منم امروز میزارم چنتا دیگه
returnx
جمعه 12 فروردین 1390, 12:27 عصر
تابع Load Icon و Draw Icon:
با توسط تابع Load Icon میشود یک آیکن رو در حافظه Load کرد و با تابع DrawIcon می شود یک Icon رو رسم کرد
Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Long) As Long
پارامتر hInstance : در این پارامتر هندل آیکن مورد نظر قرار می گیرد که اگر بخواهیم ایکن های استاندارد ویندوز را Load کنیم باید Null قرار دهیم.
lpIconName : در این پارامتر نام Icon مورد نظر قرار می گیرد
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
پارامتر hdc :در این پارامتر هندل گرافیکی یک شی قرار میگیرد.
پارامتر xوy:بجای این دو پارامتر نقاط شروع رسم کردن قرار می گیرد.
hIcon :بجای این پارامتر Icon بار گزاری شده مورد نظر قرار می گیرد.
مقادیر ثابت Icon های استاندارد ویندوز:
Private Const IDI_APPLICATION = 32512&
Private Const IDI_ASTERISK = 32516&
Private Const IDI_EXCLAMATION = 32515&
Private Const IDI_HAND = 32513&
Private Const IDI_ERROR = IDI_HAND
Private Const IDI_INFORMATION = IDI_ASTERISK
Private Const IDI_QUESTION = 32514&
Private Const IDI_WARNING = IDI_EXCLAMATION
Private Const IDI_WINLOGO = 32517
این هم مثال :
Private Const IDI_APPLICATION = 32512&
Private Const IDI_ASTERISK = 32516&
Private Const IDI_EXCLAMATION = 32515&
Private Const IDI_HAND = 32513&
Private Const IDI_ERROR = IDI_HAND
Private Const IDI_INFORMATION = IDI_ASTERISK
Private Const IDI_QUESTION = 32514&
Private Const IDI_WARNING = IDI_EXCLAMATION
Private Const IDI_WINLOGO = 32517
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Long) As Long
Dim my_icon As Long
Private Sub Form_Paint()
my_icon = LoadIcon(ByVal 0&, IDI_INFORMATION)
DrawIcon Me.hdc, 10, 10, my_icon
End Sub
www.pc3enter.tk
شنبه 13 فروردین 1390, 01:21 صبح
دستون درد نکنه
گفتم اگر این طوری بگذارید بهتر میشه
-----------------------
x.با این تابع می توان .........
دستور کار با api
-------------------------------------------
5.با این تابع می توان کار یک تایمر را انجام داد
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
دستور کار با api
Sleep 5000
setroyd
شنبه 13 فروردین 1390, 02:49 صبح
Private Const MB_ICONINFORMATION = &H40
Private Const MB_ICONEXCLAMATION = &H30
Private Const MB_ICONCRITICAL = &H10
Private Const MB_ICONQUESTION = &H20
Private Const MB_OK = &H0
Private Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long
Private Sub Command1_Click()
MessageBeep MB_ICONCRITICAL
End Sub
ByVal wType As Long: میتونه یک عدد long مثل 1 باشه یا یکی از const های بالا
از این api برای به صدا در اوردن حالتهایی چون Information , Exclamation,Critical,Ok,)) استفاده میشود اگر تا حالا از msgbox استفاده کرده باشید متوجه میشید حرفمو شما میتونید همون صداهارو با این api در برنامه ی خودتون استفاده کنید فقط کافیه مقدارهای بالارو خودتون جایگزین کنید تا صداهای دیگرو استفاده کنید
setroyd
شنبه 13 فروردین 1390, 02:52 صبح
اگر کسی سوالی داره درباره ی api بپرسه تا کمکش کنم ایدی yahoo هم که اول تاپیک هست اگر کسی خواست
returnx
یک شنبه 14 فروردین 1390, 15:55 عصر
7.با این تابع می توان صدای بوق (beep ) را از اسپیکر Main Board پخش کرد
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
دستور کار با تابع:
Beep 450, 100
www.pc3enter.tk
یک شنبه 14 فروردین 1390, 17:12 عصر
دوستان عزیز هرکه هرچیزی داره رو کنه مشکلی پیش نمیاد
--------------------------------------
کسی api نداره که بتوان یک صدای wav را پخش کنه
یعنی با کلیک روی دکمه صدای مورد نظر پخش بشه
returnx
یک شنبه 14 فروردین 1390, 19:52 عصر
کسی api نداره که بتوان یک صدای wav را پخش کنه
یعنی با کلیک روی دکمه صدای مورد نظر پخش بشه
PlaySound ،
sndPlaySound طریقه استفاده رو اگر خواستید در پست های بعدی میزارم ...
من گفتم تکراریه اینارو معرفی نکردم...
------------------------------------------------------------------------------
فکر کنم تالار تاپیک تالار مناسبی نیست اگر مدیران لطف کنند این تاپیک رو به تالار اصلی VB6 انتقال دهند فکر کنم دوستان بیشتری در این تاپیک شرکت کنند...
stabesh
یک شنبه 14 فروردین 1390, 19:59 عصر
با سلام
چرا بیخودی زحمت میکشید قبلا این کار انجام شده
(http://barnamenevis.org/showthread.php?92152-%D9%85%D8%B1%D8%AC%D8%B9-%D8%AA%D8%AE%D8%B5%D8%B5%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-api-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%A7%D9%86%D9%87%D8%A7) http://barnamenevis.org/showthread.php?92152-%D9%85%D8%B1%D8%AC%D8%B9-%D8%AA%D8%AE%D8%B5%D8%B5%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-api-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%A7%D9%86%D9%87%D8%A7
(http://%3Cbr%20/%3E%0Ahttp://barnamenevis.org/showthread.php?92152-%D9%85%D8%B1%D8%AC%D8%B9-%D8%AA%D8%AE%D8%B5%D8%B5%DB%8C-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-api-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D8%AA%D9%88%D8%B6%DB%8C%D8%AD-%D8%A7%D9%86%D9%87%D8%A7%3Cbr%20/%3E)
http://stabesh.hpage.com/get_file.php?id=1047062&vnr=949129
http://allapi.mentalis.org (http://allapi.mentalis.org/)
setroyd
یک شنبه 14 فروردین 1390, 23:46 عصر
Private Const SND_ALIAS = &H10000
Private Const SND_ALIAS_ID = &H110000
Private Const SND_ASYNC = &H1
Private Const SND_FILENAME = &H20000
Private Const SND_LOOP = &H8
Private Const SND_NODEFAULT = &H2
Private Const SND_NOSTOP = &H10
Private Const SND_NOWAIT = &H2000
Private Const SND_PURGE = &H40
Private Const SND_SYNC = &H0
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal Reserved As Long, ByVal dwFlags As Long) As Long
Private Sub Form_Load()
PlaySound "C:\WINDOWS\MEDIA\TADA.WAV", ByVal 0&, SND_FILENAME Or SND_ASYNC
End Sub
setroyd
یک شنبه 14 فروردین 1390, 23:50 عصر
دوست عزیز اینم برای شما هر ادرسی رو که بدی play میکنه موفق باشیو یه خواهش link ندید جواب رو بدید یا بهتره mer30
www.pc3enter.tk
دوشنبه 15 فروردین 1390, 00:15 صبح
جدا کردن اسم از اخر ادرس
Private Declare Function GetFileTitle Lib "comdlg32.dll" Alias "GetFileTitleA" (ByVal lpszFile As String, ByVal lpszTitle As String, ByVal cbBuf As Integer) As Integer
دستور
Dim Filename As String
Filename = Space(255)
GetFileTitle "www.google.comv\fsdf\fsdfs\www.pc3enter.tk", Filename, 255
MsgBox Trim(Filename)
www.pc3enter.tk
دوشنبه 15 فروردین 1390, 00:17 صبح
پنهان کردن موس
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long
دستور
Private Sub Form_Load()
ShowCursor (False)
End Sub
Private Sub Timer1_Timer()
ShowCursor (True)
End Sub
www.pc3enter.tk
دوشنبه 15 فروردین 1390, 00:18 صبح
رفتن به سایت دلخواه
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
دستور
Private Sub Form_Load()
Label1.Caption = "www.google.com"
End Sub
Private Sub Label1_Click()
Link Label1.Caption
End Sub
Public Function Link(ByVal URL As String) As Long
Link = ShellExecute(0&, vbNullString, URL, vbNullString, vbNullString, vbNormalFocus)
End Function
www.pc3enter.tk
دوشنبه 15 فروردین 1390, 00:19 صبح
بدست آوردن نام کامپیوتر
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
دستور
Public Function GetComputerName1() As String
Dim UserName As String * 255
Call GetComputerName(UserName, 255)
GetComputerName1 = Left$(UserName, InStr(UserName, Chr$(0)) - 1)
End Function
Private Sub Form_Load()
MsgBox GetComputerName1, vbInformation, "Computer Name"
End Sub
returnx
سه شنبه 16 فروردین 1390, 10:40 صبح
نمایش ScrollBar ها :
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
دستور :
Private Const H = 0 'Horzintal
Private Const V = 1 'Vertical
Private Const B = 3 'Both
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Private Sub Form_Load()
ShowScrollBar Me.hwnd, B, True
End Sub
www.pc3enter.tk
سه شنبه 16 فروردین 1390, 11:33 صبح
به خط گیره میده مشکل مال چیه
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Lon
returnx
سه شنبه 16 فروردین 1390, 12:52 عصر
شما کجا تابع رو تعریف کردید ؟ تو ماژول؟
اگه تو ماژول تعریف کردید باید public تعریف کنید...
اگه هم تو قسمت general فرم تعریف کردید باز اررور داد ، اگه این چیزی که شما گذاشتید در پست قبل رو در برنامه کپی کردید باید اررور می داد چون شما تابع رو نصفه کپی کردید ...
این کاملشه:
Private Declare Function ShowScrollBar Lib "user32" (ByVal hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
اگه باز هم مشکلتون بر طرف نشد پیام خصوصی بدید...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.