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

[ تمت الإجابة ]Hooking CreateTextServices

مغلق
بدأه tmaaa في 11 نوفمبر 2004 · 6 رد · 1,549 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذه الايام اقوم بمساعدة احد الأصدقاء في برنامجة وواجهتنا مشكله هي عمل hook للدالة CreateTextService

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

لاحظنا ان احد عناصر الدالة من النوع ITextHost وهذا عبارة عن COM interface , طبعا هو معرف في الملف Textserv.h المرفق مع الفيجوال سي لكن لم نجد اي تعريف له في الدلفي .

هناك ايضا ITextServices Inerface نفس المشكله لم نستطع الحصول على تعريف الدلفي له , اثنا ء البحث عنهما في الانترنت لم نجد التعريف , وجدت بعض معلومات لم تكن كافية .

السؤال : هل احد من الاخوة له خبرة في هذا المجال ؟

نريد تعريف الدلفي لـ ITextServices & ITextHost Interface .

لا أخفيكم أنها احدى المرات المعدودة باصابع اليدين التي أضع سؤال في الانترنت ولدي احساس انها ستكون كسابقاتها ----> ما حدى راح يعبرني :D

CIONO1

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

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

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

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

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

#2

السلام عليكم

اقتباس
ما حدى راح يعبرني

أسئلتك عزيزي tmaaa متقدمة جدا ، إما أن يقرأها مبتدئ -مثلي- ولا يعرف الإجابة عليها أو يقرأها خبير .... .

عموما بحثت عنها في النت فوجدت رابطا يقول أن الدالتين لا يمكن استدعاءها بالطريقة المسخدمة لاستدعاء الدوال الأخرى وهي stdcall والرابط هو http://groups.google.com.sa/groups?q=IText...land.com&rnum=2 أقرأه ربما لم أفهمه جيدا .

طبعا علميا لا يوجد شئ اسمه مستحيل فإن وصلت لها فأتمنى أن لا تبخل علينا .

#3

السلام عليكم ,,

في السي++ في بعض الأحيان يمكن توليد شيفرة ملف ال dll الخاص ب COM ودون الحاجة لملف الرأس .h بعمل import كالتالي :

#import "Textserv.h"

يقوم المصرف بعمل Import لكل التصريحات اللازمة للدوال والبنى المعرفة في بواسطة واجهات COM الموجودة في ملف dll .

لكن يوجد شيء غريب في هذا ال ITextServices ,, وهو أن تصريحه في ملف ال .h المرفق من microsoft وهو Textserv ,, يصرح عن الذي يفترض أن يكون واجهة بأنه فئة عادية class وليس interface لكن ترث من الواجهة IUnknown بشكل طبيعي ,, وتعرف كل الدوال بأنها دوال وهمية نقية Pure Virtual Functions وهي بالضبط تحاكي ال Intrface بهذه الطريقة ,,

لكن إليك المفاجأة ,, لاتحتاج لإستدعاء ال CoCreateInstance أو حتى ال QueryInterface لتوليد فئة صالحة للإستعمال من واجهة COM ,, حيث ال ITextServices هي أصلا فئة جاهزة .

لكن لايسمح لك المصرف بتوليد كائن منها وإنما مؤشر لكائن فقط ,, حيث الدوال كلها وهمية نقية "آسف على المصطلحات :) " .

المهم الزبدة أن إستدعاء الدوال الموجودة بهذه الطريقة إنما هو مجرد إستدعاء من النوع this call وليس حتى stdcall_ القياسي ,,

المشكلة أن معرفتي بديلفي سيئة ,, والذي أعرفه عن ديلفي هو أن إستدعاء الدوال فيها يتم عن طريق ال fastcall_ ,,

وطبعا تستطيعون إستدعاء دوال API بشرط كونها تستدعى بال sdtcall_ وليس أي شيء آخر كال cdecl_ مثلا .

يوجد حل جيد إن أردت أن تستدعي الدوال الموجودة في هذه الواجهة أو الفئة المفبركة على شكل واجهة إن صح القول ,, وهي أن تحولها إلى ملف dll عادي بكود سي++ بسيط يستدعي هذه الدوال ,, وتصدر الدالة الجديدة التي تريدها بإستدعاء stdcall_ ,, ويمكنك بعدها أن تستدعيها بشكل مباشر من الديلفي كما تستدعي أي دالة API عادية .

ربما قد يكون الحل طويل ,, لكن فعال بإذن الله ,, ولو كنت أعرف في الدلفي أكثر لحاولت المساعدة ,,

............................................

بشكل عام السي++ رائعة للغاية ,, يعني توجد 3 طرق حاليا في السي++ لتوليد كائنات صالحة للإستعمال من واجهات COM عادية :

