PDA

View Full Version : قرار دادن یک رشته در تکست باکس برنامه ای دیگر



one hacker alone
سه شنبه 01 آذر 1390, 15:18 عصر
با یاد خدا
سلام به بچه های برنامه نویس
دوستان فرض کنید ما یه برنامه داریم که به شکل زیر هست یعنی یه textBox داره و دکمه ای برای ok کردن حالا
میخواستم بدونم آیا امکان داره ما برنامه ای برای چک کردن لیست پسورد به روی این برنامه بنویسیم
http://www.mirsoft.net/picture/mobile/safe_enter_passwd.gif
یعنی یه برنامه بنویسم که خودش پسورد رو تو تکست باکس بنویسه و خودش دکمه done رو بزنه (برنامه تحت ویندوز هست )
البته این شکل یه مثال هست و سوال من کلی هست
در کل آیا این امکان پذیر هست یا نه مثلا بعد از اینکه هندل پنجره رو بگیریم بعد برای ست کردن پسورد و زدن دکمه
تابع sendmessage كارمون رو راه ميندازه اما ببينيد مثلا ميخوايم برنامه Run رو دستكاري كنيم اول اينكه هندل پنجره رو ميگيريم خوب اين كه كاري نداره بعد اگه بخوايم عنوان پنجره رو دستكاري كنيم باز اون هم امكان پذير هست اما اگه بخوايم تكست باكس يا دكمه رو دستكاري كنيم بايد اسم اون رو بدونيم مثلا من رو برنامه هاي خودم كار ميكردم ميدونستم كه تكست باكس من text1 هست اما براي run و يا برنامه هاي ديگه اسم كنترل رو نميدونم تا بتونم دستكاريش كنم ظاهرا كنترل ها هم هندل دارن اما اينكه هندلشون هم بتونه كارمون رو راه بندازه يا نه نميدونم
خلاصه الان مشكل فهميدن اسم كنترل هست
شما پيشنهادتون چيه
برنامه SPY هم به ما هندل رو میده نه اسم کنترل حالا راهی هست
http://www.pic.iran-forum.ir/images/wayf94zm1taz8izdvgbl.jpg

_behnam_
سه شنبه 01 آذر 1390, 15:48 عصر
واسه اینکه بخوای روی کامند کلیک کنی و یا به تکست باکس رشته بفرستی باید هندل اون رو بدست بیاری!
حالا شما میخوای اسم کنترلهارو بدونی که باهاشون هندل کنترل رو بدست بیاری؟!
به نظرم از برنامه FiRE parent getter استفاد کن. برنامه خوبی هست موس رو روی هر کنترلی بکشی بهت کد ویژوال بیسیک برای بدست اوردن هندل رو میده


موفق باشید

mr-adler
سه شنبه 01 آذر 1390, 16:38 عصر
سلام

برنامه SPY هم به ما هندل رو میده نه اسم کنترل حالا راهی هست
برنامه spy به ما هندل + کپشن + کلاس رو نشون میده !

شما پيشنهادتون چيه
چون کپشن همیشه ثابت نیست برای پیدا کردن هندل از کلاس شی استفاده کن !

one hacker alone
چهارشنبه 02 آذر 1390, 09:26 صبح
واسه اینکه بخوای روی کامند کلیک کنی و یا به تکست باکس رشته بفرستی باید هندل اون رو بدست بیاری!
حالا شما میخوای اسم کنترلهارو بدونی که باهاشون هندل کنترل رو بدست بیاری؟!


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

محسن واژدی
چهارشنبه 02 آذر 1390, 20:02 عصر
سلام
کد زیر را بررسی کنید:

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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&

lMainHwnd = FindWindow("notepad", vbNullString)

lEdit1 = FindWindowEx(lMainHwnd, 0&, "Edit", vbNullString)

SendMessage lEdit1, WM_SETTEXT, 0&, "New text string"


End Sub


برای بررسی ابتدا برنامه notepad را اجرا کنید

موفق باشید

one hacker alone
شنبه 05 آذر 1390, 10:21 صبح
سلام
کد زیر را بررسی کنید:

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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&

lMainHwnd = FindWindow("notepad", vbNullString)

lEdit1 = FindWindowEx(lMainHwnd, 0&, "Edit", vbNullString)

SendMessage lEdit1, WM_SETTEXT, 0&, "New text string"


End Sub


برای بررسی ابتدا برنامه notepad را اجرا کنید

موفق باشید


مهندس دستت درد نكنه
اما اين برنامه رو من هركاري كردم كه روي برنامه Run ويندوز يا برنامه ساده اي كه خودم نوشتم كار كنه كار نكرد و خروجي دو API اول 0 بود چكارش كنم؟
درضمن كار اون تابع اول چيه چون مگه تابع دومي كار اولي رو نميكنه؟

