الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]الحصول على كلمة موجوده اسفل الماوس

مغلقرائج
بدأه A`WaR في 13 يناير 2003 · 68 رد · 10,216 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

حاليا في صدد عمل برنامج مثل قاموس babylon وeasylingo

والعمل مقسمة إلي جزئين مبدئيا، اولا الحصول علي الكلمة المطلوبة تحت مؤشر الماوس والثاني تصميم الملف الذي سوف يتم فيه تخزين الكلمات بحيث يضمن الوصول إلي المطلوب بشكل سريع ..

والسؤال هنا للجزء الاول :

تصوري لعملية الحصول علي الكلمة التي يود المستخدم ترجمته ويضع عليه مؤشر الماوس ، الطريقة السهلة ( بعد قيام المستخدم بتحديد الكلمة المراد وتظليلها ) :

1 - احصل علي النافذة النشطة أو أداة Edit تحت مؤشر الماوس

2 - ارسل للأداة رسالة GET_SELTEXT أو شيء مشابه :)

3 - ثم الترجمة

والطريقة الصعبة ( كما شاهدتها في احدي البرامج الصينية ) بحيث لا يحتاج المستخدم لتظليل الكلمة، فقط وضع الماوس لعدة ثوان ..

1 - استخدام hook لاستلام استدعاء دالة مثل TextOutA/W الخ

2 - الحصول علي موقع مؤشر الماوس x/y

3- ومقارنته مع الاحداثيات التي تم تمريرها لدالة TextOut ..وحساب حجم الخط المستخدم، للحصول علي بداية اول حرف للكلمة المراد ترجمته والتي تم وضع مؤشر الماوس عليها ..

هذه هي الافكار الاولية، أريد أن اعرف إن كانت لديكم طرقا أفضل او أي كود كمثال للخطوات أعلاه .. وشكرا..

#2

السلام عليكم

cry.gif

:P

ما شاء الله الردود كثيره ( زي ما قلت لك ).

تدفع $$$ كم وأشارك معك في المشروع ؟

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#3

:D:D:D

طوّل بالك أخ tmaaa

بعدين وين دروس ال PE اللي وعدتنا فيهن ;)

#4

السلام عليكم

عذرا اخ mhammad .

دروس الـ PE سيقوم بوضعها الاخ حسام , راجع احد المواضيع السابقه ستجد اني قد أشرت الى ذلك .

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#5

يا سلام .....

هيك اسئلة بتعجبني !!! شرح ممتاز للمشكلة .... تحليل رائع للعملية .... و حلول مقترحة تدل حل محاولة سابقة لحل المشكلة!!!

يا شيخ روح ...... الطريقة الثانية هي الطريقة الأفضل، و للاسف ما في بالي طريقة افضل منها!!!

لكن بالنسبه للكود، فممكن اكتب لك برنامج كامل يقوم بالعملية، و انت تستخدمها جاهزة، البرنامج لن يأخذ وقت :) ....

بس عندي طلب .... يتم وضع اسمي في About في برنامجك :o....

هاه ايش رايك ؟

إذا لم تقبل هذا العرض .... فهذا الاقتراح التي اتوقع ان تعمل ( راح اعدله بعد فترة، بس يكون عندي معلومات اكثر عن الموضوع):

1- تقوم بغرز ملف dll الخاص بال hook داخل جميع المسالك thread ال GUI التي تعمل في النظام.

2- تقوم بإستبدال عنوان دالة TextOut بدالة خاصة بك في ال DLL لها نفس ال signature .

3- هذا الدلة تقوم تقوم بمعالجة Data struct لحفظ الاحداثيات و حجم الخط عند مناداته لكل نافذة. ال data struct هذا له تصميم خاص .... إلى الان ما تخيلت كيف راح يكون.

4- عند استقبال اي رسالة WM_PAINT، يجب تنظيف قائمة السطور التي حفظت لأي نافذة، لان بيانات الأحداثيات السابقة سوف تتغير كلها .

5- راح تستقبل ال Mouse Move لكل نافذة، عند توقف الماوس في مربع صغير لمدة معينة، سوف تقوم بالبحث في ال data structr لديك لأيجاد اين الكلمة التي فوقها المؤشر.

اعرف ان تصميم ال data structr راح يكون اهم شيء في الموضوع، لانه يجب معرفة موقع كل كلمة، مع مراعاة حجم الخط و الذي ممكن ان يتغير من وقت لإخر.

الاقتراح السابق للحل و ضعته بسرعه .... علشان *اسكت بعض الناس* :P ، قبل ما يجي و يحطمونك .:P

#6

السلام عليكم

اقتباس
كاتب الرسالة الأصلية : Developer .NET

الاقتراح السابق للحل و ضعته بسرعه .... علشان *اسكت بعض الناس* :P ، قبل ما يجي و يحطمونك .:P

في حد بيتكلم عني :D:D:D

اخ حسام

الاخ عبد الحفيظ ذكر طريقه API HOOK وهي الخطوات التي تفضلت بذكرها .( يعني ما في شئ جديد :P )

---

لكن بالنسبه للكود، فممكن اكتب لك برنامج كامل يقوم بالعملية، و انت تستخدمها جاهزة، البرنامج لن يأخذ وقت

---

عباره لن يأخذ وقت تعني يوم واحد . منتظرين على احر من الجمر

( الناس في الصين ناقشوا الموضوع منذ اكثر من خمس سنوات , وكل سنه ياتي شخص ليسأل في المنتديات الصينيه مثل هذا السؤال ) .

عموما كما قلت لعبدالحفيظ : كم تدفع واساعدك في البرنامج ؟

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#7

عندي تعليق على الموضوع ..

ليس من الداعي حفظ كل الكلمات بعد ارسال رسالة WM_PAINT طبعا بعض البرامج لا تعالج كل النافذة ولكن تعالج فقط نافذة صغيرة حدث التغيير فيها ..

لذلك المفروض فقط مراقبة ال Textout API .. ومن أجل اجبار البرنامج على استدعاء هذا التابع عندما يتوقف مؤشر الفأرة وقت معين فوق الكلمة أو عند ضغط زر معين على الكيبورد ، يقوم الكود باستعداء ValidateRect والتي بدورها تستدعي WM_PAINT ويقوم كودهم باستدعاء TextOut ..

طبعا يوجد عدة أمور يجب الانتباه عليها أيضا .. وهي بالنسبة لل DC Mapping .. يجب تحويل الاحداثيات من DC إلى Screen وبعدها تقارن مع موقع الفأرة .. لأن كل DC يختلف في ال Mapping عن الآخر ..

:)

Coding on the Cloud and for the Cloud!

My Blog

#8

خطأ صغير ..

يتم استدعاء .. InvalidateRect .. ومن ثم UpdateWindow من أجل فورية المعالجة للرسالة WM_PAINT

Coding on the Cloud and for the Cloud!

My Blog

#9

tmaa :

الاخ عبد الحفيظ ذكر طريقه API HOOK وهي الخطوات التي تفضلت بذكرها .( يعني ما في شئ جديد )

# ما فيه شيء جديد ..... انا عارف!!! علشان كذا قلت ان زبده الموضوع راح تكون في تصميم data struct تقوم بحفظ معلومات الرسم. و اللي افكر فيها الان، بس وضعت الرد علشان (......................)

----------------------------

tmaa:

عباره لن يأخذ وقت تعني يوم واحد . منتظرين على احر من الجمر

( الناس في الصين ناقشوا الموضوع منذ اكثر من خمس سنوات , وكل سنه ياتي شخص ليسأل في المنتديات الصينيه مثل هذا السؤال ) .

عموما كما قلت لعبدالحفيظ : كم تدفع واساعدك في البرنامج ؟

*** لن يأخذ وقت يعني اسبوع ;) .... و بعدين و إذا تكلموا فيها الصينيين قبل خمس سنوات .... ايش صار يعني!!!!

عموما عبدالحفيظ يامر امر .... و عرضي عليه كل الناس بيطلبوه ..... انا ما طلبت فلوس !!! انا طلبت credit فقط !!!!

زور لك اي موقع اي موقع فيه مناقشات عند اساليب برمجية، راح تلقى كل الاشخاص يطالبون في وضع اساميهم او ارسال رسالة شكر لهم عند استخدام ال class اللي كتبه ..... يعني انا ماسويت جريمة.

و لا أعتقد ان عبدالحفيظ راح يزعل من الشي هذا.

#10

فقط اضافة بسيطة للموضوع

افضل طريقة من الممكن ان يعمل بها برنامج قاموس فوري هي OCR (برنامج babylon يعمل بهذه الطريقة ؟ ) لأنه سيكون قادراً على الترجمة حتى من الصور والرسوميات

لكن بالنسبة للغة العربية فهذا شبه مستحيل :(

تخيل اكبر الشركات العربية (صخر) لها ابحاث في مجال معالجة اللغة العربية منذ الثمانينات .. لكنها خرجت لنا ببرنامج OCR فاشل جداً جداً جداً جداً جداً :mad:

تحياتي

#11

يمكن فحص البرنامج إذا كان يعمل بهذه الطريقة إذا كتبت نص بفونت جدا معقد أو فونت يظهر نص ليس له علاقة بالأحرف الانجليزية .. إذا ترجمه البرنامج فهو يعمل بطريقة ال DrawText أما إن لم يترجمه فهو يعمل بطريقة ال OCR ..

ولا أعتقد أنه OCR ..

Coding on the Cloud and for the Cloud!

My Blog

#12

البرنامج كل ماله يزيد حلاوه و تحدي .....

يوجد دوال كثيرة تستخدم لرسم ال string في الملف gdi32.dll، طبعا المشكلة في الدوال هاذي انها تقوم بـ direct call لدالة TextOut .....

يعني بالعربي عملية ال patching للـ Import Directory و تعديل ال Thunk الخاص بال TextOut و تحويله إلى التابع الخاص بنا ما راح ينفع !!!!

عموما، راح احاول احل المشكلة في اقرب ما يمكن ....

بس على فكرة اخ عبد الحفيظ .... انت موافق على الاقتراح و إلا لا؟ لاني اشوفك ما رديت حتى الان ..

تحياتي ...

#13

السلام عليكم

معذرة لتأخري في الرد، قضيت الوقت في جمع وتحليل المعلومات التي توافرت لدي وبعدها اتضح أني يجب أن أقرا المزيد في الموضوع حتي أفهم الخطوات المستقبلية جيدا :D

tmaaa:

اقتباس
تدفع $$$ كم وأشارك معك في المشروع ؟

أبيت أم شئت كالعادة معا في المووضوع CIOz 4ever :w1

وبعد ردود الاخوة تبدو أن هناك ثلاث طرق ، ماذكرته في الموضوع الاصلي وما ذكره الاخ fsl عن OCR ولكني استبعدت الطريقة السهلة و OCR ( معقدة ) وسوف أركز علي طريقة hook ان شاء الله ..

Developer.NET:

اقتباس
يا شيخ روح ...... الطريقة الثانية هي الطريقة الأفضل، و للاسف ما في بالي طريقة افضل منها!!!

تمام :)

اقتباس
لكن بالنسبه للكود، فممكن اكتب لك برنامج كامل يقوم بالعملية، و  

انت تستخدمها جاهزة، البرنامج لن يأخذ وقت

أشكرك علي هذا العرض، إلا أن السبب وراء نيتي لعمل البرنامج كان بهدف التعلم والتعرف علي بعض التقنيات التي ذكرت هنا، أكثر من هدفي مجرد عمل البرنامج :rolleyes:

وشكرا لهاني للتعقيب ...

علي الذكر : أكتب البرنامج بدلفي ، وضعت الموضوع هنا وقسم دلفي هناك للحصول علي مناقشة أفضل :D ...

إن شاء الله سوف أقضي الأيام القادمة لدراسة الطرق التي ذكرتموها ومحاولة كتابة الكود ( لدي بعض الكواد التي أمدني بها tmaaa قبل فترة وما قرأته وحصلت عليه من النت ) ، وأي عقبة أو مشكلة سوف ارسلها هنا تباعا لنحلها معا ;)

علي أمل العودة (f) هنا قريبا ، شكرا للجميع ..

#14

السلام عليكم

A`WaR :

