ايران ويج

نسخه‌ی کامل: هندل اشیاء از کلاس Qwidget
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
مشکلی که در

Qwidget دارم :

من هندل اشیاء رو از برنامه ی دیگر می گیرم و کنترل آن ها رو در دست می گیرم .
در برنامه ی مورد نظر وقتی آبجکت رو می گیرم احساس می کنم که اشیاء داخلی تری وجود داره که نمی تونم به اونها دسترسی داشته باشم مثلا متنی هست که داخل یک ریچ تکست باکس هست ولی من نمی تونم متن اون رو با برنامم بخونم . ولی وقتی تست می کنم مثل این که پرنت اون رو مییتونم بگیرم اما به فرزندان داخل اون دسترسی ندارم
اینم بگم که با برنامه های معمولی خیلی راحت کار کردم ولی به این کلاس که رسیدم به مشکل خوردم
ممنون می شم دوستانی که در این زمینه اطلاعات دارند راهنمایی کنن .

جهت اطلاع از روش استفاده شده کد های زیر رو مشاهده کنید :

نمونه توابع استفاده شده به زبان وی بی :

Private Declare Function SendMessageA Lib "user32" (ByVal hwnd As IntPtr, _
ByVal wMsg As Integer, _
ByVal wParam As IntPtr, _
ByVal ByVallParam As IntPtr) _
As Integer

Private Declare Auto Function FindWindow Lib "user32" (ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As IntPtr

Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As IntPtr, _
ByVal lpEnumFunc As EnumChildWindowsCallBack, _
ByVal lParam As Integer) _
As Boolean

Private Callback As New EnumChildWindowsCallBack(AddressOf EnumChildWindowsProc)
Delegate Function EnumChildWindowsCallBack(ByVal Child_hWnd As IntPtr, ByVal lParamCalled As IntPtr) As Boolean





نمونه کد من

Dim Window_hWnd As IntPtr = FindWindow(Nothing, "Maintenance Console") '<=Replace "Test Application"

'STEP 2)
'Using a callback function and "EnumChildWindows",
'get the handle of all the children and grand children of the window
If Window_hWnd <> 0 Then
Dim NotUsed As Boolean = EnumChildWindows(Window_hWnd, Callback, Nothing)
End If


'STEP 3)
'get the text
'You will have to find the right index to use for ListOfChild in the "SendMessage"
'The only way will be using the "Trial and error" method
'Unless some controls get added and removed dynamicly in that 3rd party application, the
'index should always remain the same
'MaxTextLength has 201 bytes : 200 char max + terminating null character.
Dim MaxTextLength As Integer = 200
Dim Pointer As IntPtr = System.Runtime.InteropServices.Marshal.AllocHGloba l(MaxTextLength) '
Dim TextLength As Integer = SendMessageA(ListOfChild(0), WM_GETTEXT, CType(MaxTextLength, IntPtr), Pointer)




اینم یک مثال دیگه که متن داخل یک WordPadرو می خونم باهاش

Dim hwnd As Integer = FindWindow(Nothing, "Document - WordPad")
Dim hwndchild As Integer = FindWindowEx(hwnd, 0, "RICHEDIT50W", vbNullString)
Dim TextLen As Integer = SendMessage(hwndchild, WM_GETTEXTLENGTH, 0, 0)
Dim Buffer As String = New String(" "c, TextLen)
SendMessageByString(hwndchild, WM_GETTEXT, TextLen, Buffer)
فکر می کنم یه چیزی شبیه کلاس ToolbarWindows32 باشه .
داخل ویندوز Xp وقتی هندل تولبار پایین ویندوز قسمت Quick Launch رو می گیریم یه شی ء هست که Text اون Quick Launch هست ولی هندل برنامه هایی که داخلش قرار داده شدند رو نمی تونیم بدست بیاریم .
که احتمالا این شی ء یه خاصیتی داره که می شه این اطلاعات رو ازش درآورد .

احتمالا کلاس Qt یا همون Qwidget هم اینجوری باشه .
دوستان ؟! لطفا راهنمایی کنید
اسم این کلاس اشناس !
فک کنم توی برنامه نیمباز دیدم اینو.
منم نتونستم باهاش کار کنم. !