PDA

View Full Version : کلیک روی دکمه با استفاده از هندل



CodeKhor
سه شنبه 19 فروردین 1393, 05:29 صبح
سلام دوستان قبل از این که بگید اول سرچ میکردی بعد تاپیک میزدی باید بگم 2 روزه دارم سرچ میکنم تو انجمن ولی به نتیجه نرسیدم

من میخوام هندل این دکمه رو بگیرم(برنامه پیوست شده) بعد با تابع sendmessage روی اون کلیک کنم ولی مشکل اینجاست که نوع این دکمه با بقیه فرق داره من توی اکثر برنامه ها میتونم این کارو کنم ولی این مدل دکمه کلا فرق داره هرکاری میکنم نمیشه روش کلیک کرد ! واقعا گیر کردم !

117752

setroyd
سه شنبه 19 فروردین 1393, 08:18 صبح
برای اینکه شما از jcbutton ستفاده کردی و این usercontrol از class button نیست چراکه یک DC هست که با متدگرافیکی روش یک کامند طراحی شده ! شما در صورتی میتونی کلیک کنی که مثلا با توابع api با createwindow طراحی شده باشه اون command باز اگه جای سوالی بود بپرس حتما برات بیشتر توضیح میدم .

CodeKhor
سه شنبه 19 فروردین 1393, 08:34 صبح
بله شما درست میگید اینو میدونم ولی خوب برنامه های زیادی هستند که command هایی که توی اونها استفاده شده مثل همین jcbutton هستند و class button نیستند چطور میشه درخواست کلیک رو برای اینجور button ها فرستاد ؟ راهی داره ؟

ممنون میشم بیشتر توضیح بدی

AbbasVB
چهارشنبه 20 فروردین 1393, 13:05 عصر
با سلام
اگر طراح دکمه برای آن یک تابع مدیریت پیغام نوشته باشد و برای رویداد کلیک مقداری را در نظر گرفته باشد با دانستن آن مقدار می توان این کار را انجام داد

CodeKhor
چهارشنبه 20 فروردین 1393, 20:09 عصر
خوب بله ولی مشکل اینجاست که ما به کد برنامه دسترسی نداریم !

setroyd
پنج شنبه 21 فروردین 1393, 06:23 صبح
خب شما میتونی با چک کردن class اون handle با api چک کنیکه نوع class از commandbutton هست یا نه به همین سادگی !

CodeKhor
پنج شنبه 21 فروردین 1393, 11:49 صبح
خوب این کار که با تابع GetClassName به راحتی انجام میشه و نوع class رو ThunderUserControlDC میده ! ولی مشکل اینه که چطور درخواست کلیک رو بفرستیم !

AbbasVB
پنج شنبه 21 فروردین 1393, 12:43 عصر
خوب بله ولی مشکل اینجاست که ما به کد برنامه دسترسی نداریم !
خوب پس شما این برنامه رو از کجا آورده ای؟
چون شما از OCX که استفاده نکرده ای و این کنترل با خود برنامه کامپایل شده است!!!!!!!1؟
:متفکر:

CodeKhor
پنج شنبه 21 فروردین 1393, 14:15 عصر
خوب پس شما این برنامه رو از کجا آورده ای؟
چون شما از OCX که استفاده نکرده ای و این کنترل با خود برنامه کامپایل شده است!!!!!!!1؟
:متفکر:

بله شما درست میگید کد اون button هم با خود برنامه کامپایل شده ولی من اون برنامه رو گذاشتم که راحتر بتونید ببینید اگرنه مشکل اصلی من با برنامه Wi-Free اینم لینکش :

http://www.wi-free.com/download/windows/install-wi-free-2.0-1356356928.exe

برنامرو که نصب کنید اول باید رجیستر کنید البته از نوع یوزر free بعد برنامه که باز میشه یک دکمه start داره وقتی روش کلیک میکنی تبدیل میشه به Stop من میخوام درخواست کلیک رو با SendMessage به اون دکمه بفرستم ولی به هیچ عنوان نمیشه ! حتی خواستم فوکوس بدم به دکمه بعد با SendKeys اینتر بزنم که بازهم نشد رو برنامه های دیگه کار میده ولی رو این نمیشه !!! :متعجب:

AbbasVB
پنج شنبه 21 فروردین 1393, 14:59 عصر
خوب دوست عزیز اینو از اول می گفتی
این برنامه قضیه اش فرق داره
احتمالا این برنامه مقادیر ارسالی به خودش رو می گیره و پردازش می کنه چون کلاس هاش مثل همه کلاس ها نیست
من یه چندتا مقدار استاندارد بهش فرستادم ولی اصلا جواب نداد
حتی با تابع SetWindowLong و CallWindowProc خواستم پیغام های ارسالی بهش رو بگیرم ولی مثل این که با این توابع نمی شه پنجره یه برنامه دیگه رو زیر نظر گرفت
حالا خودت بازم یه تستی بزن ببین می شه!
خود این برنامه هم از این توابع استفاده کرده

CodeKhor
پنج شنبه 21 فروردین 1393, 16:37 عصر
با اون توابع که فکر نمیکنم بشه کاری کرد :متفکر: یه سوالی ؟؟ برنامه ای هست که مثل wirshark که تمام کارهای کارت شبکه رو snif میکنه کارهای موس رو snif کنه و مقداریری که فرستاده میشه به ما بده ؟؟ چون من تمام این ثابت هارو تست کردم هیچکدوم جواب نداده امکانش هست مقدارهای دیگه ای فرستاده بشه ؟؟؟

Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101

حالا اصلا اگر نخوایم از sendmessage یا sendkeys استفاده کنیم راه دیگه ای هست به جز اینا ؟؟؟

AbbasVB
پنج شنبه 21 فروردین 1393, 18:56 عصر
با اون توابع که فکر نمیکنم بشه کاری کرد :متفکر: یه سوالی ؟؟ برنامه ای هست که مثل wirshark که تمام کارهای کارت شبکه رو snif میکنه کارهای موس رو snif کنه و مقداریری که فرستاده میشه به ما بده ؟؟ چون من تمام این ثابت هارو تست کردم هیچکدوم جواب نداده امکانش هست مقدارهای دیگه ای فرستاده بشه ؟؟؟
اون دو ای پی آی که گفتم برای همین کار بودن ولی نمی دونم جرا روی فرم های برنامه های دیگه ای پی آی SetWindowLong کار نمی کنه
خوب اینم یه جور کلاسه دیگه حتما پیغام داره
اصلا ویندوز با پیغام کار می کنه
ولی پیغام هاشو یه جوری که دوست داشه تنظیم کرده توی وی بی هم می شه همچین کاری کرد که پیغام مورد نظر رو دریافت کنه و یه کاری انجام بده

حالا اصلا اگر نخوایم از sendmessage یا sendkeys استفاده کنیم راه دیگه ای هست به جز اینا ؟؟؟
احتمالا بشه
اگر بشه هندل برنامه رو گرفت و مختصات دکمه رو به دست آورد و موس روش قرار داد و موس رو کلیک کرد احتمالا بشه

mehran901
پنج شنبه 21 فروردین 1393, 19:42 عصر
با اون توابع که فکر نمیکنم بشه کاری کرد :متفکر: یه سوالی ؟؟ برنامه ای هست که مثل wirshark که تمام کارهای کارت شبکه رو snif میکنه کارهای موس رو snif کنه و مقداریری که فرستاده میشه به ما بده ؟

برنامه spy++ همراه خود ویبی جزو tools ها هست

CodeKhor
شنبه 23 فروردین 1393, 12:54 عصر
برنامه spy++ همراه خود ویبی جزو tools ها هست

من نتونستم این برنامه رو پیدا کنم ! آدرس دقیقشو میدی ؟

CodeKhor
شنبه 23 فروردین 1393, 14:26 عصر
دوستان من با این کد به نتیجه رسیدم :قلب: تشکر از همه دوستانی که کمک کردن :قلب: کد میزارم شاید کسی لازمش شد !



Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dX As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const LEFT_DOWN = &H18
Private Const LEFT_UP = &H43
Private Sub LeftClick()
mouse_event LEFT_DOWN, 0&, 0&, X, Y
mouse_event LEFT_UP, 0&, 0&, X, Y
End Sub

سپهر-111
یک شنبه 24 فروردین 1393, 08:52 صبح
سلام دوست عزیز
شما مختصات فرم بدست آوردی و اونجایی که دکمه هست را دستور کلیک چپ موس دادی ؟؟!

CodeKhor
یک شنبه 24 فروردین 1393, 17:11 عصر
سلام دوست عزیز
شما مختصات فرم بدست اوردی و اونجایی که دکمه هست را دستور کلیک چپ موس دادی ؟؟!

سلام

بله ! دقیقا همین کارو کردم !