بلاخره کتاب حاضر شد ...
آموزش ها از طریق مثال ها هستش ...
خیلی هم ساده س . امیدوارم بدردتون بخوره
اینقدر نظر دادید دیگه دارم میترکم ...(بازم دم آقا نیما گرم)
خوب میخواستم این قضیه رو ول کنم ولی چون تو یک سایت این نظر سنجی رو گذاشتم (اونها به مولتی مدیا رای دادند)پس مقاله رو تا چند روز دیگه آماده میکنم ...
فقط خواستم خبر بدم
(فعلا)
خوب من بعد از یک دوره ی دایناسوری برگشتم ... دیگه میخوام شروع کنم . راستش این چند وقته گرفتار درس بودم(فکر نکنید تجدید شدم ها . )
خوب من میخوام یک مقاله تهیه کنم , اما نمیدونم کدوم رو بزارم (خواهش میکنم یکی رو انتخاب کنید . من وقتم پره
) خوب پس گفتم شما انتخاب کنید :
۱ - شروع کار با ویژوال بیسیک
۲ - کار با داده ها و کنترل برنامه
۳ - کار با صفحه کلید
۴ - مولتی مدیا
۵ - ارتباط با داده ها (احتمالا Access)
۶ - اینترنت و از این جور چیزها
۷ - هک کل سرورهای دنیا با استفاده از ویژوال بیسیک(بابا شوخی کردم . جدی نگیری ها
)
خوب فقط تو نظر ها شماره مورد نظر رو بنویسید .
این نظر سنجی تا ۲۸ مرداد اعتبار داره .(ولی بخاطر مخاطبین زیاد تا یک روزه دیگه تمدید شد .)
(بشتابید ... بشتابید ... هم اکنون شما برنده ما هستید )(به برنده بلیط یک سفر زیارتی به آلمان داده خواهد شد)
خوب امروز اومدم بدون مقدمه و عذر خواهی واسه این غیبت صغری
بحث رو در مورد Handle آغاز کنم
ابتدا بگم که Handle یک شماره از نوع Long هست که به هر پنجره سپس هر شیء Load شده روی ویندوز توسط خود ویندوز اختصاص داده می شه که می توان توسط اون شماره(Handle) با شیء ارتباط بر قرار کرد.
باید توجه داشت که متغیری رو که Handle توش ذخیره می شه رو باید از نوع Long در نظر گرفت.
برای پیدا کردن Handle یک شیء از دو روش ساده می توان استفاده کرد:
۱.پیدا کردن با استفاده از نام Class یا Caption شیء
۲.پیدا کردن با استفاده از مختصات نقطه های شیء(می توان از کرسر ماوس نیز کمک گرفت)
۱:
در این روش از تابع زیر استفاده می شود:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
مثال:
Handle = FindWindow("Shell_TrayWnd", vbNullString) 'With Class Name
Handle = FindWindow(vbNullString, "My Computer") 'With Caption
هر گاه مقدار بر گشتی تابع صفر باشد یعنی شیء با همچین مشخصاتی وجود ندارد در غیر اینصورت مقدار برگشتی همان Handle شیء خواهد بود
در اولی تنها نام Class ذکر شده اما در دومی تنها نام Caption نام برده شده است.
ذکر هر دو نیز در مواردی که چند شیء از یک نوع Class اما با Caption های مختلف موجود می باشد کار را دقیقتر می کند
باید در نظر داشت که برای یافتن یک شیء روی شیء دیگر(مثلا اشیای روی یک فرم) نمیتوان تنها از این تابع استفاده کرد، بلکه باید ابتدا Handle شیء خارجی(فرم) و سپس از طریق تابع زیر Handle اشیاء داخلی را یافت:
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
برای نمونه برای یافتن Handle استارت منو اینطور عمل می کنیم:
PriHandle = FindWindow("Shell_TrayWnd", vbNullString) 'TaskBar Handle
SecHandle = FindWindowEx(PriHandle, 0, "Button", vbNullString) 'Start Menu Handle
در اینجا Shell_TrayWnd نام Class تسک بار(Task Bar) و Button نام Class دکمه(در اینجا start) می باشد.
۲:با استفاده از نقاط موجود بر روی شیء:
در این روش از تابعی استفاه می کنیم که با گرفتن مختصات طول و عرض نقاط Handle شیء را بر می گرداند
این روش برای بدست آوردن شیء های درون هم نیازی به استفاده از چند بار تابع(مانند روش قبلی) احتیاجی ندارد:
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
مثال:
Handle = WindowFromPoint(X,Y ) 'From X And Y
همانطور که گفته شد می توان از مکان کرسر ماوس نیز به صورت زیر استفاده نمود:
Private Type POINTAPI
X As Long
Y As Long
End Type
تعریف کردن نوع POINTAPI بدلیل آنکه تابع GetCursorPos ورودی از این نوع می گیرد:
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
مثال:
Private Pointer1 as POINTAPI
GetCursorPos Pointer1
Handle = WindowFromPoint( Pointer1.X, Pointer1.Y) 'From Pointer1
برنامه هایی همچون Caption It برای پیدا کردن هدف خود از طریف ماوس از این روش پیشی می گیرند.
و اما...کار با Handle ها و ارتباط با آنها:
برای ارتباط گرفتن با اشیاء از طریق Handle آنها می توان از تابع کلی SendMessage استفاده کرد:
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
پیام های ویندوز از نوع ثابت هایی اند که با WM ، SWP ، SW و... شروع می شوند که می توان آنها را در برنامه API Viewer قسمت Const جستحو کرد.نام آنها اغلب نمایانگر پیام همراهشان است.مانند:
Public Const WM_SETTEXT = &HC
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_CLOSE = &H10
Public Const WM_DESTROY = &H2
طریقهء فرستادن پیام:
SendMessage Handle , WM_DESTROY, 0, 0
بستن آن شیء(Unload)
SendMessageByString Handle, WM_SETTEXT, 0, Chr(Int(Rnd * 64) + 32) 'Random
تغییر Caption شیء
با این که این مبحث تمومی نداره اما من همینجا این مبحث رو می بندم و ادامه رو می ذاریم برای جلسه بعدی!
بلاخره درس و امتحان و از این جور مسائل تموم شده و رفت ...
من برگشتم . (حالا آقا پویان هم بر میگرده) .![]()
ببخشید که قالب رو عوضش کردم . یک مشکلی براش پیش اومده بود مجبور شدم. وقتی آقا پویان برگشت درستش میکنه . (بازم
)
خوب آموزشها رو بازم میزارم (یعنی دوباره شروع میکنم ) .
فعلا خدانگهدار (بدرورد) .
من که بدلیل درس و کلاس و ... وقت ندارم بنویسم ...
فکر نکنم آقا پویان هم بیاد ...
اگه روزی اومدم تابستون میام ... (احتمال ۵٪)( اگه این وبلاگ رو یادم مونده باشه )
پس خداحافظ ..............................................................
به نام خدا
سلام به همه اومدم جواب سوالات رو بدم :
سوال آقا حمید : " چجوری مقدارو از این بگیریم ؟ "
من در مقاله ای این رو پیدا کردم : اگر شما مقداری رو از InPutBox نگیرید یک رشته به طول صفر معادل "" را برای شما بر میگرداند : این هم کد :
Dim X As String
If (X <> "") Then
کدی اگر مقداری رو داده باشد
Else
کدی که اگر مقداری رو نداده باشد
End If
و سوال آقا میلاد : "چه جوری میشه بدون تعریف متغیر یک صفحه اینترنتی رو باز کرد ؟"
تا اونجا که من میدونم با Shell میشه :
Shell "Explorer.Exe http:/vbasic.blogfa.com" 'For Test
خوب امیدوارم راضی باشید . راستی آقا میلاد هیچ آدرسی نداشتن ولی چون سوال خوبی بود من جواب دادم .
به نام خدا
شکل ظاهری دستور :
X = InPutBox(Prompt,Title,Default,X,Y) 'Vbasic
Prompt = متن این صفحه
Title = Title صفحه
Default = مقدار پیش فرض
X,Y = محل قرار گرفتن صفحه در منطقه مورد نظر
کار دستور به این صورته :
وقتی برنامه از کابر یک مقدار می خواهد یا سوالی میکند این دستور بدرد ما میخوره .......
امیدواریم مطلب رو درک کرده باشید .......
خوش باشید .......
راستی ما مدیر بخش برنامه نویسی isyahoo هم شدیم .
