المطلوب واضح من العنوان الرجو التكرم منكم ويوجد مثال بالمرفقات
الغاء الزر الايمن عند النقر على صفحة ويب داخل البرنامج
لا اظن هذا ممكن اذا لم توفره الاداة
يعني هذه خاصه بال Internet Explorer Browser
تستطيع تلغيها من خلال الصفحه نفسها يعني لو كنت حتعرض موقعك ممكن تخلي فيه جافا سكربت يمنع الرايت كلك
والله اعلم
فيه طريقة بس ناسيها
ياليت احد من المهندسن التكرم بحل هذه المشكله
وينكم
هل من مجيب على الموضوع
كل ما أستطيع مساعدتك به هو:
افتح Google واكتب Hook + Visual Basic .
لا أستطيع أن أفيدك كثيراً، ولكني أظن أن طريقة Hook هي الطريقة التي تعترض بها الرسائل الواردة من نظام Windows إلى الأداة WebBrowser ، فإذا وجدت رسالة أنه تم الضغط بالزر اليميني تعترضها وتلغيها.
بصراحة ليس لدي الكثير من الملعومات حول هذا ، وكل ما يمكنني قوله هو ابحث، واعذرني
هذه الجملة خاطئة :wacko:
هل من مجيب
إليك هذه الوصلة، أرجو أن تفيدك:
هي شرح لمبادئ الـHooking ، وأنت يجب عليك أن تعمل Hook لأداة WebBrowser فإذا أتتها رسالة الضغط بالزر اليميني قمت باعتراضها وإلغائها.
أود أن أساعدك أكثر ، ولكني ليست لدي الخبرة الكافية في هذا الموضوع.
هذه الجملة خاطئة :wacko:
أولا إزاي هتعمل SubClassing لـ Class مالوش Handle ولا تعرف له اسم
ولو إفترضنا نجاحنا في الحصول على الإسم الحقيقي للـ Class اللى هو "Shell Embedding"
وكمان حصلنا على الـ Handle عن طريقة دالة الـ FindWindowEx .. ماذا بعد الـ Hook يا أخ عبود ؟؟
مرفق لك مثال عمل Hook على أداة الـ WebBrowser .. ولكن كيف ستمنع الزر الأيمن ؟؟
صراحتا لم أحاول منع حدث معين من قبل بإستخدام الـ Hook
قمت بتصفير الـ Window Messege في المثال ونجحت الفكرة مع Classes أخرى
ولكنها لم تنجح هنا .. فكيف الـ Hook إذا ؟؟
اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي
فليقبل الجميع تقديري واحترامي .. ولكم تحياتي
بصراحة لا أدري، هي كانت مجرد فكرة ، المشكلة أني لست خبيراً بعمل Hooking ، ولكني قرأت مرة أني عندما أستعمل الـHooking فيمكنني استقبال الرسائل الواردة إلى الشيء المحدد وتغييرها.
إذاً فمنع الزر اليميني غير ممكن؟
هذه الجملة خاطئة :wacko:
Abboodd كتب:بصراحة لا أدري، هي كانت مجرد فكرة ، المشكلة أني لست خبيراً بعمل Hooking ، ولكني قرأت مرة أني عندما أستعمل الـHooking فيمكنني استقبال الرسائل الواردة إلى الشيء المحدد وتغييرها.إذاً فمنع الزر اليميني غير ممكن؟
كل شيء ممكن وكل ممكن (من صنع البشر) وبه ثغرات
تم تعديل هذه المشاركة بواسطة mrx_ta7ady في 18 يناير 2009 في 03:01
اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي
فليقبل الجميع تقديري واحترامي .. ولكم تحياتي
تحدي كل الشكر لك على الرد الصحيح وتقفيلك للموضوع
اشكر كل من تفاعل مع هذا الموضوع وجزاكم الله الف خير
Abboodd كتب::eek: ما شاء الله عليك يا تحديممكن فقط توضيح بسطي للكود
جزاك الله خيراً
اسال انت عن ما لم يتضح لك .. وان شاء الله تجدني مجيب
تم تعديل هذه المشاركة بواسطة mrx_ta7ady في 18 يناير 2009 في 23:32
اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي
فليقبل الجميع تقديري واحترامي .. ولكم تحياتي
هناك بعض الأسئلة:
متى أستعمل "Shell Embedding" ومتى أستعمل غيرها؟ ومن أين أعرفها؟
وهذه تلخبطت فيها:
Do Until Handle > DoEvents Handle = FindWindowEx(TMPhWnd, 0, "Internet Explorer_Server", vbNullString) Loop
وطبعاً أهم كود، يعني يحتاج إلى القليل من التوضيح:
Case WM_LBUTTONDOWN To WM_RBUTTONDBLCLK ' ----- ÇáÒÑ ÇáÃíãä --------------------------------------------------- ' If (wParam And 2) Then Msg = 0 ' ------------------------------------------------------------------- ' End Select
جزاك الله خيراً
هذه الجملة خاطئة :wacko:
Abboodd كتب:هناك بعض الأسئلة:متى أستعمل "Shell Embedding" ومتى أستعمل غيرها؟ ومن أين أعرفها؟
وهذه تلخبطت فيها:
Do Until Handle > DoEvents Handle = FindWindowEx(TMPhWnd, 0, "Internet Explorer_Server", vbNullString) Loopوطبعاً أهم كود، يعني يحتاج إلى القليل من التوضيح:
Case WM_LBUTTONDOWN To WM_RBUTTONDBLCLK ' ----- ÇáÒÑ ÇáÃíãä --------------------------------------------------- ' If (wParam And 2) Then Msg = 0 ' ------------------------------------------------------------------- ' End Selectجزاك الله خيراً
بســم الله الـرحمــن الرحيــم
الـ "Shell Embedding" لا فائدة له في حالتنا هذه .. ولا بيحل ولا بيربط ولا يستجيب لما نريده من أحداث
وفي المره السابقة حين ذكرته فكان على سبيل الخداع مترجيا به أن تشارك في الحل
والحقيقة هي أن "Shell Embedding" هو الـ Class الخطأ .. والـ Class الصحيح حفيده
أي أن الـ "Shell Embedding" أبا لـ "Shell DocObject View"
والـ "Shell DocObject View" أبا لـ "Internet Explorer_Server"
والـ "Internet Explorer_Server" هو الـ Class الوحيد الذي إستجاب معي لمنع الزر الأيمن
أما موضوع (من أين أعرفها) فهذا حسب أسلوبك في الحصول على المعرفة .. إما بالدراسة وإما البحث
وإما التجربة فالخطأ فالتجربة فالخطأ فالوصول إلى هدفك ( Try and Error ) .. وهذا الذي استخدمه غالبا
إستخدمت FindWindowEx للحصول على إسم الـ Control الوحيد في نموذجي الا وهو الـ WebBrowser
وكذلك الـ Child الأول له بإستخدام نفس الدالة فالـ Child الأول للـ Child الأول للـ "Shell Embedding"
وهناك طريقة أخرى أيضا بإستخدام الـ Spy++ الموجود في أدوات الفيجوال
وموضوع التكرار .. أولا حين دخول التكرار يكون المتغير Handle قيمته صفر .. والـ DoEvents سترجع بـ صفر في الوضع الحالي
وبالطبع أنت تعلم وظيفتها .. ولكن ما قد يبدوا غريبا هو العلاقة بينها وبين المتغير .. ولماذا جمعتهم في سطر واحد
الإجابة هي إختصارا للـ Code فقط .. للوصول إلى هدفي بأقل عدد ممكن من السطور والكود
علما بأن الـ Handle المطلوب من المؤكد أنه يزيد عن مرجوع DoEvents
سؤال يطرح نفسه على الشاشة الآن .. ماهو الـ Handle المطلوب ؟؟ ولماذا التكرار أصلا ؟؟
حين محاولة الحصول على مقبض Class الـ "Internet Explorer_Server" إكتشفت سرا خطيرا
إكتشفت أن هذا الـ Class غير موجود في الـ Control نفسه .. بل ينشأ بعد إستعراض الموقع الأول
وطبعا نحن نلاحظ أن الـ WebBrowser يطيل نوعا ما في فتح أي صفحة حتى ولو دون الإتصال
وهذا يعني أننا لو أردنا الحصول على المقبض المطلوب لابد من إنتظار إنشاء الـ Class أولا .. وهذا سبب إنشاء الـ Loop
والجزئية الأخيرة تستدعي أن تتأمل الثوابت أولا
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_LBUTTONDOWN = &H201
WM_LBUTTONDOWN To WM_RBUTTONDBLCLK
أي من 201 إلى 206 وكلهم رسائل ترسل حين إستخدام الزر الأيمن .. وبدل وضعهم جميعهم وضعت أولهم إلى آخرهم إختصارا للـ Code
If (wParam And 2) Then Msg = 0
الـ wParam يرجع برقم زر الـ Mouse .. وعلى سبيل المثال
الزر الأيسر يعني 1 والزر الأيمن يعني 2 والبكرة تعني 16 .. أقصد الضغط على البكرة وليس تحريكها
وهناك ثغرة لاحظتها وقت التجريب وهي في حالة أن المستخدم ضغط على الزر الأيسر أولا ثم الأيمن ثم ترك الأيسر فالأيمن ستظهر القائمة
وكذلك البكرة .. والحل الوحيد هو أن نبحث إذا الـ wParam به 2 وليس إذا يساوي 2
لأنه سيساوي 3 أو 18 بإستخدام الثغرتين سالفي الذكر
وأيا كان وبعد التأكد من دخول الزر الأيمن في الأمر نقوم بتغيير قيمة الرسالة إلى صفر أي WM_Null
حتى نتمكن من خداع الـ Class .. إنتهى
اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي
فليقبل الجميع تقديري واحترامي .. ولكم تحياتي
جزاك الله خيراً أخ تحدي على الشرح الأكثر من رائع، فقط استفسارات بسيطة:
Do Until Handle > DoEvents
ألا يمكن استبدالها بـ:
Do Until Handle <> 0
هنا لم أفهم لماذا استعملنا DoEvents ، وهو كما أعلم يشير إلى عدد النوافذ المفتوحة ، صح؟
ثانياً:
اقتباسأي من 201 إلى 206 وكلهم رسائل ترسل حين إستخدام الزر الأيمن
لكني لاحظت أن الرسائل المتعلقة بالزر اليميني، هي من 204 إلى 206 ، أليس كذلك؟
جزاك الله خيراً أستاذ تحدي
تم تعديل هذه المشاركة بواسطة Abboodd في 19 يناير 2009 في 22:57
هذه الجملة خاطئة :wacko:
كل ماعليك فعله هو تغيّير الخاصية ( IsWebBrowserContextMenuEnabled ) الى ( False ) وبالتالي سوف لن تعرض القائمة الخاصة بالمتصفح, اليس هذا ماتحاول عمله ؟, أقصد أنك تريد إيقاف عمل الزر الأيمن = لعدم إظهار القائمة الخاصة بالمتصفح ؟
بالتوفيق .
The important thing is not so much
that every child should be taught,
as that every child should be given the wish to learn.
اقتباسكل ماعليك فعله هو تغيّير الخاصية ( IsWebBrowserContextMenuEnabled ) الى ( False ) وبالتالي سوف لن تعرض القائمة الخاصة بالمتصفح, اليس هذا ماتحاول عمله ؟, أقصد أنك تريد إيقاف عمل الزر الأيمن = لعدم إظهار القائمة الخاصة بالمتصفح ؟بالتوفيق .
من اين ؟؟؟؟ في خصائص الاداة !
عموما هو شرح جيد جدا لل subclass خاصتا وان المنتدى لا يحوي الى القليل جدا
جزاك الله خيراً أخ بشار، لكن أظن أن هذا في DotNet وليس في Classic Visual basic . والله أعلم
هذه الجملة خاطئة :wacko:
Abboodd كتب:جزاك الله خيراً أخ بشار، لكن أظن أن هذا في DotNet وليس في Classic Visual basic . والله أعلم
معك حق, افتكرت نفسي في .Net , ههههههههههه :D
لكن من المعروف أن أغلبية التحكمات تشمل جميع الخصائص ( بالنسبة لإصدارتها ) , حتى إذا كنت تستخدم نسخة أحدث أو أقدم ( من الـ VB ) , اليس كذلك ؟
تحياتي أخ AbboOodd :P .
تم تعديل هذه المشاركة بواسطة Bashar Rabat في 20 يناير 2009 في 07:35
The important thing is not so much
that every child should be taught,
as that every child should be given the wish to learn.
كما يقول صاحب المقال Disable" the WebBrowser right click popup menu (works with Frames too!) ليس هنلك حل أخر <_< .
The important thing is not so much
that every child should be taught,
as that every child should be given the wish to learn.