الأول بوجود ملف الرأس ,, وهذه مريحة ومباشرة .

الثاني : إستخدام ال import وهي مدعومة في مصرف Visual c++ ,, ولاعلم عندي عن بقية المصرفات .

الثالث : عمل الإستدعاء للدوال"أو الطرق" Methods والواجهات التي نحتاجها فقط وذلك يتم عن مايسمى بال DECLARE_INTERFACE .

إليك الرابط قد يفيد :

http://weblogs.asp.net/oldnewthing/archive.../05/238050.aspx

و

http://www.codeguru.com/Cpp/COM-Tech/activ...icle.php/c5563/

=============

في النهاية تشكر أخي tamma لمجرد فتح مثل هذا الموضوع لإنعاش الذاكرة والنشاط بيننا :)

ولو أردت مساعدة سأبذل مافي وسعي .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#4

السلام عليكم

أبو محمـد :

شكراً جزيلاً .

أنا كنت قرأت هذه المشكله في google group واعتقد ان Colin Wilson تمكن من حل هذه المشكله حتى انه حط كود صغير هناك في شهر اكتوبر . ارسلت له ايميل بس شكله طنش :D

HGB:

أشكرك على الرد الرائع .

أنا كنت ناوي اكتب كود بالفيجوال سي لعمل hook لـ CreateTextService حتى ما اتعب في تحويل التعاريف لكن المشكله لسه ما في معي فيجوال سي (كسل اذهب السوق اشتري :D ), و انا استعمل الدلفي الان خفية في كمبيوتر الشركة و ربما انصب الفيجوال سي في كمبيوتر اخر عشان ... (عمل كله سري) .

اقتباس
في النهاية تشكر أخي tamma

حرام عليك اسمي tmaaa (امزح معاك). مو مشكله القليل من يكتب اسمي بشكل صحيح :D

لمن له اهتمام بالموضوع

http://www.codeguru.com/Cpp/COM-Tech/activ...ticle.php/c5563

على فكرة موضوعات صاحبنا Zhefu Zhang ممتازة .

CIONO1

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

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

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

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

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

#5

الغريب أن أسمك كنت أكتبه صحيح دائما وأعرفه جيدا ,, لكني كنت مستعجل يوم أمس ولم أدقق فيما كتبت جيدا :D

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

هاها ,, ماشاء الله البرمجة هواية يعني :D وليست العمل الرئيسي ,, الله يعينك :) وماشاء الله مبدع .

اقتباس
لمن له اهتمام بالموضوع

http://www.codeguru.com/Cpp/COM-Tech/activ...ticle.php/c5563

بالمناسبة اللنك الذي وضعته لي هو اللنك الذي وضعته لك أيضا :) يبدو أن المصادر مشتركة :D

بالتوفيق ,, الله يعينك في حل المشكلة .

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#6

السلام عليكم

HGB :

البرمجة هي جزء من تخصصي لكن عملي الحالي بعيد كل البعد عن التخصص , هكذا شاءت الأقدار . متخصصي الكمبيوتر عملهم بعيد عن التخصص و غير المتخصصين عملهم في مجال الكمبيوتر ...

اقتباس
وماشاء الله مبدع

مبدع : يمكن قصدك مُبَدِّع بضم الميم وفتح الباء وتشديد الدال بكسر :D

بالنسبة للوصلة ما انتبهت انك وضعتها . انا كنت شايفها زمان وصاحب الموضوع صيني موضوعاته كلها جيدة ...

على فكرة الوصلة الثانية انا كمان لقيتها اثناء البحث :D . كما اقول دائما للأخرين first google it :)

انا راح اجرب مرة ثانية اشوف صاحبنا Colin Wilson وان طنش مرة ثانية يمكن استخدم الفيجوال سي بعد ان اضطر للذهاب للسوق لشراءها وتحميلها خفية على الجهاز و ...

متى راح نشوف موضوعاتك التي وعدت بها :D ( رميت الكرة في ملعبك , مقلب حلو شو رأيك ؟ ).

CIONO1

تم تعديل هذه المشاركة بواسطة tmaaa في 12 نوفمبر 2004 في 17:25

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

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

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

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

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

#7
اقتباس
متى راح نشوف موضوعاتك التي وعدت بها  ( رميت الكرة في ملعبك , مقلب حلو شو رأيك ؟ ).

هاها ,, لأ بإذن الله قريب جدا ,, ولدينا تحسينات نقوم بها هذه الأيام على الموقع وهي التي شغلت جل وقتي ,,

وقريبا بس ربنا يريد سيكون هناك شيء جديد أتمنى أن يعجب الجمبع ,, مع أن الأمر ليس كبيرا لكنني أعول عليه بشدة :)

قريبا بإذن الله :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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