PDA

View Full Version : کمک درباره SendMessage



oYaMaa
شنبه 10 تیر 1391, 00:57 صبح
سلام دوستان

می خواستم بدونم دستور کلیک روی دکمه از طریق SendMessage چیه؟
همچنین اگر بخواهیم از طریق دستورات هندل به جای فرستادن (SendMessage) به برنامه دیگری، بخوایم مثلا از فلان تکست باکسش متن داخلشو استخراج کنیم، باید چطور عمل کرد؟

ممنون

the king
شنبه 10 تیر 1391, 01:25 صبح
سلام دوستان

می خواستم بدونم دستور کلیک روی دکمه از طریق SendMessage چیه؟
همچنین اگر بخواهیم از طریق دستورات هندل به جای فرستادن (SendMessage) به برنامه دیگری، بخوایم مثلا از فلان تکست باکسش متن داخلشو استخراج کنیم، باید چطور عمل کرد؟


Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long


ممنون
اگر شماره hWnd اش را می دانید دو رخداد MouseDown و MouseUp پی در پی رو بهش ارسال کنید :

SendMessage hWnd, WM_LBUTTONDOWN, 0, ByVal 0&
SendMessage hWnd, WM_LBUTTONUP, 0, ByVal 0&


اگر اون TextBox ساده و استاندارد باشه می توانید متن اش را بخوانید، فقط باید hWnd اش را بدانید :

Private Const WM_GETTEXT As Long = &HD
Private Const WM_GETTEXTLENGTH As Long = &HE

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long



Dim length As Long
Dim strData() As Byte
Dim text As String
length = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, ByVal 0&)
ReDim strData(0 To length + 1)
SendMessage hWnd, WM_GETTEXT, length + 1, strData(0)
text = Left(StrConv(strData, vbUnicode), length)
MsgBox text

بهروز عباسی
شنبه 10 تیر 1391, 01:28 صبح
http://www.adras.com/WM-CLICK.t3833-16.html


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Const WM_LBUTTONDOWN = &H201

Private Sub Command1_Click()
SendMessage Command2.hWnd, WM_LBUTTONDOWN, 0&, 0&
End Sub

Private Sub Command2_Click()
MsgBox "Test"
End Sub

Private Sub Command2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "Test WWW"
End Sub


موفق باشی

oYaMaa
شنبه 10 تیر 1391, 10:29 صبح
دوستان کسی نیست جواب بده؟

سید حمید حق پرست
شنبه 10 تیر 1391, 10:54 صبح
سلام علیکم

نمیدونم چند بار بگیم جستجو کنید
دوست عزیز جستجو کن . قبلا یه تاپیک در این مورد زدم که دوستان عزیز فروم راهنمایی کردن و توضیحات مفصلی دادن
لینکش :
http://barnamenevis.org/showthread.php?332649-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-%DB%8C%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%DB%8C%DA%AF%D9%87

موفق باشید

یا علی (ع)

oYaMaa
شنبه 10 تیر 1391, 11:02 صبح
سلام علیکم

نمیدونم چند بار بگیم جستجو کنید
دوست عزیز جستجو کن . قبلا یه تاپیک در این مورد زدم که دوستان عزیز فروم راهنمایی کردن و توضیحات مفصلی دادن
لینکش :
http://barnamenevis.org/showthread.php?332649-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-%D8%AA%DA%A9%D8%B3%D8%AA-%D8%A8%D8%A7%DA%A9%D8%B3-%DB%8C%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%DB%8C%DA%AF%D9%87

موفق باشید

یا علی (ع)

دوست عزیز من جستجو کردم، اتفاقا همین تایپیک رو هم دیدم، با این وجود به نتیجه نرسیدم.
سورسی که ضمیمه کردم تقریبا کامله.یعنی متن رو به تکست باکس مورد نظر ارسال می کنه.اما روی دکمه کلیک نمیشه و نمیتونه از تکست باکس برنامه خارجی متن رو استخراج کنه.کد هاش هست اما عمل نمی کنه.
دقت داشته باشید که برنامه خارجی یک نرم افزار مستقل هستش.
از دوستان دیگه کسی نیست ایراد برنامه رو رفع کنه؟

