PDA

View Full Version : ارسال پی ام یاهو



alireza-th
چهارشنبه 12 اردیبهشت 1386, 21:57 عصر
سلام ببخشید من یک مشکلی دارم اونم این هست که نمیدونم چجوری به یاهو پی ام ارسال کنم مثلا یک کد هست =




Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
ShellExecute Me.hwnd, "open", "ymsgr:sendIM?" + Text1.Text + "&m=" + Text2.Text, 0&, App.Path, 0&
SendKeys "{enter}"
End Sub


اما وقتی اجرا میکنم پروژه رو پنجره پی ام یاهو باز میشه و متنی که میخوام نوشته میشه اما کلید send کلیک نمیشه یعنی با sendkeys "{enter}" نمیشه این دکمه رو فشار داد چیکار میشه کرد؟

amirsadeghi
چهارشنبه 12 اردیبهشت 1386, 23:08 عصر
باید فوکوس روی کلید باشه تا کد ارسال شه

__siavash__
پنج شنبه 13 اردیبهشت 1386, 06:06 صبح
ببین این جواب میده


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
ShellExecute Me.hwnd, "open", "ymsgr:sendIM?" + Text1.Text + "&m=" + Text2.Text, 0&, App.Path, 0&
Doevents
SendKeys "{enter}"
End Sub

amirsadeghi
پنج شنبه 13 اردیبهشت 1386, 14:25 عصر
فکر میکنم با استفاده از هندل پنجره و هندل کلید راحت تر بتونی کار کنی

__siavash__
پنج شنبه 13 اردیبهشت 1386, 15:21 عصر
این کد بعد ازاجرا پیغام رو سند میکنه به شرطی که فوکوس رو از روش بر نداری


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
ShellExecute Me.hwnd, "open", "ymsgr:sendIM?" + Text1.Text + "&m=" + Text2.Text, 0&, App.Path, 0&
Doevents
SendKeys "{enter}"
End Sub

اما میتونی با تابع Findwindow هندل همین پنجره رو بگیری بعد با تابع SetForegroundWindow اونو بیاری جلو بعد کلید اینتر رو سند کنی

alireza-th
پنج شنبه 13 اردیبهشت 1386, 20:47 عصر
بله جواب داد ممنون فقط یک سوال داشتم که هندل یک دکمه خاصی رو چجوری میشه گیر آورد یا مثلا هندل یه تکست باکس و اینجور چیزا ؟ اگه یک کمکی هم در اینباره بکنید ممنونتون می شم

amirsadeghi
پنج شنبه 13 اردیبهشت 1386, 21:47 عصر
من یه مقاله دارم واست میفرستم

__siavash__
پنج شنبه 13 اردیبهشت 1386, 22:26 عصر
من یه مقاله دارم واست میفرستم
اگه میشه برای منم بفرست

__siavash__
پنج شنبه 13 اردیبهشت 1386, 22:33 عصر
بله جواب داد ممنون فقط یک سوال داشتم که هندل یک دکمه خاصی رو چجوری میشه گیر آورد یا مثلا هندل یه تکست باکس و اینجور چیزا ؟ اگه یک کمکی هم در اینباره بکنید ممنونتون می شم
خوب کلاس تکس باکسها "Edit" !
حالا مثلا چه تکس باکسی رو هندلشو میخوای بگیری شاید بتونم کدشو برات بنویسم

amirsadeghi
پنج شنبه 13 اردیبهشت 1386, 22:36 عصر
چشم پیداش کردم همین جا میزارم

Developer Programmer
پنج شنبه 13 اردیبهشت 1386, 22:44 عصر
یه سر به فوروم andreaVB بزن و عبارت yahoo booter رو سرچ کن. سالها پیش برنامه اش رو که مینوشتم به همین مشکلها برخورده بودم. همونجا به جواب سوالاتت میرسی.

alireza-th
جمعه 14 اردیبهشت 1386, 11:30 صبح
ممنون از همگی البته من منظورم هندل یه تکست باکس خاصی نبود منظورم کلا بدست آوردن هندل کلید تکست باکس لیبل و ... هست که تو برنامه ها استفاده میشه

__siavash__
جمعه 14 اردیبهشت 1386, 12:10 عصر
خوب به عنوان مثال من تکست باکس پسورد یاهو رو این طوری پیدا میکنم (تست شده رو یاهو 8)


yhwnd = FindWindow("YahooBuddyMain", vbNullString)
yhwnd = GetWindow(yhwnd, GW_CHILD)
yhwnd = FindWindowEx(yhwnd, ByVal 0&, "Edit", vbNullString)
yhwnd = GetWindow(yhwnd, GW_HWNDNEXT) 'اینجا هندل لیبیل پسورد رو بهت میده
yhwnd = GetWindow(yhwnd, GW_HWNDNEXT) 'اینجا هم که هندل تکست باکس پسورد توش قرار میگیره

حالا با داشتن هندلش هر کاری بخوای میتونی باش بکنی !!!

amirsadeghi
جمعه 14 اردیبهشت 1386, 12:40 عصر
تو نرم افزارهای دیگه چی ؟

__siavash__
جمعه 14 اردیبهشت 1386, 12:45 عصر
خوب باید اول بدنه ی اصلی اونو پیدا کنی بعد پنجره ی Child رو پیدا کنی بعد هم مثل بالا با FindWindowEx و GetWindow میری تا به تکست باکس برسی

sohrab o
جمعه 14 اردیبهشت 1386, 12:49 عصر
Sub ClickSend()
Dim imclass As Long, Button As Long
imclass = FindWindow("imclass", vbNullString)
Button = FindWindowEx(imclass, 0&, "button", vbNullString)
Button = FindWindowEx(imclass, Button, "button", vbNullString)
Button = FindWindowEx(imclass, Button, "button", vbNullString)
Button = FindWindowEx(imclass, Button, "button", vbNullString)
Call SendMessageLong(Button, WM_KEYDOWN, VK_SPACE, 0&)
Call SendMessageLong(Button, WM_KEYUP, VK_SPACE, 0&)
End Sub

sohrab o
جمعه 14 اردیبهشت 1386, 12:50 عصر
البته اول


Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public 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
Public Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Public 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
Public Const WM_SETTEXT = &HC
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const VK_SPACE = &H20

amirsadeghi
جمعه 14 اردیبهشت 1386, 12:50 عصر
نمونه کد ندارید؟

sohrab o
شنبه 15 اردیبهشت 1386, 13:31 عصر
بابا همین یه نمونست دیگه

sohrab o
شنبه 15 اردیبهشت 1386, 13:35 عصر
برو تو قسمت معرفی OCX تا واست چند تا برنامه بزارم

D32.00110
یک شنبه 16 اردیبهشت 1386, 11:05 صبح
با اینا نمیشه عزیز ...

نمونه کد ندارید؟
دیدم خیلی ها این مشکل رو دارن گفتم یه برنامه کوچیک بنویسم .
اینو ببین مشکلت حل میشه :

http://d32-00110.persiangig.com/VB/FindObject.zip