PDA

View Full Version : ‎بدست آوردن متن داخل یک ( EditBox(IE?



houshmand
دوشنبه 13 مرداد 1382, 23:52 عصر
با سلام و عرض ادب

برای بدست آوردن متن داخل یک Edit معمولی
<span dir=ltr>
p : array [0..35] of char;

SendMessage (Handle,WM_GETTEXT ,sizeof(p),Integer(@P));
</span>

:?: حالا چطور می شود متن داخل یک Edit روی پنجره Internet Explorer را بدست آورد؟

با تشکر

canvas_for
چهارشنبه 15 مرداد 1382, 15:22 عصر
:?: من که تا حالا چنین چیزی ندیدم؟

Kambiz
پنج شنبه 16 مرداد 1382, 01:20 صبح
تا اونجایی که من می دونم تو IE به غیر از ComboBox و ListBox بقیه کنترلها، کنترلهای ویندوز نیستند (یعنی Handle ندارند) و IE اونها رو خودش Render می کنه. در صورتیکه به interface مرورگر دسترسی داری، باید متن رو از طریق اون بگیری.

SyntaxCheck
جمعه 17 مرداد 1382, 00:47 صبح
دوست عزیز سلام
هیچ همچین چیزی نیست کلیه اشیا موجود در اکسپلورر دارای هندل هستند. و اصلا بدون هندل بودن و رندر کردن برای هیچ شیئی معنی نداره.
اما من روی مسئله ای که علی آقا عرض کردند قبلا یه کارهایی البته نه برای این مورد خاص اکسپلورر انجام دادم ولی بی نتیجه بود یعنی با اینکه هندل و همچنین نام کلاس شی مورد نظر رو داشتم که یک ادیت بود اما نمیتونستم با تابعی که شما هم ذکر کردید متن رو از داخلش بخونم. در ضمن نام کلاس همون کامبو باکسی که آدرس رو داخلش وارد میکنیم Edit هست این رو براحتی میشه بدست آورد اما جالب و تقریبا عجیب اینجاست که بعضی وقتها در بعضی جاها مثل همین مورد نمیشه متن موجور رو برگردوند. چرا من هم نمیدونم.

Mashatan
جمعه 17 مرداد 1382, 01:17 صبح
میشه بگید با چه برنامه و یا به چه صورتی شما Handle شونو بدست آوردید ؟ :wink:

SyntaxCheck
جمعه 17 مرداد 1382, 01:34 صبح
من این برنامه رو خودم نوشتم.هم هندل رو میگیره.هم نام کلاس رو. وهم متنی که اون آبجکت داره. و همه این کارها رو با حرکت موس و زدن چند کلید کیبورد انجام میده و برنامه شاقی هم نیست. از اینجا دانلودش کنید.
http://www.whiteiran.com/Download/Thief.rar

Mashatan
جمعه 17 مرداد 1382, 02:03 صبح
اصلا قصدم این نبود که برنامه که Handle نشون میده بهم معرفی کنید چون SPY++ خیلی قوی تر و راحتر عمل میکنه و همنطورم که گفتید از نظر تکنیکال چیزی نداره ! و همانطوری که خودتون تست کردید و دیدید که EDITBOX هندلشون یکی هست و اگر هندلشون مشترک هست چطوری IE پیداشون میکنه ؟ و فکر کنم کامبیز عزیز درست گفتن که خود IE رندر میکنه :)

به علی (ali11ali112000) آقای گلم بگم که اگر میخواد تحقیق کنه میتونه روی Toolbar Google تحقیق کنه که یک قسمتی داره به نام Auto Fill که این کار رو انجام میده ! :)

SyntaxCheck
شنبه 18 مرداد 1382, 03:02 صبح
میشه بگید با چه برنامه و یا به چه صورتی شما Handle شونو بدست آوردید ؟
این صحبت شما مفهومش تا جایی که عقل بنده قد میده ازش کاملا مشخصه که چیه :wink: حالا توی دل شما چی میگذشته زمانی که اینو مطرح میکردید شرمنده که بنده بی اطلاع بودم :wink:
دوست عزیز آقای مشاطان شما من رو به شک انداختید که مجدد تست کنم.من اینکارو کردم اما برای اون ادیت باکس یک هندل کاملا مجزا وجود داره و به هیچ وجه این هندل با هیچ شئ قابل دیدن دیگه داخل محیط آی ای یکی نیست.من اصلا منظور شما رو از رندر کردن ادیت باکس و بدون هندل بودن یک شئ نمیفهمم.اصلا در سیستم عامل ویندوز کلیه آبجکتها دارای هندل هستن و نداشتن هندل برای یه آبجکت به هیچ وجه معنی معنی نداره

Mashatan
شنبه 18 مرداد 1382, 03:41 صبح
در مورد اول که اصلا یه مسئله بی ربط با موضوع رو عنوان کردید و من توضیح دادم هدفم چی بوده !

ببینید دوست عزیز مثل اینکه یا درست تست نکردید برنامه رو درمحیط IE یا اینکه نمیدنید handle چیه ؟!
هندل برای شناسی هر Object در محیط GUI هست و امکان نداره که هندل دوتا Object با هم یکی باشه تا اینجا رو قبول دارید ؟!

حالا شما هم با همین برنامه که نوشتید برید روی یک صفحه HTML که دو تا Editbox (مثل همین محیط ویرایش انجمن ) داشته باشه و ماوس رو ببرید روش و بعد کلید Ctrl-G یا Ctrl-C رو بزنید و ببنید چه عددی رو به شما تحویل میده و میبنید هر جفتش یکی هست اگر 10 تا هم Editbox باشه بازم عددش یکی هست ! یعنی اصلا نمیشه از طریق handle کنترلشون کرد همونطوری که برنامه شما نمیتونه با Ctrl-S چیزی رو تغییر بده ! :wink: پس باید راهی وجود داشته باشه و راهشم اینکه IEخودش Manage میکنه !
بازم کامبیز درست گفت که ComboBox و ListBox هندل دارند ! چون اگر دو تا Combobox توی یک صفحه باشه میبینید که هندلش با هم یکی نیست و فرق میکنه :)

SyntaxCheck
یک شنبه 19 مرداد 1382, 17:52 عصر
ببینید دوست عزیز مثل اینکه یا درست تست نکردید برنامه رو درمحیط IE یا اینکه نمیدنید handle چیه ؟!
نه دوست عزیز من هم برنامه خودم رو درست تست کردم هم اینکه بسیار عالی میدونم هندل چی هست. و اما برم سر اصل مطلب و روشن کردن بهتر موضوع برای حضرت عالی و بقیه دوستان با مراجعه به نقل قول از پست قبلی شما:

و همانطوری که خودتون تست کردید و دیدید که EDITBOX هندلشون یکی هست و اگر هندلشون مشترک هست چطوری IE پیداشون میکنه
دوست عزیز به هیچ وجه امکان نداره که دوتا شئ دارای هندل مشترک باشند.هندل یک شناسه یونیک هست.اما مسئله ای که شما ذکر کردید کاملا صحیحه و اگر با برنامه من و یا برنامه های مشابه مبادرت به پیدا کردن هندل از طریق حرکت موس روی صفحه نمایش بکنیم یک عدد برای کل ادیت باکسها و همچنین محیط پیرامون اونها بدست میاد و دلیل اون هم استفاده اینگونه برنامه ها از جمله برنامه ای که من برای دانلود گذاشتم از تابع WindowFromPoint هست.این تابع تمام هندلهای تاپ لول رو که ویندوی اونها هیدن نباشه با توجه به موقعیتشون روی اسکرین برمیگردونه.اما بعد از اینکه من این موضوع رو متوجه شدم سعی کردم این کار رو با ChildWindowFromPoint انجام بدم(توضیح برای شخص حضرت عالی اینکه توابع معروف خانواده FindWindow روی ویندوهای تاپ لول عمل میکنند و هندل اونها رو برمیگردونند اما بسیاری از پنجره های قابل دیدن و مخفی جزو این دسته نیستند و خودشون بعنوان پنجره ی اولاد "Child" ساخته شدند.برای کار روی هندل این پنجره ها باید از توابع خوانواده چیلدرن ها استفاده بشه که بطور مثال مشابه اون برای FindWindow تابع FindWindowEX هست).از این صحبتها که بگذریم من روی این موضوع امروز خیلی کار کردم تا مسئله رو حل کنم و موفق هم شدم.اما نتیجه نهایی اینکه ویندوی حاوی متن ادیت باکس دارای فوکوس در آی ای با نام کلاس "IntelliFormClass" مشخص هست ,این پنجره اولاد "IEFrame" هست و با عرض شرمندگی حال نوشتن و یا کپی کدش رو اینجا نداشتم.اما برنامه ای برای بدست آوردن متن داخل ادیت باکسهای آی ای نوشتم که میتونید از این آدرس دانلودش کنید.سورس برنامه هم داخلش هست. :wink:
http://www.whiteiran.com/Download/Get_EditBox_Text_InternetExplorer.rar

اما بطور خیلی خلاصه



var
CHHandle_Captured,Handle_Captured &#58;HWND;
begin
CHHandle_Captured &#58;= FindWindow&#40;'IntelliFormClass',nil&#41;;
Handle_Captured &#58;= GetParent&#40;CHHandle_Captured&#41;;
end;

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

houshmand
جمعه 24 مرداد 1382, 14:04 عصر
SPY++ خیلی قوی تر و راحتر عمل میکنه
این SPY++ چیه ؟ آیا از WinSight32 همراه دلفی بهتره؟
و از کجا می شود آن را گیر آورد؟
/××××××××


به علی (ali11ali112000) آقای گلم بگم که اگر میخواد تحقیق کنه میتونه روی Toolbar Google تحقیق کنه که یک قسمتی داره به نام Auto Fill که این کار رو انجام میده ! :)
می شود بیشتر توضیح دهید که این چیه است؟


با تشکر فراوان

houshmand
جمعه 24 مرداد 1382, 14:09 عصر
اما در مورد هندل

:wink: Edit روی Internet Explorer هم هندل دارد هم ندارد!!!؟


هندل دارد چون آقای SyntaxCheck توانست مقدار متن داخل آن را بدست بیاورد
اما ندارد چون ایشان در حالت خاصی این کار را کرد و به یک نکته توجه نکرده است


/××××××××××××××××××××
برای درک بهتر موضوع من ابتدا به وسیله FrontPage Express یک صفحه ساختم
که فقط دارای دو Edit box بود
و به کمک WinSight32 همراه دلفی بعضی از پیامهای آن را مانیتور شدم
/×××××××××××××××××××
ابتدا در باکس اول نوشتم "hello" سپس بر روی باکس دوم رفتم و نوشتم "bye"
دوباره روی باکس اول باز گشتم و کلمه "ali" را اضافه کردم


حالا به گزارش WinSight32 نگاه کنید تا بقیه اش را بگم



* WinSight message trace Fri Aug 15 2003 13&#58;21&#58;15 *
000172&#58;00000450 &#123;Shell DocOb&#125; WM_SETFOCUS Sent Focus from hwnd 00000000
000173&#58;00000450 &#123;Shell DocOb&#125; WM_KILLFOCUS Sent Focus to hwnd 0000046C
000174&#58;0000046C &#123;Internet Ex&#125; WM_SETFOCUS Sent Focus from hwnd 00000450
000175&#58;00000508 &#123;IntelliForm&#125; WM_CREATE Sent &#123;IntelliFormCla&#125; &#40;300,200&#41;-&#40;500,250&#41; "IntelliFormPro"
000176&#58;00000510 &#123;SysListView&#125; WM_CREATE Sent &#123;SysListView32&#125; &#40;0,0&#41;-&#40;30000,30000&#41; "Internet Explo"
000177&#58;00000514 &#123;SysHeader32&#125; WM_CREATE Sent &#123;SysHeader32&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000178&#58;00000518 &#123;tooltips_cl&#125; WM_CREATE Sent &#123;tooltips_class&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000179&#58;0000051C &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000180&#58;00000520 &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000181&#58;0000050C &#123;Auto-Sugges&#125; WM_CREATE Sent &#123;Auto-Suggest D&#125; &#40;0,0&#41;-&#40;100,100&#41; "Internet Explo"
000182&#58;00000508 &#123;IntelliForm&#125; WM_GETTEXTLENGTH Sent
000183&#58;00000508 "h" WM_GETTEXTLENGTH Sent
000184&#58;00000508 "he" WM_GETTEXTLENGTH Sent
000185&#58;00000508 "hel" WM_GETTEXT Sent 4168 bytes at 0043E4C8
000186&#58;00000508 "hel" WM_GETTEXTLENGTH Sent
000187&#58;00000508 "hel" WM_GETTEXT Sent 10 bytes at 0058BECC
000188&#58;00000508 "hell" WM_GETTEXTLENGTH Sent
000189&#58;00000508 "hello" WM_KILLFOCUS Sent Focus to hwnd 00000000
000190&#58;00000508 "hello" WM_DESTROY Sent
000191&#58;0000050C &#123;Auto-Sugges&#125; WM_DESTROY Sent
000192&#58;00000510 "Internet Ex" WM_DESTROY Sent
000193&#58;00000518 &#123;tooltips_cl&#125; WM_DESTROY Sent
000194&#58;00000514 &#123;SysHeader32&#125; WM_DESTROY Sent
000195&#58;0000051C &#123;ScrollBar&#125; WM_DESTROY Sent
000196&#58;00000520 &#123;ScrollBar&#125; WM_DESTROY Sent
000197&#58;00000524 &#123;IntelliForm&#125; WM_CREATE Sent &#123;IntelliFormCla&#125; &#40;300,200&#41;-&#40;500,250&#41; "IntelliFormPro"
000198&#58;0000052C &#123;SysListView&#125; WM_CREATE Sent &#123;SysListView32&#125; &#40;0,0&#41;-&#40;30000,30000&#41; "Internet Explo"
000199&#58;00000530 &#123;SysHeader32&#125; WM_CREATE Sent &#123;SysHeader32&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000200&#58;00000534 &#123;tooltips_cl&#125; WM_CREATE Sent &#123;tooltips_class&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000201&#58;00000538 &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000202&#58;0000053C &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000203&#58;00000528 &#123;Auto-Sugges&#125; WM_CREATE Sent &#123;Auto-Suggest D&#125; &#40;0,0&#41;-&#40;100,100&#41; "Internet Explo"
000204&#58;00000524 &#123;IntelliForm&#125; WM_GETTEXT Sent 4168 bytes at 0043E4C8
000205&#58;00000524 &#123;IntelliForm&#125; WM_GETTEXTLENGTH Sent
000206&#58;00000524 &#123;IntelliForm&#125; WM_GETTEXT Sent 4 bytes at 0058BECC
000207&#58;00000524 "b" WM_GETTEXTLENGTH Sent
000208&#58;00000524 "by" WM_GETTEXTLENGTH Sent
000209&#58;00000524 "bye" WM_KILLFOCUS Sent Focus to hwnd 00000000
000210&#58;00000524 "bye" WM_DESTROY Sent
000211&#58;00000528 &#123;Auto-Sugges&#125; WM_DESTROY Sent
000212&#58;0000052C "Internet Ex" WM_DESTROY Sent
000213&#58;00000534 &#123;tooltips_cl&#125; WM_DESTROY Sent
000214&#58;00000530 &#123;SysHeader32&#125; WM_DESTROY Sent
000215&#58;00000538 &#123;ScrollBar&#125; WM_DESTROY Sent
000216&#58;0000053C &#123;ScrollBar&#125; WM_DESTROY Sent
000217&#58;00000540 &#123;IntelliForm&#125; WM_CREATE Sent &#123;IntelliFormCla&#125; &#40;300,200&#41;-&#40;500,250&#41; "IntelliFormPro"
000218&#58;00000548 &#123;SysListView&#125; WM_CREATE Sent &#123;SysListView32&#125; &#40;0,0&#41;-&#40;30000,30000&#41; "Internet Explo"
000219&#58;0000054C &#123;SysHeader32&#125; WM_CREATE Sent &#123;SysHeader32&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000220&#58;00000550 &#123;tooltips_cl&#125; WM_CREATE Sent &#123;tooltips_class&#125; &#40;0,0&#41;-&#40;0,0&#41; ""
000221&#58;00000554 &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000222&#58;00000558 &#123;ScrollBar&#125; WM_CREATE Sent &#123;ScrollBar&#125; &#40;0,0&#41;-&#40;20,100&#41; ""
000223&#58;00000544 &#123;Auto-Sugges&#125; WM_CREATE Sent &#123;Auto-Suggest D&#125; &#40;0,0&#41;-&#40;100,100&#41; "Internet Explo"
000224&#58;00000540 &#123;IntelliForm&#125; WM_GETTEXT Sent 4168 bytes at 0043E4C8
000225&#58;00000540 &#123;IntelliForm&#125; WM_GETTEXTLENGTH Sent
000226&#58;00000540 &#123;IntelliForm&#125; WM_GETTEXT Sent 14 bytes at 0058BECC
000227&#58;00000540 "helloa" WM_GETTEXT Sent 4168 bytes at 0043ECFC
000228&#58;00000540 "helloa" WM_GETTEXTLENGTH Sent
000229&#58;00000540 "helloa" WM_GETTEXT Sent 16 bytes at 0058BECC
000230&#58;00000540 "helloal" WM_GETTEXTLENGTH Sent
000231&#58;0000046C &#123;Internet Ex&#125; WM_KILLFOCUS Sent Focus to hwnd 00000000
000232&#58;00000540 "helloali" WM_KILLFOCUS Sent Focus to hwnd 00000000

