just4froum
جمعه 25 شهریور 1390, 20:29 عصر
با سلام
فرض کنید ما یک فرم داریم که 3 تا تکست باکس داره که همشون class name مشترک دارند. حالا ما چطور می تونیم هندل همه ی تکست باکس هارو با استفاده از آن ها class name در یک برنامه دیگه بگیریم ؟
آیا با تابع FindWindowEx میشه چنین کاری رو کرد ؟
با تشکر از همگی
محسن واژدی
جمعه 25 شهریور 1390, 22: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, 15:55 عصر
با تشکر از جناب محسن واژدی :
فقط میشه بگین obj_cap در کد بالا دقیقا چیکار میکنه ؟
با تشکر
محسن واژدی
سه شنبه 29 شهریور 1390, 16:09 عصر
این متغیر عنوان شی را برمیگرداند البته در این تابع اضافی بود که هنوز حذف نکرده ام
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.