PDA

View Full Version : بدست آوردن هندل يك ليبل با api ؟؟؟



farshid_vb
شنبه 30 اردیبهشت 1391, 15:06 عصر
سلام يه سوال هم من داشتم
يه message box در يه برنامه اي باز ميشه
توش يه پيغامي ميده
من ميخوام بخونمش با توابع API ولي بدست نميوتنم بيارمش
++spy هم نميتونه چيزي بدست بياره !!! چي كار ميشه كرد ؟
ميشه با يه شمارنده از هندل فرم باز كه messagebox هستش 1000 بالا تر يا 200000 بالاتر و پايين تر از اون را خوندش و شايد به متن مورد نظر برسم ؟

يعني اون ليبلي كه توش خطا نوشته ميشه هيچ هندلي نداره ؟؟؟

اصلا ليبلها هندل دارن ؟ ... مردم ؟ ميشه ؟ داريم ؟ اصلا هستش به نظر شما ؟
يه نگاهي هم به دوربين با كيفيت اون بالا بندازين .... ( تكه كلام برنامه خنده بازار - پارك علت )


خوش باشيد

mohammadriano
چهارشنبه 17 خرداد 1391, 20:17 عصر
؟
اصلا چرا یک message box خودتون طراحی نمی کنین؟؟!!
فکر کنم بیشتر توضیح بدین به جوابتون میرسین

محسن واژدی
چهارشنبه 17 خرداد 1391, 22:22 عصر
سلام
برچسب ها هندل ندارند!

موفق باشید

farshid_vb
یک شنبه 21 خرداد 1391, 10:02 صبح
من می خواستم متن نوشته شده داخل یک لیبل که در برنامه دیگری هستش را بخونم
که البته دوست عزیزمون
آقا
محسن واژدی (http://barnamenevis.org/member.php?104729-%D9%85%D8%AD%D8%B3%D9%86-%D9%88%D8%A7%DA%98%D8%AF%DB%8C)
http://barnamenevis.org/images/statusicon/user-online.png
می فرمایند که نمیشه ...
اگه کسی بلده بگه تا ما هم یاد بگیریم
من برنامه ای دارم که وقتی روی دکمه ok اون کلیک میکنم بسته به اطلاعاتی که در برنامه نوشته شده پیغامهای خاصی داخل یک msgbox نمایش داده میشه
این برنامه مربوط به یه شرکت هستش
حالا می خوام برنامه ای با api بنویسم که خودش بیاد روی کلید ok برنامه اون شرکت کلیک کنه و پیغام اونو با کمک Api به برنامه خودم منتقل کنم


ممنون
در یک کلام میخوام پیغام msgbox یه برنامه دیگه رو بخونم
:شیطان:

محسن واژدی
یک شنبه 21 خرداد 1391, 20:20 عصر
سلام
منظور بنده از برچسب، برچسب های مورد استفاده وی بی است،
برچسب های موجود در message-boxها همانند سایر اشیاء هندل دارند
برای اینکار کد زیر را در یک مادول کد یا فرم کپی کنید:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount 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 Const GW_HWNDNEXT As Long = 2
Private Const GW_CHILD As Long = 5

Public Function GetMsgBoxText(ByVal sWinTitle$, Optional ByVal sObjClass$ = "#32770") As String
On Error Resume Next
Dim mn_hwnd&, ch_hwnd&
Dim class_nam$, obj_cap$
mn_hwnd& = FindWindow(sObjClass$, sWinTitle$)
ch_hwnd& = GetWindow(mn_hwnd&, GW_CHILD)
Do While ch_hwnd& > 0
class_nam$ = String$(50, Chr(0))
GetClassName ch_hwnd&, class_nam$, Len(class_nam$)
obj_cap$ = String$(255, Chr(0))
GetWindowText ch_hwnd&, obj_cap$, Len(obj_cap$)
obj_cap$ = Left$(obj_cap$, InStr(1, obj_cap$, Chr(0)) - 1)
If class_nam$ Like "Static*" And obj_cap$ > "" Then
GetMsgBoxText = obj_cap$
Exit Do
End If
ch_hwnd& = GetWindow(ch_hwnd&, GW_HWNDNEXT)
Loop
End Function

sWinTitle: عنوان پنجره پیام، که عموما بایستی مشخص شود

نمونه:

Private Sub Command1_Click()
MsgBox "Msg contents: " & vbNewLine & GetMsgBoxText("MyMessage")
End Sub


موفق باشید

setroyd
یک شنبه 28 خرداد 1391, 01:21 صبح
برای زدن Ok هم میتونی از sendmessage و ثابت BM_CLICK = &HF5 این استفاده کنی .