just4froum
شنبه 05 آذر 1390, 13:21 عصر
با سلام:

تابع اول هندل یک پنجره را بر میگرداند و تابع دوم هندل پنجره را گرفته و یک هندل یکی از زیر مجموعه های آن را بر میگرداند . برای مثال شما یک فرم دارید که در آن یک تکست باکس است شما با تابع اول هندل فرمتون رو بدست میارید و با تابع دوم هندل تکست باکس را بدست میارید.

just4froum
شنبه 05 آذر 1390, 13:23 عصر
اما اين برنامه رو من هركاري كردم كه روي برنامه Run ويندوز يا برنامه ساده اي كه خودم نوشتم كار كنه كار نكرد و خروجي دو API اول 0 بود چكارش كنم؟
درضمن كار اون تابع اول چيه چون مگه تابع دومي كار اولي رو نميكنه؟

احتمالا شما caption یا class شی مورد نظر رو اشتباه وارد کردید برای مثال caption notepad همان notepad و class آن Edit است.

one hacker alone
یک شنبه 06 آذر 1390, 11:47 صبح
احتمالا شما caption یا class شی مورد نظر رو اشتباه وارد کردید برای مثال caption notepad همان notepad و class آن Edit است.


دوست عزیز من caption از spy++ گیرش اوردم و کلا س هم همینطور اما خروجی باز صفر هست
شکل اولی که گذاشتم خروجی spy++ هست caption برنامه run و اون برنامه تستی که خودم نوشتم رو وارد کردم اما برای کلاس کدوم رو بزنم؟
vbNullString چیه؟

just4froum
یک شنبه 06 آذر 1390, 16:50 عصر
دوست عزیز من caption از spy++ گیرش اوردم و کلا س هم همینطور اما خروجی باز صفر هست


شما باید caption را به صورت دقیق وارد کنید یعنی اگر حرفی بزرگ بود به صورت بزرگ و اگر کوچک بود به صورت کوچک وارد کنید و همچنین به فاصله ها هم دقت کنید به عنوان مثال Caption مای کام÷یوتر بدین شکل است (البته در XP)
My Computer
و هر کدام از این حالت ها موجب برگشت صفر خواهد شد.
My computer
my computer
MyComputer
و ...

just4froum
یک شنبه 06 آذر 1390, 16:55 عصر
vbNullString چیه؟

شما می توانید به دو صورت هندل شی یا پنجره ای را بدست آورید :

اول با دادن caption
دوم با دادن Class

به عنوان مثال ما هندل notepad را با caption بدست آوردیم ولی اون قسمتی که در notepad تایپ میکنید را با class یدست آوردیم.

اگر اشتباه نکنم در تابع FindWindow شما میتوانید از class و caption به صورت همزمان استفاده کنید(برای افزایش دقت) ولی در FindWindowEX فقط باید از یکی از آن ها استفاده کنید و در جای دیگر vbnullstring را وارد کنید(به معنای این است که هیچ مقداری را به تابع نمی فرستد)

one hacker alone
دوشنبه 07 آذر 1390, 11:05 صبح
شما باید caption را به صورت دقیق وارد کنید یعنی اگر حرفی بزرگ بود به صورت بزرگ و اگر کوچک بود به صورت کوچک وارد کنید و همچنین به فاصله ها هم دقت کنید به عنوان مثال Caption مای کام÷یوتر بدین شکل است (البته در XP)
My Computer
و هر کدام از این حالت ها موجب برگشت صفر خواهد شد.
My computer
my computer
MyComputer
و ...

مهندس دستت درد نکنه در اون مورد کاملا حواسم بود مثلا در همین مثلالی که شما دادین


lMainHwnd = FindWindow("notepad", vbNullString)

من انتظار داشتم با این دستکاری


lMainHwnd = FindWindow("Run", vbNullString)

در تابع اول مقدار lMainHwnd غیر صفر بشه و طبیعتا باید عمل میکرد اما مقدار برگشتی صفر شد این بین میمونه مقدار vbNullString که من همین ثابت رو در نظر گرفتم

اما چرا کار نمیکنه؟

mr-adler
دوشنبه 07 آذر 1390, 12:28 عصر
من انتظار داشتم با این دستکاری...
نوت پد رو باز کردی؟:متفکر:

one hacker alone
دوشنبه 07 آذر 1390, 13:18 عصر
برای notepad مشکلی ندارم برنامه برای نوت پد کار میکنه و دوست عزیزمون نوشتن اما خواستم رو برنامه های دیگه مثل run یا یه برنامه ساده که خودم نوشتم اجراش کنم کار نمیکنه و علت رو میخواستمک بدونم که چرا رو برنامه های دیگه کار نمیکنه و خروجی 0 میده حد اقل تابع اول که باید یه خروجی میداد عنوان پنجره (Run) رو جای "notepad" نوشتم اما کار نمیکنه

mr-adler
دوشنبه 07 آذر 1390, 13:30 عصر
lMainHwnd = FindWindow("Run", vbNullString)
میدونید اشتباهش کجاست؟ جای کلمه ران را با vbNullString عوض کنید.کلاس پنجره ران از نوع ران نیست...

just4froum
دوشنبه 07 آذر 1390, 17:18 عصر
با سلام : حق با mr-adler هست

من در بالا گفتم که هندل notapad را با caption بدست آوردیم که اشتباه گفتم و با class بدست آوردیم فکر میکنم که شما هم با اشتباه من به اشتباه افتادید.

به هر حال ببخشید.

one hacker alone
چهارشنبه 09 آذر 1390, 13:20 عصر
دستتون درد نکنه با تعویض جاشون تونسم از تابع اول هندل رو بگیرم و برای بدست اوردن هندل کنترل هم کلاس run که ComboBox بود رو جایگزین کردم و تونستم با ران هم کار کنم قسمت بیشتر کارم انجام شده فقط
اگه بخوام مثلا تو پنجره Run دکمه ok رو بزنم چکار کنم؟
فکر کنم باز از 2 تابع اول برای بدست اوردن هندل پنجره و کنترل باید استفاده کنیم بعدش برای فشردن دکمه OK چکار کنیم؟

ممنون _ اگه مشکلی بود در ادامه کار همین جا مطرح میکنم انشاءالله راهنماییمون کنید از پیگیریتون بخصوص دوست عزیز just4froum (http://barnamenevis.member.php?211054-just4froum)ممنونم

just4froum
چهارشنبه 09 آذر 1390, 16:41 عصر
فکر کنم باز از 2 تابع اول برای بدست اوردن هندل پنجره و کنترل باید استفاده کنیم بعدش برای فشردن دکمه OK چکار کنیم؟
درست است

به عنوان مثال این یک برنامه است که با کلیک بر روی دکمه ی دوم (Command2) برنامه بر روی دکمه اول کلیک می کند (Command1)



Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const BM_CLICK = &HF5

Private Sub Command1_Click()
MsgBox "HELLO"
End Sub

Private Sub Command2_Click()
SendMessage Command1.hwnd, BM_CLICK, 0, 0
End Sub





موفق باشید

one hacker alone
جمعه 11 آذر 1390, 12:04 عصر
مهندس من همين كاري كه گفتين رو انجام دادم اما كار نميكنه
تابع اول و دوم كارشون رو به خوبي انجام ميدن و هندل ها رو برميگردونن اما سومي كليك نميكنه و مقدار 0 رو برميگردونه
دو پارامتر آخر كه 0 هستن رو هم دستكاري كردم True دادم و ... اما نشد




Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&

lMainHwnd = FindWindow(vbNullString, "Run")
Print lMainHwnd

lEdit1 = FindWindowEx(lMainHwnd, 0&, Button, vbNullString)
Print lEdit1

a = SendMessage(lEdit1, BM_CLICK, 0, 0)
Print a
End Sub


ديگه چيزي به ذهنم نميرسه تو ايرنترنت هم سرچ كردم اما همه دستور شما رو يعني چيزي كه نوشتم رو ژيشنهاد كردن اما نميدونم چرا كار نميكنه

just4froum
جمعه 11 آذر 1390, 12:17 عصر
بفرمایید با این کد می توانید بر روی OK ران کلیک کنید:



Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

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

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const BM_CLICK = &HF5

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&

lMainHwnd = FindWindow(vbNullString, "Run")
Print lMainHwnd

lEdit1 = FindWindowEx(lMainHwnd, 0&, vbNullString, "OK")
Print lEdit1

a = SendMessage(lEdit1, BM_CLICK, 0, 0)
Print a
End Sub



موفق باشید

one hacker alone
سه شنبه 15 آذر 1390, 20:43 عصر
مهندس سلام از راهنمايي هايي كه كردي ممنون من با اطلاعاتي كه شما بهم دادين كار ميكردم و برنامه هاي كوچكي براي خودم نوشتم امروز ميخواستم پسورد برنامه deepfreez 7 رو با برنامه خودم وارد كنم كه كار نكرد
يعني تابع اول هندل پنجره رو برميگردونه اما هندل دوم كه مربوط به كنترل textbox هست رو نميگيره و تابع دوم مقدارش 0 هست هرچقدر هم دستكاري كردم نشد


lEdit1 = FindWindowEx(lMainHwnd, 0&, vbNullString, "TEdit")


اينجوري هم زدم



lEdit1 = FindWindowEx(lMainHwnd, 0&, "TEdit", vbNullString)

one hacker alone
پنج شنبه 17 آذر 1390, 12:49 عصر
مهندس كجا رفتي؟

meys34
پنج شنبه 17 آذر 1390, 13:34 عصر
مهندس كجا رفتي؟

ببین دوست عزیز خیلی هم پیچیده نیستا...

توی یه تاپیکی، درخواست شده بود روی پنجره Open file ، آدرس فایل رو توی قسمت مورد نظر بندازیم و روی دکمه Openکلیک کنیم

http://barnamenevis.org/attachment.php?attachmentid=78756&d=1323082998

به شماره ها دقت کن
http://myup.ir/images/28515807816431159961.jpg

شماره1 اسم msgbox هست که هندلش معلومه...
button هم که معلومه
ولی edit زیر مجموعه ComboBoxEx32>ComboBox>Edit هست شما متن رو باید توی edit بندازید کدش شده این:
hwndMsgEdit = FindWindowEx(wParam, 0&, "ComboBoxEx32", "")
hwndMsgEdit = FindWindowEx(hwndMsgEdit, 0&, "ComboBox", "")
hwndMsgEdit = FindWindowEx(hwndMsgEdit, 0&, "Edit", "")
دقت کنید که در هرمرحله هندل مربوطه رو قرار دادیم و توی زیر مجموعه هاش دنبال شی مورد نظر گشتیم

دوتا نکته:
1- اگه BM_CLICK جواب نداد از این استفاده کنید (گاهی اوقات جواب نمیده ...نمیدونم چرا)
SendMessage hwnd, WM_LBUTTONDOWN, 0&, 0&
SendMessage hwnd, WM_LBUTTONUP, 0&, 0&


2- http://barnamenevis.org/attachment.php?attachmentid=78828&d=1323261335 این فایل رو دانلود کن ببین اصلا جواب میده یا نه؟

(مربوط به تاپیک http://barnamenevis.org/showthread.php?316715-%D8%A8%D8%A7-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-sendkey-%DA%86%D8%B7%D9%88%D8%B1%D9%8A-%D9%85%D8%AA%D9%86-%D8%B1%D9%88-%D9%83%D9%BE%D9%8A-%D9%88-%D9%BE%D8%B3%D8%AA-%D9%83%D9%86%D9%85-%D8%9F&p=1390586&viewfull=1#post1390586)

just4froum
پنج شنبه 17 آذر 1390, 18:00 عصر
مهندس كجا رفتي؟

ببخشید این چند وقت نبودم دیگه :قهقهه:.

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

موفق باشید

one hacker alone
دوشنبه 21 آذر 1390, 10:42 صبح
ممنون دوستان با مثالی که زدین متوجه شدم در برنامه DeepFreez متن تو یه کنترل دیگه (Group) هست و فکر کنم برا همین بود که جواب نداد
ایتم شکل برنامه؟
http://www.pic.iran-forum.ir/images/w29q3ktosrj8r1w439l.jpg
http://www.pic.iran-forum.ir/images/w29q3ktosrj8r1w439l.jpg
نظر شما چیه

یعنی 2 بار از تابع FindWindowEx استفاده میکنیم ؟

محسن واژدی
دوشنبه 21 آذر 1390, 10:59 صبح
یعنی 2 بار از تابع FindWindowEx استفاده میکنیم ؟

سلام
بله، از اونجایی که group هم خود یک کانتینر است که در یک کانتینر دیگر که فرم باشد قرار دارد بایستی هندل آن هم بدست آوریم

موفق باشید

one hacker alone
سه شنبه 22 آذر 1390, 11:37 صبح
دوست عزیز مشکل حل شد بله حق با شما بود با توضیحاتی که دادین کلا بحث رو گرفتم ممنون

حالا من اگه بخوام با VB برنامه DeepFreez رو باز کنم چکار باید کنم البته دقت کنید با فرض اینکه برنامه قبلا اجرا شده و الان در کنار ساعت افتاده که در حالت دستی با گرفتن کلید SHIFT و doubleClick ّرنامه اجرا میشه حالا من چجوری میتونم این عملیات رو با VB انجام بدم؟
http://www.pic.iran-forum.ir/images/9pn41itmiv7y2awq6y0q.jpg