PDA

View Full Version : حرفه ای: تشخیص کلمه زیر موس در اینترنت اکسپلورر



arshad89
دوشنبه 30 خرداد 1390, 23:20 عصر
با سلام
می خوام متن زیر موس رو در صفحه IE به دست بیارم.
هندل پنجره و کلاس آن، همچنین متن موجود در صفحه دسکتاپ مثل نام فولدر ها و .. را بدست میارم.title صفحات IE را هم میتوانم دریافت کنم ولی متن موجود در IE را نه.
باید از چه روشی این کار رو انجام بدم؟؟؟؟میشه راهنمایی کنید؟

vcldeveloper
سه شنبه 31 خرداد 1390, 07:34 صبح
متن داخل یک صفحه وب رو نمیتونید با اون کارها به دست بیارید، بلکه باید از HTML DOM برای دسترسی به متن داخل یک صفحه وب استفاده کنید.

arshad89
سه شنبه 31 خرداد 1390, 10:45 صبح
متن داخل یک صفحه وب رو نمیتونید با اون کارها به دست بیارید، بلکه باید از HTML DOM برای دسترسی به متن داخل یک صفحه وب استفاده کنید.
میشه یه کم بیشتر توضیح بدید؟؟ چطور باید از HTML DOM استفاده کنم؟؟

Felony
سه شنبه 31 خرداد 1390, 10:55 صبح
http://www.google.com/search?client=opera&rls=en&q=html+dom+in+delphi&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

arshad89
سه شنبه 31 خرداد 1390, 12:27 عصر
http://www.google.com/search?client=opera&rls=en&q=html+dom+in+delphi&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest
صفحات رو دیدم. اینها همه یه پارسر معرفی کردند. من گیج شدم یعنی من باید صفحه IE رو پارس کنم؟؟؟؟؟!!!!
فرض میگیریم که این کار رو انجام بدم، موس من باید کلمه زیری خودش رو برگردونه. تو ساختار درختی dom من دنبال کدوم نود بگردم؟؟؟
میشه بیشتر توضیح بدید؟؟؟

arshad89
سه شنبه 31 خرداد 1390, 12:50 عصر
یه سوال دیگه اینکه چرا متن موجود در word رو هم نمایش نمیده؟؟


procedure TForm1.ShowHwndAndClassName(CrPos: TPoint) ;
var
hWnd: THandle;
aName,
Text : array [0..255] of char;
pos: Tpoint;
begin
hWnd := WindowFromPoint(CrPos) ;
Label1.Caption := 'Handle : ' + IntToStr(hWnd) ;

if boolean(GetClassName(hWnd, aName, 256)) then
Label2.Caption := 'ClassName : ' + string(aName)
else
Label2.Caption := 'ClassName : not found';
SendMessage(hWnd, WM_GETTEXT,SizeOf(Text), integer(@Text)) ;
Label3.Caption := 'Text :' + Text;

عقاب سیاه
سه شنبه 31 خرداد 1390, 17:03 عصر
سلام ببخشيد در مورد جاهايي كه حرف مورد نظر ستاره اي (رمز) باشد هم اين روش جواب نمي دهد!! چرا؟؟؟

vcldeveloper
سه شنبه 31 خرداد 1390, 20:36 عصر
یه سوال دیگه اینکه چرا متن موجود در word رو هم نمایش نمیده؟؟
برای اینکه کنترل ویرایشگر متن در MS Word هم یک کنترل عادی نیست که شما بتونید به همین راحتی با WM_GETTEXT ازش متن استخراج کنید. WM_GETTEXT فقط به درد کنترل های ساده و استاندارد ویندوز میخوره. برای MS Word هم باید از رابط برنامه نویسی COM ارائه شده توسط MS Word استفاده کنید.


فرض میگیریم که این کار رو انجام بدم، موس من باید کلمه زیری خودش رو برگردونه. تو ساختار درختی dom من دنبال کدوم نود بگردم؟؟؟
خودِ Internet Explorer یک رابط برنامه نویسی COM ارائه میکنه که حاوی یک HTML DOM هم هست. از طریق این رابط برنامه نویسی می تونید IE را کنترل کنید، یا به داده های مختلف آن دسترسی داشته باشید. اینکه دقیقا کدوم متد یا خصوصیت این رابط برنامه نویسی میتونه به شما کمک کنه، من درباره اش تحقیق نکردم. می تونید برای شروع، در MSDN دنبال IWebBrowser2 بگردید.

یک راه حل دیگه که بعضی از ابزارها مثل Babylon ازش استفاده می کنند (در مواقعی که از طریق رابط های برنامه نویسی ارائه شده امکان استخراج متن نباشه)، استفاده از OCR هست؛ به این صورت که یک تصویر از بخش مورد نظر روی صفحه نمایش تهیه می کنند، و با استفاده از OCR تلاش می کنند متن انتخاب شده را تشخیص بدند.



سلام ببخشيد در مورد جاهايي كه حرف مورد نظر ستاره اي (رمز) باشد هم اين روش جواب نمي دهد!! چرا؟؟؟
برای اینکه اون بخش ها را ستاره ایی می کنند که کسی یا برنامه دیگه ایی بهش دسترسی نداشته باشه، اگر قرار باشه که بشه با یه ارسال پیام ساده اون متن رو استخراج کرد که دیگه ستاره ایی کردن اون کارکترها ارزش چندانی نخواهد داشت. البته در نسخه های قدیمی ویندوز میشد با ارسال پیام EM_SETPASSWORDCHAR، به یک کنترل، خاصیت ستاره ایی آن کنترل را غیر فعال کرد، و سپس با ارسال WM_GETTEXT، متن را استخراج کرد. در نسخه های جدیدتر ویندوز که به جای ستاره از دایره های سیاه رنگ برای نمایش حالت رمز استفاده میشه، این روش دیگه جواب نمیده.

عقاب سیاه
چهارشنبه 01 تیر 1390, 07:54 صبح
اما آقاي كشاورز اين برنامه را ببينيد!
از همين جا دانلود كردم

71447

به راحتي رمز هاي ستاره شده را برمي گردونه! و با دلفي هم نوشته شده چجوري ميشه اين كار را كرد؟؟

خيلي ممنون

vcldeveloper
چهارشنبه 01 تیر 1390, 11:59 صبح
به راحتي رمز هاي ستاره شده را برمي گردونه! و با دلفي هم نوشته شده چجوري ميشه اين كار را كرد؟؟
در پست بالا توضیح دادم که چطوری میشه اون کار رو کرد.