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

كيف يتم إلغاء عمل زر من ازرار الكيبورد

بدأه محمد غريب في 12 يناير 2010 · 6 رد · 4,249 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ,,,,

لي سؤال اعرف انه ليس بالسؤال السهل ابداً حيث بحثت كثيراً عن حل له ولم اجد , وآمل ان اجد حل عند الخبراء في مجال البرمجة ودوال الـ API

السؤال هو :

قمت بعمل برنامج يحاكي الماوس عن طريق الكيبورد حيث تستطيع تحريك المؤشر وعمل كلك يمين او يسار من خلال الكيبورد

وقد انتهيت من تصميمه من فترة لكني وقفت عند جزء ولم اجد له حلاً حتى الان , وهو كيفية الغاء عمل الازرار التي تم تحديدها للتحكم بالماوس على الكيبورد

فمثلاً عند اختيار زر "Caps Lock" ليعمل عمل Left Click في الماوس وعند الضغط على هذا الزر لا يقوم بوظيفته الاساسية وهي التبديل بين وضع الكتابة بالحروف الكبيرة والصغيرة , ولم اجد حل لهذه المشكلة حتى الان وكنت قد يأست تماماً ان اجد لها حل حتى لاحظت ان هذه الخاصية موجودة في برنامج Skype , فعند تحديد اختصار لامر معين على الكيبورد يقوم البرنامج بإلغاء وظيفة هذا الزر نهائياً ويستدعي الامر الذي حدد له فقط

لذا تجدد الامل عندي من جديد في إيجاد الكود او الطريقة التي تقوم بهذه الخاصية فوضعت هذا السؤال هنا لعلي اجد له حلاً عند احد المتمكنين في هذا المجال ,,,,

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#2

الطرقة تكون مثل هذا المثال لكن الزر الذي إخترته يقرأه النظام قبل البرنامج لذلك قم باستبدال هذا الزر :sleep:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

If KeyCode = 65 Then

KeyCode = 0

End If

End Sub

#3

اخي اول اشكرا على الرد لكن الموضوع ليس بهذه السهولة فأنا اريد الغاء عمل الزر في النظام بالكامل ثم اني لا يمكنني الاعتماد على امر من اوامر الفورم حسث ان البرنامج يعمل وهو في الـ Tray اي ان النافذة لا تكون نشطة

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#4

السلام عليكم .....

يبدو من سؤالك اخي العزيز أنك تستخدم الوظيفة GetAsyncKeyState لقنص المفاتيح التي تحاكي من خلالها حركة الماوس وأزرارها؟ أليس ذلك ؟ :lol:

لحل مشكلتك لابد لك من استخدام تقنية الخطف لمفاتيح الكيبورد في المستوى الادنى ...وهذه الطريقة تتطلب حذرا" في الاستعمال ..

سأكتب لك مثال في القريب العاجل ..تفهم من خلاله كيف يمكن لبرنامجك ان يصبح حاجز جمارك يسمح بتمرير ما يريد من المفاتيح الى النظام و البرامج الاخرى ويمنع ما يريد ..

قم بتذكيري بالموضوع ..لأنني ان نسيت أكون معذورا" أمام مالدي من مشاغل :wacko: ..

بالتوفيق ..

تم تعديل هذه المشاركة بواسطة Devd في 18 يناير 2010 في 00:53

#5

شكرا جزيلا لك اخي الكريم Devd على الرد والاهتمام وانا في انتظار مثالك ولكن خذ وقتك وربنا يعينك ويوفقك يا رب

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

#6

السلام عليكم ...

ملاحظات حول الية العمل :

1-كن حذرا عند عمل Debug ... حرّر الخطّاف قبل كل اغلاق للبرنامج باستدعاء التابع UnhookWindowsHookEx

2- تعريف الوظائف و ثوابت المفاتيح التي ترغب باستعمالها لمحاكاة أزرار الفأرة من الاداة API TEXT Viewer

post-76890-1263952763022_thumb.jpg

3سأفترض بأن محاكاة تحريك الفأرة الى اليمين واليسار يكون بالمفتاحين F1,F3 ...

انظر المثال المرفق..

post-76890-12639527711652_thumb.jpg

4- نفّذ البرنامج ثم مكّن محاكاة الفأرة واضغط على المفتاحين F1,F3 على سطح المكتب مثلا"

لترى المؤشر يذهب نحو اليمين واليسار ...لاحظ اسناد القيمة -1 لتابع خطف المفاتيح

والتي تمنع النظام من تشغيل اختصاري البحث والمساعدة

5-أترك لك اضافة ازرار الفأرة الاخرى في الجملة الشرطية SELECT CASE في تابع الخطف

بالتوفيق ..

KeyHook.rar

1
#7

والله يا اخ Devd انا لا اعرف كيف اشكرك فهذا ما كنت احتاجه بالضبط وبحثت عنه كثير جدا ولكني لم اجده

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

وبإذن الله سأقوم بتعديل جزء قنص المفاتيح في البرنامج واقوم برفعه ولكن ليس الان حيث اني اريد فهم وتفصيل الكود قبل وضعه ولكني مشغول بمشروع في يدي هذه الايام

وشكرا جزيلا اخي الكريم مرة اخرى وادعوا الله ان يزيدك من علمه وان ينفعك به

It does not matter what they know about you, but what you can do, so let your work speak of you

mmghv VB6 Programmer

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