Veteran
شنبه 10 تیر 1391, 11:17 صبح
با سلام.
در اون تاپیک توضیحات نسبتا کاملی وجود داشت.
به صورت کد و توضیح.
اما متاسفانه دوستان استفاده نادرست کردن از کد ها.به همین علت پاک کردم کد هارو.
دقیقا میخواید چیکار کنید ؟

سید حمید حق پرست
شنبه 10 تیر 1391, 11:26 صبح
سلام علیکم


با سلام.
در اون تاپیک توضیحات نسبتا کاملی وجود داشت.
به صورت کد و توضیح.
اما متاسفانه دوستان استفاده نادرست کردن از کد ها.به همین علت پاک کردم کد هارو.
دقیقا میخواید چیکار کنید ؟

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

موفق باشید

یا علی (ع)

oYaMaa
شنبه 10 تیر 1391, 11:26 صبح
ببینید فایلی که تو پست 4 ضمیمه کردم رو اصلاح کنید ممنون می شم.
می خوام روی دکمه کلیک کنم و متن داخل تکست باکس برنامه خارجی رو استخراج کنم.
اگر یک سری کد ها هم برای کار با چک باکس و کومبو باکس هم واسم مثال بزنید ممنون میشم.

Veteran
شنبه 10 تیر 1391, 11:49 صبح
ببخشید من که استفاده نادرست نکردم دوست عزیز:متفکر:

موفق باشید

بعضی از دوستان پیغام داده بودن که مشخص شد استفاده نادرست میخوان بکنن
==============
[QUOTE]
ببینید فایلی که تو پست 4 ضمیمه کردم رو اصلاح کنید ممنون می شم.
می خوام روی دکمه کلیک کنم و متن داخل تکست باکس برنامه خارجی رو استخراج کنم.
اگر یک سری کد ها هم برای کار با چک باکس و کومبو باکس هم واسم مثال بزنید ممنون میشم. میخواد متن کدوم برنامه رو در بیارید ؟
طبق سورس میخواید با یاهو کار کنید.
اما کدوم قسمتش ؟

oYaMaa
شنبه 10 تیر 1391, 11:58 صبح
یاهو به عنوانه مثاله!
مگه تفاوتی هم می کنه؟ فرقش فقط هندل هستش دیگه؟
الان تو این مثال پنجره چت یاهو مد نظره
دقت کنید که نمی خوام اینتر بزنم می خوام روی دکمه کلیک بشه
ممنون

سید حمید حق پرست
شنبه 10 تیر 1391, 12:13 عصر
بعضی از دوستان پیغام داده بودن که مشخص شد استفاده نادرست میخوان بکنن
میشه بگید مثلا چه استفاده نادرستی :قلب:


یا علی (ع)

Veteran
شنبه 10 تیر 1391, 12:21 عصر
ببینید دوست عزیز.
شما اول باید هندل رو به دست بیارید.
هندل کدوم قسمت ؟
اول باید هندل پنجره ای که شی مورد نظر داخلش هست رو به دست بیارید.
واسه این کار 2 تا Api نیاز داریم
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
بالایی برای به دست اوردن هندل پنجره هست
که 2 تا پارامتر داره.
اولی اسم کلاس اون پنجره
دومی عنوان پنجره مورد نظر.
میتونین با هر2تا هندل رو به دست بیارید.
یا اسم کلاس یا عنوان.با هر کدوم میخواید کار کنید
مقدار اون یکی پارامتر رو باید با VbnullString مقدار دهی کنیم.
FindWindow("CConvWndBase", vbNullString)