اقتباس
أبيت أم شئت كالعادة معا في المووضوع CIOz 4ever  

:D

انت تعلم ان قصدي من ذكر الـ $ هو لاثاره الشباب في الفريق للنقاش في الموضوع ( استفزاز :o ).

ذكرني هذا السؤال بقصص طريفه منها :

ان احدى الشركات لتتعرف على فكرة عمل القاموس ( في بدايه ظهورها ) قضت مده سنه كامله في تحليل احد برامج شركه اخرى .

أثناء تصفحي لبعض الاسئله في google groups وجدت احد المبرمجين اسمه carl kenner قضى مده كبيره يستعمل softice وdisasm ... ليعرف فكره القاموس

http://groups.google.com/groups?q=carl+ken...a.edu.au&rnum=2

http://groups.google.com/groups?q=carl+ken...mail.com&rnum=3

http://groups.google.com/groups?q=carl+ken...mail.com&rnum=4

طبعا مشكله Grab word under mouse text شغلت الكثيرين لمده كبيره , خصوصا و ان هناك مشكله اخرى وهي الحصول على الـtext من Image , الاخيره تتم باستعمال OCR كما ذكر الاخوة .....

(f)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#15

السلام عليكم

أعلم ان الموضوع مر عليه سنة وبضع ايام , لكن حبيت أستعيد الذكريات.

