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

الغاء الزر الايمن عند النقر على صفحة ويب داخل البرنامج

بدأه الحائطي في 15 يناير 2009 · 26 رد · 1,943 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المطلوب واضح من العنوان الرجو التكرم منكم ويوجد مثال بالمرفقات

_________________.rar

#2

لا اظن هذا ممكن اذا لم توفره الاداة

يعني هذه خاصه بال Internet Explorer Browser

تستطيع تلغيها من خلال الصفحه نفسها يعني لو كنت حتعرض موقعك ممكن تخلي فيه جافا سكربت يمنع الرايت كلك

والله اعلم

[moveleft]

MiN! SpId3r SqUaD

[/moveleft]

#3

فيه طريقة بس ناسيها

ياليت احد من المهندسن التكرم بحل هذه المشكله

#4

وينكم

#5

هل من مجيب على الموضوع

#6

كل ما أستطيع مساعدتك به هو:

افتح Google واكتب Hook + Visual Basic .

لا أستطيع أن أفيدك كثيراً، ولكني أظن أن طريقة Hook هي الطريقة التي تعترض بها الرسائل الواردة من نظام Windows إلى الأداة WebBrowser ، فإذا وجدت رسالة أنه تم الضغط بالزر اليميني تعترضها وتلغيها.

بصراحة ليس لدي الكثير من الملعومات حول هذا ، وكل ما يمكنني قوله هو ابحث، واعذرني

هذه الجملة خاطئة  :wacko: 


#7

لم نتوصل لنتيجه

copytk3.jpg
#8

هل من مجيب

#9

إليك هذه الوصلة، أرجو أن تفيدك:

/index.php?showtopic=35576

هي شرح لمبادئ الـHooking ، وأنت يجب عليك أن تعمل Hook لأداة WebBrowser فإذا أتتها رسالة الضغط بالزر اليميني قمت باعتراضها وإلغائها.

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

هذه الجملة خاطئة  :wacko: 


#10

أولا إزاي هتعمل SubClassing لـ Class مالوش Handle ولا تعرف له اسم

ولو إفترضنا نجاحنا في الحصول على الإسم الحقيقي للـ Class اللى هو "Shell Embedding"

وكمان حصلنا على الـ Handle عن طريقة دالة الـ FindWindowEx .. ماذا بعد الـ Hook يا أخ عبود ؟؟

مرفق لك مثال عمل Hook على أداة الـ WebBrowser .. ولكن كيف ستمنع الزر الأيمن ؟؟

صراحتا لم أحاول منع حدث معين من قبل بإستخدام الـ Hook

قمت بتصفير الـ Window Messege في المثال ونجحت الفكرة مع Classes أخرى

ولكنها لم تنجح هنا .. فكيف الـ Hook إذا ؟؟

SubClassing_WebBrowser.rar

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#11

بصراحة لا أدري، هي كانت مجرد فكرة ، المشكلة أني لست خبيراً بعمل Hooking ، ولكني قرأت مرة أني عندما أستعمل الـHooking فيمكنني استقبال الرسائل الواردة إلى الشيء المحدد وتغييرها.

إذاً فمنع الزر اليميني غير ممكن؟

هذه الجملة خاطئة  :wacko: 


#12

هل الطلب معلق

copytk3.jpg
#13
Abboodd كتب:
بصراحة لا أدري، هي كانت مجرد فكرة ، المشكلة أني لست خبيراً بعمل Hooking ، ولكني قرأت مرة أني عندما أستعمل الـHooking فيمكنني استقبال الرسائل الواردة إلى الشيء المحدد وتغييرها.

إذاً فمنع الزر اليميني غير ممكن؟

كل شيء ممكن وكل ممكن (من صنع البشر) وبه ثغرات

SubClassing_WebBrowser.rar

تم تعديل هذه المشاركة بواسطة mrx_ta7ady في 18 يناير 2009 في 03:01

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#14

:eek: ما شاء الله عليك يا تحدي

ممكن فقط توضيح بسطي للكود

جزاك الله خيراً

هذه الجملة خاطئة  :wacko: 


#15

تحدي كل الشكر لك على الرد الصحيح وتقفيلك للموضوع

اشكر كل من تفاعل مع هذا الموضوع وجزاكم الله الف خير

#16
Abboodd كتب:
:eek: ما شاء الله عليك يا تحدي

ممكن فقط توضيح بسطي للكود

جزاك الله خيراً

اسال انت عن ما لم يتضح لك .. وان شاء الله تجدني مجيب

تم تعديل هذه المشاركة بواسطة mrx_ta7ady في 18 يناير 2009 في 23:32

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#17

هناك بعض الأسئلة:

متى أستعمل "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: 


#18
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 .. إنتهى

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

#19

جزاك الله خيراً أخ تحدي على الشرح الأكثر من رائع، فقط استفسارات بسيطة:

Do Until Handle > DoEvents

ألا يمكن استبدالها بـ:

Do Until Handle <> 0

هنا لم أفهم لماذا استعملنا DoEvents ، وهو كما أعلم يشير إلى عدد النوافذ المفتوحة ، صح؟

ثانياً:

اقتباس
أي من 201 إلى 206 وكلهم رسائل ترسل حين إستخدام الزر الأيمن

لكني لاحظت أن الرسائل المتعلقة بالزر اليميني، هي من 204 إلى 206 ، أليس كذلك؟

جزاك الله خيراً أستاذ تحدي

تم تعديل هذه المشاركة بواسطة Abboodd في 19 يناير 2009 في 22:57

هذه الجملة خاطئة  :wacko: 


#20

كل ماعليك فعله هو تغيّير الخاصية ( 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.

#21
اقتباس
كل ماعليك فعله هو تغيّير الخاصية ( IsWebBrowserContextMenuEnabled ) الى ( False ) وبالتالي سوف لن تعرض القائمة الخاصة بالمتصفح, اليس هذا ماتحاول عمله ؟, أقصد أنك تريد إيقاف عمل الزر الأيمن = لعدم إظهار القائمة الخاصة بالمتصفح ؟

بالتوفيق .

من اين ؟؟؟؟ في خصائص الاداة !

عموما هو شرح جيد جدا لل subclass خاصتا وان المنتدى لا يحوي الى القليل جدا

[moveleft]

MiN! SpId3r SqUaD

[/moveleft]

#22

جزاك الله خيراً أخ بشار، لكن أظن أن هذا في DotNet وليس في Classic Visual basic . والله أعلم

هذه الجملة خاطئة  :wacko: 


#23
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.

#24

كما يقول صاحب المقال 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.

#25

يبدو أنك لم ترَ هذه المشاركة :D

/index.ph...st&p=924459

هذه الجملة خاطئة  :wacko: 


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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…