FindWindow(vbNullString, "Onvan")
حالا بعد از پیدا کردن هندل پنجره باید بریم هندل اشیای داخل پنجره رو به دست بیاریم.
با Api زیر/

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
پارامتر اول هندل پنجره اصلی هست.
پارامتر دوم رو 0 میدیم.چون اینجا به کار نمیاد.
پارامتر سوم رو اسم کلاس اون شی میدیم.
پارامتر چهارم هم اینجا به کار نمیاد. و VbnullString میدیم
پارامتر دوم و چهارم موقعه ای به کار میاد که بخوایم بیش از 1 شی رو به دست بیاریم.
FindWindowEx(Handele Window, 0&, "YIMInputWindow", vbNullString)

شما باید از پنجره اصلی شروع کنید هندل هارو به دست بیارید.
مثلا اگر یک پنجره داریم که توی اون یک فریم هست و داخل فریم یک تکست باکس
باید اول هندل پنجره رو به دست بیاریم
بعد از روی هندل پنجره هندل فریم رو به دست بیاریم.
بعد از روی هندل فریم هندل تکست باکس رو به دست بیاریم.
برای ارسال متن
نیاز به Api زیر داریم
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

پارامتر اول هندل تکست باکس هاست
پارامتر دوم &HC
پارامتر سوم 0
پارامتر 4 هارم متن که میخوایم ارسال بشه

SendMessageByString ChildClass , &HC, 0, ByVal "Barnamenevis"
برای کلیک روی دکمه هم باید هندل رو به دست بیاریم
بعد از به دست اوردن
SendMessageByString hWndButton, &HF5, 0, 0
hWndButton: هندل دکمه هست.
امیدوارم که متوجه شده باشید.
موفق و موعید باشید.
امیدوارم استفاده نادرست نکنید/

