Keyboard Hook - seltsames verhalten



  • hallo,

    ich versuche direkt an eine applikation via SendMessage einen virtuellen tastendruck zu senden.

    folgendermaßen implementiert:

    [DllImport("User32.dll")]
            static extern bool SendMessage( IntPtr hwnd, UInt32 msg, UInt32 wParam, UInt32 lParam );
            [DllImport("user32.dll", SetLastError = true)]
                    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            uint WM_SYSKEYDOWN = 0x0104;
            uint WM_SYSKEYUP   = 0x0105;
    
            public Form1()
            {
                InitializeComponent();
    
                ParenthWnd = FindWindow(null, lpszParentClass);
    
                if (ParenthWnd.Equals(IntPtr.Zero))
                {
                    txtDebug.AppendText(lpszParentClass + " Not Running");
                }
                else
                {
                    txtDebug.AppendText(lpszParentClass + ": " + ParenthWnd.ToString());
                }
    
            }
    
            ...
    
            private void runInterval() // wird aufgerufen wenn der timer tickt
            {
                SendMessage(this.ParenthWnd, WM_SYSKEYDOWN, Convert.ToUInt32( Keys.X ), 0);
                SendMessage(this.ParenthWnd, WM_SYSKEYUP, Convert.ToUInt32(Keys.X), 0);
            }
    

    nun habe ich folgendes verhalten wenn ich spy++ verwende. der "tastendruck" kommt zwar an allerdings wird immer noch ein 2. WM_SYSKYDOWN bzw. WM_SYSKEYUP angezeigt ohne irgendwelchen parameter

    <00029> 000701DC S WM_SYSKEYDOWN nVirtKey:'X' cRepeat:5 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
    <00030> 000701DC R WM_SYSKEYDOWN
    <00031> 000701DC S WM_SYSKEYUP nVirtKey:'X' cRepeat:0 ScanCode:00 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
    <00032> 000701DC R WM_SYSKEYUP
    

    woran könnte das liegen und wie bekomme ich das weg?

    gruß

    ralf


Anmelden zum Antworten