ايران ويج

نسخه‌ی کامل: پیدا کردن هندل یک شی که caption آن را نمیدانیم
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
برای گرفتن هندل class name یک شی که caption آن را نمیدانیم باید چیکار کنیم ؟

اصولا باید نام کلاس رو بدی تا هندل رو بده :
کد:
hWndMain = FindWindow("class name", vbNullString)
اما هندل زیر کلاس اونو میده واسه کروم تا زمانی که به جای vbNullString نام caption اون رو ندی درست کار نمیکنه

یه سرچی زدم دیدم میگن با FindWindowLike میشه هندل پنجره ای که نمیدونی رو پیدا کنی اما تو api در vb6 پیداش نکردم
یه سوال دیگه این که چرا نمیشه هندل address bar فایر فاکس رو گرفت؟
یعنی راه نداره ؟
FindWindowLike یک تابع api نیست سرچ کن میتونی تابع ش را پیدا کنی سورسش تو نت فراوانه
این کدوم هست ؟
http://support.microsoft.com/kb/147659
http://bytes.com/topic/visual-basic-net/...ike-vb-net
http://www.xtremevbtalk.com/showthread.php?t=188324
در اصل دنبال هندل class name که بهش دادم میگردم
مهندس
توابع وتیپ های زیر چیزهایی هست که شما نیاز دارین
اولی مکان کرسر رو پیدا میکنه
دومی هندل پنجره ای که زیر کرسر هست
سومی هم از رو هندل کلاس اون پنجره رو میده
با این توابع شما میتونی کلاس پنجره مورد نظرتو پیدا کنی و تو برنامه اصلیت ازش استفاده کنی
کد:
Private Declare Function GetCursorPos Lib "user32" _
   (lpPoint As POINTAPI) As Long

Private Declare Function WindowFromPoint Lib "user32" (ByVal _
   xpoint As Long, ByVal ypoint As Long) As Long
  
Private Declare Function GetClassName Lib "user32" Alias _
   "GetClassNameA" (ByVal hwnd As Long, ByVal lpClass _
    As String, ByVal nMaxCount As Long) As Long

Private Type POINTAPI
    X As Long
    Y As Long
End Type
با موس رو دارم ولی اینو نمیخوام
بدون کم موس میخوام این کار رو بکنم
همون طور که گفتم نام کلاس رو بدم و هندلشو بده
(۱۴-بهمن-۱۳۹۰, ۱۲:۵۳:۳۷)crafcrab نوشته است: [ -> ]با موس رو دارم ولی اینو نمیخوام
بدون کم موس میخوام این کار رو بکنم
همون طور که گفتم نام کلاس رو بدم و هندلشو بده
مهندس پستمو یه بار دیگه بخون
اول باید با اون توابع یه برنامه بنویسی که بتونی اسم کلاس اون فورم رو بدست بیاری بعد که کلاس رو با اون برنامه بدست اوردی اونوقت برو تو برنامه اصلیت با تابع findwindow اسم کلاسشو بده و هندلشو بگیر


این تابع فکر کنم کار شما را راه بندازه
کد:
Option Explicit
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long

Const GW_HWNDNEXT = 2
Const GW_CHILD = 5

'********************************************
'*Give it part of the window text your looking for
'*it will give you the hWnd
'*usefull for windows that text is like "[project] - microsoft visual basic [design]"
'*usage:
'*Msgbox FindWindowLike("visual basic")
'*Returns 0 if not found
'*******************************************

Function FindWindowLike(strPartOfCaption As String) As Long
Dim hWnd As Long
Dim strCurrentWindowText As String
Dim r As Integer

hWnd = GetForegroundWindow

Do Until hWnd = 0
strCurrentWindowText = Space$(255)
r = GetWindowText(hWnd, strCurrentWindowText, 255)
strCurrentWindowText = Left$(strCurrentWindowText, r)
'hWnd = GetWindow(hWnd, GW_CHILD)
If InStr(1, LCase(strCurrentWindowText), LCase(strPartOfCaption)) <> 0 Then GoTo Found
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop

Exit Function
Found:
FindWindowLike = hWnd
End Function
(۱۴-بهمن-۱۳۹۰, ۱۸:۵۳:۵۴)lord_viper نوشته است: [ -> ][quote='crafcrab' pid='164553' dateline='1328257417']
با موس رو دارم ولی اینو نمیخوام
بدون کم موس میخوام این کار رو بکنم
همون طور که گفتم نام کلاس رو بدم و هندلشو بده
مهندس پستمو یه بار دیگه بخون
اول باید با اون توابع یه برنامه بنویسی که بتونی اسم کلاس اون فورم رو بدست بیاری بعد که کلاس رو با اون برنامه بدست اوردی اونوقت برو تو برنامه اصلیت با تابع findwindow اسم کلاسشو بده و هندلشو بگیر


عزیز من اسم کلاس اون فورم رو دارم نیازی به این برنامه موس نیست

با findwindow و FindWindowEx کارم رو راه انداختم قبلا
اما مشکل اینه که برای این یکی پروسس کار نمیکنه
شما کدی را که من براتون گذاشتم اجرا کردید؟
فقط کافیه قسمتی از نام پنجره را بهش بدید مثلا فایرفاکس وقتی یک صفحه را باز میکنه caption به شکل زیر تغییر میکنه
Google - Mozilla Firefox
با تابعی که من براتون گذاشتم فقط کافیه یک قسمت از اسم پنجره را بدید مثلا فقط
fire
و بعد هندل اون پنجره را بگیرید
کد:
Private Sub Command1_Click()
MsgBox FindWindowLike("fire")

End Sub
البته یه کار دیگه هم میتونی بکنی

پیاده سازیش با خودت
با استفاده از enumWindows لیست کلیه پنجره های باز سیستم رو در باید بعد با با استفاده از openprocess و Getmodulefilename میتونی ادرس فایل exe شو بگیری و چک کنی این فورم مال چه برنامه ای یا پروسه ای هست
(۱۷-بهمن-۱۳۹۰, ۱۴:۲۲:۱۷)lord_viper نوشته است: [ -> ]البته یه کار دیگه هم میتونی بکنی

پیاده سازیش با خودت
با استفاده از enumWindows لیست کلیه پنجره های باز سیستم رو در باید بعد با با استفاده از openprocess و Getmodulefilename میتونی ادرس فایل exe شو بگیری و چک کنی این فورم مال چه برنامه ای یا پروسه ای هست

آره میشه ولی فکر کنم cpu رو زیاد درگیر کنه هی دونه دونه ....
صفحه‌ها: 1 2