PDA

View Full Version : سوال در مورد کلیک یه دکمه با گرفتنه هندل اون چنجره



javid_debugger
شنبه 14 دی 1387, 08:48 صبح
سلام دوستان من یه سوالی داشتم چه جوری میشه با گرفتن هندل یه پنچره خاص مثلا دکمه ی OK در اون پنجره رو کلیک کرد

xxxxx_xxxxx
شنبه 14 دی 1387, 15:10 عصر
سلام دوست عزيز
انتخاب عنوان هاي نامناسب گاهاً باعث ميشه جستجو هاي كاربران بي نتيجه بمونند.
مثل همين الان كه شما جستجو كرديد و به نتيجه نرسيديد. حتماً همين طوره ديگه وگرنه كه به اين فايل مي رسيديد.
اين برنامه از آقا احسان (sanaz13x) هست.
با تشكر از ايشون
با تغييرات خيلي جزئي هميني ميشه كه مي خواييد.
موفق باشيد/

javid_debugger
یک شنبه 15 دی 1387, 00:31 صبح
من اتفاقا با این کد هم کار کردم ولی نشد.
من دقیقا می خوام پنجره ای رو که در عکس ضمیمه می بینید رو Yes کنم ولی نمیشه نمیدونم چرا؟
من کد زیر رو تغییر دادم Ok کردم Yes ولی نمیدونم چرا Yes رو کلیک نمی کنه.:گریه:



If strWndText = "Yes" Then
SendMessage hwnd, BM_CLICK, 0&, 0&
EnumChildProc = False
End If


ایا باید جای دیگری رو هم عوض کنم؟

xxxxx_xxxxx
یک شنبه 15 دی 1387, 00:40 صبح
ما كه عكس ضميمه اي نمي بينيم. دقت كنيد حروف كوچك و بزرگ با هم متفاوت هستند.

javid_debugger
یک شنبه 15 دی 1387, 10:35 صبح
بابا دیگه اونقدر هم که ... نیستیم این چیزا رو می فهمیم که حروف کوچیک و بزرگ فرق داره . در ضمن عکس هم در پست قبلی ضمیمه کردم

xxxxx_xxxxx
یک شنبه 15 دی 1387, 21:09 عصر
دوست عزيز قصد بي احترامي نداشتم. من چون عكس ضميمه رو نمي ديدم نمي دونستم كه تو عكس حرف Y بزرگ هست يا كوچك. در هر حال عذر مي خوام.
خب.
گفتم با تغييرات جزئي اما منظورم تغيير كلمه OK به Yes كه نبود !!!

اين قطعه كد كه با تغييرات جزئي از همون فايل قبلي نوشتمش، كارش اينه كه اگر پنجره اي با عنوان Run وجود داشت (چه فعال چه غير فعال) اونوقت به حالت Foreground درش مياره و رو دكمه OK تو اون پنجره كليك مي كنه.
البته من كه نمي دونم عنوان پنجره تون چيه. حالا فقط كافيه شما بجاي كلمه Run عنوان پنجره و بجاي كلمه OK كلمه Yes رو قرار بديد.

اين قسمت تو يه تايمر با Interval دلخواه:


Private Sub Timer1_Timer()
Dim h As Long
a = FindWindowA(vbNullString, "Run")
If a <> 0 Then
SetForegroundWindow (a)
h = GetForegroundWindow
Call EnumChildWindows(h, AddressOf EnumChildProc, ByVal 0&)
End If
End Sub
و اين قسمت حتماً تو ماژول قرار بگيره:



Public Declare Function FindWindowA Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Const WM_GETTEXT = &HD
Const BM_CLICK = &HF5

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim strWndText As String
strWndText = String(1800, Chr(0))
SendMessage hwnd, WM_GETTEXT, 1800, ByVal strWndText
strWndText = Replace$(strWndText, vbNullChar, "")
EnumChildProc = True
If strWndText = "OK" Then
SendMessage hwnd, BM_CLICK, 0&, 0&
EnumChildProc = False
End If
End Function
براي امتحان از پنجره Run ويندوز استفاده كنيد.

موفق باشيد/