PDA

View Full Version : مبتدی: بدست آوردن هندل چند شی با class name مشترک



just4froum
جمعه 25 شهریور 1390, 19:29 عصر
با سلام

فرض کنید ما یک فرم داریم که 3 تا تکست باکس داره که همشون class name مشترک دارند. حالا ما چطور می تونیم هندل همه ی تکست باکس هارو با استفاده از آن ها class name در یک برنامه دیگه بگیریم ؟

آیا با تابع FindWindowEx میشه چنین کاری رو کرد ؟


با تشکر از همگی

محسن واژدی
جمعه 25 شهریور 1390, 21:10 عصر
سلام علیکم
کد زیر را بررسی کنید:

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Const GW_CHILD As Long = 5
Private Const GW_HWNDNEXT As Long = 2
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Sub Command1_Click()
Dim mn_hwnd&, ch_hwnd&
Dim class_nam$, obj_cap$
mn_hwnd& = Me.hwnd
ch_hwnd& = GetWindow(mn_hwnd&, GW_CHILD)
List1.Clear
Do While ch_hwnd& > 0
'get class name
class_nam$ = String$(50, Chr(0))
GetClassName ch_hwnd&, class_nam$, Len(class_nam$)
'get object caption
obj_cap$ = String$(255, Chr(0))
obj_cap$ = Left$(obj_cap$, InStr(1, obj_cap$, Chr(0)) - 1)
'''''''''''''
List1.AddItem ch_hwnd& & vbTab & Left$(class_nam$, InStr(1, class_nam$, Chr(0)) - 1) & vbTab & obj_cap$
ch_hwnd& = GetWindow(ch_hwnd&, GW_HWNDNEXT)
Loop
End Sub



قبل از استفاده یکCommandو یک ListBox با نام های Command1، و List1 بر روی فرم قرار بدهید



آیا با تابع FindWindowEx میشه چنین کاری رو کرد ؟

با FindWindowEx میتوانید، در صورتیکه هم نام و هم کلاس شی را دقیقا" داشته باشید در غیر اینصورت در هربار هندل اولین شی را برمیگرداند

موفق باشید

just4froum
سه شنبه 29 شهریور 1390, 14:55 عصر
با تشکر از جناب محسن واژدی :

فقط میشه بگین obj_cap در کد بالا دقیقا چیکار میکنه ؟

با تشکر

محسن واژدی
سه شنبه 29 شهریور 1390, 15:09 عصر
این متغیر عنوان شی را برمیگرداند البته در این تابع اضافی بود که هنوز حذف نکرده ام

موفق باشید