تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] Simulating Keyboard
#1
السلام عليكم ورحمة الله وبركاته
اخواني الأفاضل بعد اذنكم محتاج اعمل برنامج مشابه لبرنامج x-mouse button
يرسل ضغطات المفاتيح لأي للواجهات النشطة على الويندوز وبالأخص محاكي الأندرويد android emulator
محتاج اعدل على ضغطات المفاتح مثلا لو ضغطت مفتاح shift يضغط بطريقة اوتوماتيكية مفاتح A , D
وأكون شاكر ليكم جدا

كنت لقيت كود ولكنه يعمل على أي تطبيق إلا تطبيقات android emulator  زي مثلا محاكي لعبة بابجي موبايل gameloop
ودا الكود 
Public Class Form1
    Private WithEvents kbHook As New KeyboardHook
    '-----------------------
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    End Sub

    Private Sub kbHook_KeyDown(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyDown
        Debug.WriteLine(Key.ToString)
        If Key.ToString() = "a" Then
            'trigger your sendkeys
            SendKeys.Send("L") 'Sends letter L to active window.
            ' My.Computer.Keyboard.SendKeys("{L}")
        End If
        'MsgBox(Key.ToString)
    End Sub

    'Private Sub kbHook_KeyUp(ByVal Key As System.Windows.Forms.Keys) Handles kbHook.KeyUp

    'End Sub


End Class


ودا class

Imports System.Runtime.InteropServices

Public Class KeyboardHook

    <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
    Private Overloads Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal HookProc As KBDLLHookProc, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
    End Function
    <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
    Private Overloads Shared Function CallNextHookEx(ByVal idHook As Integer, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
    End Function
    <DllImport("User32.dll", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
    Private Overloads Shared Function UnhookWindowsHookEx(ByVal idHook As Integer) As Boolean
    End Function

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure KBDLLHOOKSTRUCT
        Public vkCode As UInt32
        Public scanCode As UInt32
        Public flags As KBDLLHOOKSTRUCTFlags
        Public time As UInt32
        Public dwExtraInfo As UIntPtr
    End Structure

    <Flags()> _
    Private Enum KBDLLHOOKSTRUCTFlags As UInt32
        LLKHF_EXTENDED = &H1
        LLKHF_INJECTED = &H10
        LLKHF_ALTDOWN = &H20
        LLKHF_UP = &H80
    End Enum

    Public Shared Event KeyDown(ByVal Key As Keys)
    Public Shared Event KeyUp(ByVal Key As Keys)

    Private Const WH_KEYBOARD_LL As Integer = 13
    Private Const HC_ACTION As Integer = 0
    Private Const WM_KEYDOWN = &H100
    Private Const WM_KEYUP = &H101
    Private Const WM_SYSKEYDOWN = &H104
    Private Const WM_SYSKEYUP = &H105

    Private Delegate Function KBDLLHookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer

    Private KBDLLHookProcDelegate As KBDLLHookProc = New KBDLLHookProc(AddressOf KeyboardProc)
    Private HHookID As IntPtr = IntPtr.Zero

    Private Function KeyboardProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
        If (nCode = HC_ACTION) Then
            Dim struct As KBDLLHOOKSTRUCT
            Select Case wParam
                Case WM_KEYDOWN, WM_SYSKEYDOWN
                    RaiseEvent KeyDown(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys))
                Case WM_KEYUP, WM_SYSKEYUP
                    RaiseEvent KeyUp(CType(CType(Marshal.PtrToStructure(lParam, struct.GetType()), KBDLLHOOKSTRUCT).vkCode, Keys))
            End Select
        End If
        Return CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)
    End Function

    Public Sub New()
        HHookID = SetWindowsHookEx(WH_KEYBOARD_LL, KBDLLHookProcDelegate, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
        If HHookID = IntPtr.Zero Then
            Throw New Exception("Could not set keyboard hook")
        End If
    End Sub
    Protected Overrides Sub Finalize()
        If Not HHookID = IntPtr.Zero Then
            UnhookWindowsHookEx(HHookID)
        End If
        MyBase.Finalize()
    End Sub

End Class
الرد
تم الشكر بواسطة:
#2
أهل الخبرة وينكم
الرد
تم الشكر بواسطة:
#3
السلام عليكم ورحمة الله وبركاته
ما فهمت من كلام حضرتك انك تريد اظهار لوحة مفاتيح كالتي تظهر اثناء الكتابة علي الموبايل مثلا ان كان هذا مرادك حقا 
فلماذا لا تستخدم لوحة المفاتيح الموجودة بالنظام هنالك لوحة تقليدية تحمل اسم OSK.exe
ولوحة مشابهة للوحة الأندرويد  بشكل كبير  تحمل اسم  TabTib.exe
تجد صورة توضيحية بالأسفل

تجد هنا بهذا الرابط طريقة استخدام واستدعاء لوحة المفاتيح الحديثة لنظام تشغيل ويندوز 8 وما هو اعلي 

تمنياتي بالتوفيق


الملفات المرفقة صورة/صور
   
الرد
تم الشكر بواسطة:
#4
(11-05-21, 12:44 AM)أبو عبدالله الحلواني كتب : السلام عليكم ورحمة الله وبركاته
ما فهمت من كلام حضرتك انك تريد اظهار لوحة مفاتيح كالتي تظهر اثناء الكتابة علي الموبايل مثلا ان كان هذا مرادك حقا 
فلماذا لا تستخدم لوحة المفاتيح الموجودة بالنظام هنالك لوحة تقليدية تحمل اسم OSK.exe
ولوحة مشابهة للوحة الأندرويد  بشكل كبير  تحمل اسم  TabTib.exe
تجد صورة توضيحية بالأسفل

تجد هنا بهذا الرابط طريقة استخدام واستدعاء لوحة المفاتيح الحديثة لنظام تشغيل ويندوز 8 وما هو اعلي 

تمنياتي بالتوفيق

اخي ابو عبدالله ربي يبارك فيك مش دا المقصود 
اقصد محتاج اعمل فورم يشتغل حتى ولو كان غير منشط 
وظيفته انه كل ما اضغط مثلا زر shift يضغط اتوماتيك على زر A أو B أو الاثنين معا ودا مثال لبرنامج للماوس بيعمل نفسط الوظائف ولكن انا اتمنى اعمل برنامج خاص للوحة المفاتيح
ودا اسم البرنامج وصورته


زي ما حضرتك شايف البرنامج بتحدد من النافذه على اليسار البرنامج اللي بدك تعمل عليه التأثير 
ومن الجانب الأيمن بتحدد الزر المراد الضغط عليه من خلال الماوس يعني تقدر تخلي زر الماوس الأيمن أو الأيسر يضغط زر من لوحة المفاتيح أو مجموعة أزرار
اشكرك على اهتمامك
الرد
تم الشكر بواسطة:
#5
اهل الخبرة وينكم؟؟؟؟
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] مشكلة في عمل Keyboard YazanOtoum 0 975 07-09-15, 03:50 PM
آخر رد: YazanOtoum
  كيف عمل On Screen Keyboard مبتدئ 1 1,160 29-04-13, 10:39 AM
آخر رد: AHMED`AMIN
  هل يمكن تسجيل زراير keyboard مبتدئ 6 2,327 22-03-13, 07:21 PM
آخر رد: kamal

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم