Keyboard Hook - seltsames Verhalten

spool2k

Grünschnabel
hallo,

ich versuche direkt an eine Applikation via SendMessage einen virtuellen Tastendruck zu senden.

folgendermaßen implementiert:

Code:
[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 irgendwelche Parameter.

Wenn ich regulär in der Applikation die Taste oder Tasten betätige erscheint dies nicht.

Code:
<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
 
Zurück