[C# .Net 2.0] PostMessage zu Window und Modifier (ALT-SHIFT-CTRL) unterdrücken



  • Servus,

    ich stehe hier gerade vor einem kleinen Rätsel und komme nicht auf die Lösung. Ich sende via PostMessage einen Tastendruck an eine andere Applikation:

    public struct WindowMessage
    {
        public static readonly uint WM_CHAR = 0x0102;
        public static readonly uint WM_KEYDOWN = 0x0100;
        public static readonly uint WM_KEYUP = 0x0101;
    }
    
    private static readonly uint LPARAMDOWN = 0x00000001;
    private static readonly uint LPARAMUP = 0xC0000001;
    
    [DllImport("User32.dll", EntryPoint = "PostMessage")]
    internal static extern int PostMessage(IntPtr handle, uint msg, IntPtr wParam, UIntPtr lParam);
    
    [DllImport("User32.dll", EntryPoint = "MapVirtualKey")]
    internal static extern uint MapVirtualKey(uint uCode, uint uMapType);
    
    uint scanCode = MapVirtualKey((uint)key, 0);
    
    PostMessage(handle, WindowMessage.WM_KEYDOWN, (IntPtr)key, (UIntPtr)( LPARAMDOWN | ( scanCode << 16 ) ));
                PostMessage(handle, WindowMessage.WM_KEYUP, (IntPtr)key, (UIntPtr)( LPARAMUP | ( scanCode << 16 ) ));
    

    Soweit so gut und das Ganze funktioniert auch. Nehmen wir mal an ich sende "F3" an ein Fenster und halte dabei CTRL fest. Dann kommt beim Fenster auch ein CTRL-F3 an. Aber genau das will ich unterbinden. Das Fenster soll nur die "F3" Taste erhalten und den Rest ignorieren.

    Also bin ich hingegangen und habe mir einen Global-Keyhook geschrieben der die Lowlevel Keystrokes abfängt. Funktioniert auch wunderbar. Wenn ich dem Hook sage er soll die CTRL etc. Tasten abfangen, kann ich wild auf der Tastatur rumhämmern und es passiert auch nichts. Er fängt sie ordentlich ab. Wenn ich aber nun den Hook laufen lasse, CTRL drücke und gleichzeitig ein PostMessage an das Fenster sende, dann empfängt das Fenster aber immer noch die CTRL Taste 😕

    Und nun bin ich mit meinem Latein am Ende... Vielleicht kann mir einer weiterhelfen.

    gruß
    Hellsgore

    EDIT: Hatte ich ganz vergessen. Ich möchte das Windows, welches den Key empfangen soll nicht in den Vordergrund setzen und mit SendKeys (Das nur an aktive Fenster im Vordergrund sendet) arbeiten. 😉

    EDIT2: Push -> Hat keiner eine Idee? Bin bis jetzt noch nicht auf eine Lösung gestoßen....



  • Push -> Hat keiner eine Idee? Bin bis jetzt noch nicht auf eine Lösung gestoßen....

    gruß
    Hellsgore


  • Administrator

    Da du hier WinAPI über P/Invoke verwendest, solltest du vielleicht mal im WinAPI Forum fragen gehen. Nur so als Tipp 😉
    Ansonsten sieht das Ganze auch etwas verdächtig aus. Wieso willst du unterbinden, dass jemand CTRL drückt?

    Grüssli



  • Das wäre natürlich auch mal eine Idee...

    Ne, ist nix wildes. Es ist ein kleines Tool das Tastenkombis abfängt und dann ein paar Makros ausführt.

    z.B.

    Ich drücke CTRL+F1 dann soll er z.B. einen Text an ein Fenster schicken und daraufhin eine Taste drücken. Bei dem Tastendrücken hängts hier natürlich, wenn ich die CTRL weiter gedrückt halte.

    gruß
    Hellsgore


Anmelden zum Antworten