Shortcuts an anderes Programm senden

dila71

Mitglied
Hallo,
ich habe das folgende Problem.

Ich soll eine zusätzlichen Tastatur so ansteuern, dass sie an ein bestimmtes Programm dessen Shortcuts sendet. Ich bin soweit, dass ich die Tastatur ansteuern kann, dass ich deren Rückgaben ermittle und diese unterscheiden kann.

Das Programm welches gesteuert werden soll hat keine COM- oder ähnliche Schnittstelle. Es reagiert nur auf Shortcuts (Strg + A, Strg + S...).

Jetzt hänge ich an der Stelle, dass ich nicht weiß, wie sende ich diese Shortcuts?
Gibt es eine Möglichkeit dass mein Programm "im Hintergrund" läuft und die Shortcuts "einfach" an das aktive Fenster sendet? (Wenn versehentlich Word offen und aktiv ist, und "Strg + S" dadurch versehentlich an dieses gesendet wird, dann speichert Word eben. Unbekannte Shortcuts werden eh ignoriert.)
Oder kann ich wenn ich den Prozessnamen weiß, die Shortcuts gleich an diesen senden? (Das wäre evtl doch nicht so gut, da ich nicht garantieren kann, dass der Prozessname gleich bleibt.)

Vielen Dank für jegliche Hilfe
Dirk
 
Zuletzt bearbeitet:
Nachdem ich nun länger gesucht habe habe ich was gefunden:
PostMessage
hier ein kleines Beispiel:
Code:
class Program
    {
        [DllImport("user32", EntryPoint = "PostMessage")]
        public static extern int PostMessage(int hwnd, int wMsg, int wParam, int lParam);

        [DllImport("user32", SetLastError = true)]
        static extern int FindWindow(string lpClassName, string lpWindowName);

        static void Main(string[] args)
        {
            int WM_KEYDOWN = 0x100;
            int escape = 0x1B;
            Keys keycombi = (Keys.Control | Keys.Shift | Keys.S);
            int combi = (int)keycombi ;

            int Handle = FindWindow("Programmname", null);

            PostMessage(Handle, WM_KEYDOWN, escape, 0);
         }
     }

Wenn ich escape an das Programm sende, geht es prima.
Nun brauche ich ja aber Tastenkombinationen
escape hat den tastaturcode 27 (0x1B), das ist einfach.
Wie kann ich aber den Code für Strg Shift S zusammensetzen?
strg Tastaturcode 17 (0x10)
Shift Tastaturcode 16 (0x0F)
S Tastaturcode 83 (0x53)

Da ich gelesen habe, dass die Kombination eine ODER-Kombination der einzelnen Keycodes sei darum habe ich keycombi und combi versucht.
Ergebnis: Obwohl combi mit 196691 belegt ist, das Programm reagiert, als hätte ich einfach nur S (0x53) gesendet.

Was mache ich falsch?

Danke
Dirk
 
Probier das ganze doch mal so:
Code:
int keys = 0x10 | 0x0F | 0x53;

Da steht dann in der Variable 95.
 
Hallo und vielen Dank für die Antwort.

Das Problem liegt darin, dass PostMessage die falsche Funktion ist.

Man muss (soweit ich jetzt raus gefunden habe) die Funktion keybd_event verwenden und echt jeden einzelnen Tastendruck simulieren.

Trotzdem Danke
Dirk
 
Hallo,

wenn du die Funktion für jede Taste aufrufst, werden die ja nacheinander gedrückt und nicht alle zusammen, aber es sollen ja alle zusammen gedrückt werden.
Also muss das ja eigentlich in einem Funktionsaufruf gemacht werden!

MfG
Fabsch
 
Hallo,

ich habe das so erledigt:
Code:
keybd_event((byte)EVirtualKeys.CONTROL, (byte)MapVirtualKey((uint)EVirtualKeys.CONTROL, 0), 0, 0);
keybd_event((byte)EVirtualKeys.SHIFT, (byte)MapVirtualKey((uint)EVirtualKeys.SHIFT, 0), 0, 0);
keybd_event((byte)EVirtualKeys.KEY_S, (byte)MapVirtualKey((uint)EVirtualKeys.KEY_S, 0), 0, 0);
keybd_event((byte)EVirtualKeys.KEY_S, (byte)MapVirtualKey((uint)EVirtualKeys.KEY_S, 0), KEYEVENTF_KEYUP, 0);
keybd_event((byte)EVirtualKeys.SHIFT, (byte)MapVirtualKey((uint)EVirtualKeys.SHIFT, 0), KEYEVENTF_KEYUP, 0);
keybd_event((byte)EVirtualKeys.CONTROL, (byte)MapVirtualKey((uint)EVirtualKeys.CONTROL, 0), KEYEVENTF_KEYUP, 0);

wobei EVirtualKeys eine Enumeration mit den Hexwerten der einzelnen Tasten ist.


Gruß Dirk
 

Neue Beiträge

Zurück