houshmand
جمعه 24 مرداد 1382, 14:15 عصر
همان گونه که می بینید بنا به ضرورت برای Edit box هندل می سازد
و سپس آن را از بین می برد
یعنی هر edit box که فکوس را می گیرد دارای هندل می شود و با از دست دادن فکوس هندل خود را از دست میدهد
و با فوکوس گرفتن مجدد هندل با شماره جدید برایش ایجاد می شود
(مثلاُ در با لا Edit box اول دارای شماره 508 بوده که در انتها به 540 تبدیل شده است)‍
ـــــــــــــــــــــــ
و برنامه SyntaxCheck از این هندل موقتی استفاده می کند
/×××××××××××××××××××
راستی یادم رفت بگم آفای SyntaxCheck کارت خیلی درسته (برنامه ات) :wink:

ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــ
/×××××××××××××××××
همچنان در پی راه کار؟....

SyntaxCheck
جمعه 24 مرداد 1382, 14:25 عصر
سلام
راستش من هم با همین winsight32 همراه دلفی کار کردم و تونستم این مسئله رو بفهمم که قبلا گفتم.اما حرفی که شما میگید درسته و یه توضیح کوچک اینجا میدم:
در حقیقت IE در هر زمان که فوکوس روی ادیت باکس هست یک شی ایجاد میکنه که نام کلاس این شی همونطور که شما هم دیدید IntelliFormClass هست.اگر هندل این شی رو پس از تغییر فکوس روی ادیت باکسها نگاه کنیم میبینیم که مدام در حال تغییره و این گواه این حرفه که در زمان فکوس و در هر دفعه درخواست فکوس این شی ایجاد میشه و پس از اتمام کار این شی از بین میره.راستش برای من خیلی عجیبه و جالب که چرا به این شیوه عمل میشه.

SyntaxCheck
جمعه 24 مرداد 1382, 14:30 عصر
وقتی مطلب بالا رو پست میکردم مطلب شما رو ندیدم.بعد از پست دیدم که این مطلب اضافه شده و شما هر آنچه من گفتم رو قبلا گفتید :wink:

Mashatan
جمعه 24 مرداد 1382, 14:51 عصر
این بحث بسیار جالب شده ، و از همگی متشکرم ، چقدر خوبه که آدم قبل از اینکه حرفی رو بزنه و یا اظهار نظر کنه درباره موضوع مورد بحث اشراف داشته باشه و یا حداقل تحقیق کنه ، البته خدا رو شکر همه به این صورت عمل میکنن :) :wink:


این SPY++ چیه ؟ آیا از WinSight32 همراه دلفی بهتره؟
و از کجا می شود آن را گیر آورد؟

می شود بیشتر توضیح دهید که این چیه است؟

علی (ali11ali112000) جان :
در مورد SPY++ یک برنامه در Tools های Visual STUDIO هست که فقط راحتر و دقیق تر عمل میکنه ! ولی طرز کار همشون یکی هست :)
در مورد Toolbar Google هم شما با رفتم به اینجا http://toolbar.google.com و اضافه کردن این Com Service به IE به شما یک امکانی رو میده که میتونید به صورت خودکار فیلدهای Name, Email و ... پر کنید که گزینه Auto Fill هست و میتونید با trace کردنش پی ببرید که چکاری انجام میده !

ارادتمند مشاطان

houshmand
پنج شنبه 30 مرداد 1382, 10:01 صبح
آقای مشاطان عزیز از Toolbar Google هیچی نفهمیدم ...؟ :roll:
همچنان به دنبال راه حل :?