oYaMaa
شنبه 10 تیر 1391, 12:32 عصر
با تشکر از Veteran (http://barnamenevis.member.php?160830-Veteran) عزیز!
پاسخ خیلی کاملی دادید اما نیاز به این همه توضیح نبود من فقط همین تیکه آخرو می خواستم.ولی بازم خیلی لطف کردی که وقت گذاشتی جواب دادی.

اگه بخوام بیشتر درباره دستورات ارسالش بدونم، مرجعی هست؟
مثلا درباره کار با کومبو باکس و چک باکس و اینا...

راستی نگفتید چطور متن رو ازش استخراج کنم!
ممنون

سید حمید حق پرست
شنبه 10 تیر 1391, 13:04 عصر
بعضی از دوستان پیغام داده بودن که مشخص شد استفاده نادرست میخوان بکنن

اقای Veteran (http://barnamenevis.org/member.php?160830-Veteran) عزیز بدون مدرک نمیشه که حرف دهن مردم گزاشت و تهمت زد . شما گفتید استفاده نادرست خب بگید چه استفاده نادرستی با این کد میشه کرد و من کردم تا بنده هم بگم واسه چی میخواستم
امیدوارم جواب بدهید چون باید معلوم بشه من چه استفاده نادرستی کردم . اصلا من تو فروم با کسی بجز اقای ترکاشوند ( Mtp ) با کس دیگه ای ارتباط ندارم . پس کی این حرفو زده یا چه استفاده نادرستی

لطفا جواب بدهید!!!!!!!!!!

یا علی (ع)

Veteran
شنبه 10 تیر 1391, 14:04 عصر
اقای Veteran (http://barnamenevis.org/member.php?160830-Veteran) عزیز بدون مدرک نمیشه که حرف دهن مردم گزاشت و تهمت زد
100%
به نکته خوبی اشاره کردید.
==


شما گفتید استفاده نادرست خب بگید چه استفاده نادرستی با این کد میشه کرد و من کردم تا بنده هم بگم واسه چی میخواستم
امیدوارم جواب بدهید چون باید معلوم بشه من چه استفاده نادرستی کردم
من گفتم شما استفاده نادرست کردید ؟؟؟؟

با این کد میشه کرد و من کردم تا بنده هم بگم واسه چی میخواستم
طوری صحبت میکنین انگار من صریح و واضح و مستقیم گفتم اقای سید حمیدحق پرست استفاده نادرست کرده.
اسپم نکنید لطفا مشکلی دارید فقط پیغام خصوصی.
=====
اما سوال دوست عزیزمون

کومبو باکس معمولا مثل تکست باکس هست.
اما چک باکس/
ما با کلیک کردن بر روی یک چک باکس میتونیم تیک اونو بزنیم و یا ورداریم.
کافیه همین عمل رو با وی بی پیاده سازی کنیم/
اول هندل اونو به دست میاریم/
بعد با این کد کلیک میکنیم.

Private Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202

Private Sub Command1_Click()
Dim MyHwnd As Double
MyHwnd = 66256
Call SendMessageLong(MyHwnd, WM_LBUTTONDOWN, 0&, 0&)
Call SendMessageLong(MyHwnd, WM_LBUTTONUP, 0&, 0&)
End Sub

oYaMaa
شنبه 10 تیر 1391, 14:13 عصر
ممنون! بله درسته کار با کومبو باکس و چک باکس مثل دکمه هست!
اما من یه تست دیگه ای که کردم این بود که نتونستم روی چیزای دیگه کلیک کنم.مثلا کلیک روی یک عکس، یا کلیک روی toolbar ها، منوها، سطر های لیست باکس ها و ...
اگه میشه راجع به این ها هم یه توضیحی بدید.
ممنون

سید حمید حق پرست
شنبه 10 تیر 1391, 14:24 عصر
من گفتم شما استفاده نادرست کردید ؟؟؟؟
طوری صحبت میکنین انگار من صریح و واضح و مستقیم گفتم اقای سید حمیدحق پرست استفاده نادرست کرده.
اسپم نکنید لطفا مشکلی دارید فقط پیغام خصوصی.


دوست عزیز اگر توجه کنید در پست قبلی (که در زیر اوردم) من پرسیدم چه استفاده نادرستی کردم . شما چی جواب دادید . اگر منظورتون من نبود باید در همون پست این رو هم میگفتید
خلاصه من قسط توهین نداشتم و چون در پست قبلیتون اونجوری جواب دادید فکر کردم منظورتون بنده هست . خلاصه شرمنده



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

موفق باشید

بعضی از دوستان پیغام داده بودن که مشخص شد استفاده نادرست میخوان بکنن



این تنها برنامه ای بود که بنده باهاش ساختم فعلا :

http://marivansoft.com/wp-content/uploads/2012/06/Sheklak-L4i.jpg

در اخر بازم عذر میخوام . قسط توهین نداشتم

موفق باشید


یا علی (ع)

Veteran
شنبه 10 تیر 1391, 17:27 عصر
.مثلا کلیک روی یک عکس، یا کلیک روی toolbar ها، منوها، سطر های لیست باکس ها و ...
عکس کجا ؟ توی سیستم ؟
نمیشه
=====
منو ها هم چون هندل یکسانی دارند با این روش نمیشه.
=====
سطر های لیست باکس هم چون دارای یک هندل مشخص هست با این روش نمیشه.
=====

oYaMaa
شنبه 10 تیر 1391, 20:14 عصر
پس چه راهی هست که چنین ارتباطاطی رو با یه برنامه خارجی بر قرار کرد؟

oYaMaa
یک شنبه 11 تیر 1391, 11:53 صبح
آقای Veteran عزیز روی لینک چطور؟
داخل برنامه خارجی اگر label باشه و هندل مشخصی داشته باشه، چطور روش کلیک کنم؟
با دستور کلیک روی دکمه زدم عمل نکرد.
ممنون میشم در این مورد هم کمکم کنید.