أعلم ان الاخوة الذين شاركوا في الموضوع لن يشارك اي منهم فيه ثانية لأسباب عديدة ( بعضها تعلمها ادارة الموقع ) ...

حبيبت فقط أني أطلع الشباب الجدد على المنتديات العربية بأنها ما زالت ضعيفة جدا جدا جدا .

المشكله في الموضوع السابق هي اللغات RTL كالعربية و العبرية ... أما اللغات LTR فلا مشكله فيها ....

اليوم وانا اتحدث مع Carl Kenner المذكور سابقا في احدى ردودي أبدى الترحيب بالمساعدة حين تتاح له فرصة . أسلوبه في الحديث معي جعلني أعرف الفرق الكبير بين مبرمجينا العرب و بين المبرمجين الأجانب ... شتان ...

أتمنى للجميع التوفيق ...

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#16

tmaaa :D

لا ادري من وين طلعت بهالموضوع :D

بس شكله على يدك ينتهي المشروع :P

Igonrance is HeLL,need to say any more?

Laziness is HeLL, Lazy programmers must be shoot on the head

Stupidity is HeLL, u can patch everything but not human stupidity

#17

To SaD jAckAl :

بلاش من هالحركات .

عزائنا في اسمكم السابق "A`WaR" و عزائنا للشباب الآخرين الذين تعرضوا لنفس المصير .

كما نعزي المبرمجين الذي لم يجدوا عملاً واضطروا لترك مجال البرمجة والكمبيوتر أمثالي ...

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#18

ياأهلين بالمحترفين القدامى ,, وينكم ياشباب !! مالذي حدث لتنقلب الامور رأسا على عقب ويختفي هذا الزخم بهذه الطريقة ,,

عموما البركة فيكم ان شاء الله ,,

وباذن الله نفيد ونستفيد سويا :)

بارك الله فيكم ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#19

---

ياأهلين بالمحترفين القدامى

---

SaD jAckAl في ناس يتكلموا عنك :)

---

وينكم ياشباب !! مالذي حدث لتنقلب الامور رأسا على عقب ويختفي هذا الزخم بهذه الطريقة

---

اذا بدك أجاوبك نيابة عن الشباب فما في مانع , لكن ربما لن أستطيع الكتابة في هذا المنتدى بعدها .

شو رأيك ؟ أجاوبك أو بلاش من تقليب المواجع ؟ :)

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#20
اقتباس
اذا بدك أجاوبك نيابة عن الشباب فما في مانع , لكن ربما لن أستطيع الكتابة في هذا المنتدى بعدها .

شو رأيك ؟ أجاوبك أو بلاش من تقليب المواجع

لأ بلاش :)

الحمد لله ,, علينا أن ننسى الماضي ونفتح صفحات جديدة فالمسلمين والعرب في أمس الحوجة لجيل متقن في صناعة الحوسبة ,,

وعلينا أن نتحد وننسى مشاكلنا الشخصية ,, والله لايجيب زعل :)

وفقكم الله ,, وعقبال ما نرى نشاط كالسابق ومواضيع متميزة ورائعة ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#21

والله سؤال مهم لدرجة وساقوم لابحث عن معلومات عن الطريقة :D

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#22

قمت بالبحث ووجدت انه هناك طريقة وهي استعمال SendMessage مع ارسال الرسالة

EM_CHARFROMPOS

Private Const EM_CHARFROMPOS = &HD7

The EM_CHARFROMPOS message retrieves information about the character closest to a specified point in the client area of an edit control. You can send this message to either an edit control or a rich edit control.

http://msdn.microsoft.com/library/default....charfrompos.asp

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#23

السلام عليكم

شكرا لمن رد في الموضوع .

راكان الحنيطي :

الموضوع أكبر من SendMessage بكثير ...

لو تعمقت في الموضوع ستجد أنه شيق جداً و ستعرف أن بعيد كل البعد عما كنت تعتقده

CIOz غالباً يضعون مواضيع لها ثقلها ...

تحياتي

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#24
اقتباس
EM_CHARFROMPOS

this may only work with RichEdit control/class

...

Thus has nothoing to do with what we're talkin about :)

CIONO2

تم تعديل هذه المشاركة بواسطة SaD jAckAl في 29 يونيو 2004 في 19:56

Igonrance is HeLL,need to say any more?

Laziness is HeLL, Lazy programmers must be shoot on the head

Stupidity is HeLL, u can patch everything but not human stupidity

#25

ما دام الموضوع اضخم من هذا يا ريت لو تزودني بمعلومات اكثر عن ال Technique لاني من الاشخاص المهتمين بمعرفة تفاصيل كهذه.

ونعم هذا يعمل على RichEdit فقط.

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

هذا الموضوع مغلق.

مواضيع مشابهة