none
Aus String Tastenfolge senden RRS feed

  • Frage

  • Hallo,

     

    ich möchte aus einem String eine Tastenfolge mit System.Windows.Forms.SendKeys.Send(); oder Ähnlichem senden. Mein String beinhaltet dabei alle möglichen Zeichen, auch aus ausländischen Alpabeten:

    Bsp:
    "Mehrere Wörter mit Sonderzeichen äüö!$()=/\&'-:@µ"
    "Satz mit
    Zeilenumbruch"
    ...

    Wenn ich den String einfach mit SendKeys.Send() ausgebe, so werden ab der 2. Ausgabe eines Strings Fehlerhafte Tasten ausgeben (Getestet in Notepad).

    Wie kann meinen String mit Sonderzeichen usw ausgeben?

    Danke schonmal für die Antwort!

     

     

    Mit freundlichen Grüßen,
    Reiser

    Mittwoch, 8. Dezember 2010 09:36

Antworten

  • Mittwoch, 8. Dezember 2010 18:49
  • Hallo Reiser,

    Zum Beispiel so:

      private void button1_Click(object sender, EventArgs e)
      {
       textBox1.Focus();
       string ausgabe1 = @"Mehrere Wörter mit Sonderzeichen äüö!$()=/\&'-:@µ";
       Sende(ausgabe1);
       string ausgabe2 = @"Satz mit
    Zeilenumbruch
    noch eine Zeile";
       Sende(ausgabe2);
      }
    
      private void Sende(string ausgabe)
      {
       SendKeys.Send(ausgabe.
        Replace("+", "{+}").Replace("^", "{^}").
        Replace("(", "{(}").Replace(")", "{)}").
        Replace("%", "{%}").Replace("~", "{~}").
        Replace("\r\n", "\n"));
      }
    

    Bei SendKeys haben Zeichen wie Plus (+), Zirkumflex (^), Prozent (%), Tilde (~) sowie die runden Klammern ( ) eine gesondert Bedeutung - insofern müsstest Du mit analogen Replace-Befehlen (wie oben) diese in geschweifte Klammern ({}) einschliessen. Das  [Replace("\r\n", "\n")] ist z.T. für den Zeilumbruch notwendig.

    [SendKeys-Klasse (System.Windows.Forms)]
    http://msdn.microsoft.com/de-de/library/system.windows.forms.sendkeys(v=VS.100).aspx

    Weiterhin sendet SendKeys nur Messages (Meldungen) ggf. an andere Prozesse. Somit gilt die UIPI Sicherheits Einschränkung ab Vista (höher priorisierte Prozesse müssten das erst erlauben etc., oder es funktioniert dann da nicht etc.). SendKeys ist ~normal keine besonders gute Lösung - gut manchmal geht es nicht anders.

     


    ciao Frank
    Mittwoch, 8. Dezember 2010 20:10
  • Hallo Reiser,

    Ich kann mir nicht vorstellen, was genau Du vorhast, aber umfangreiche Keys-Folgen an Notepad zu schicken, scheint mir eine etwas umständliche Lösung zu sein. 

    Lies als erstes die Dokumentation (sehr ernüchternd). SendKeys ist problematisch in der Verwendung, und zeigt zuweilen ein abweichendes Verhalten je nachdem welches Betriebsystem man verwendet.

    Käme eine andere Lösung für Dich nicht in Frage (Zwischenablage, Subclassing, Windows-Nachrichten usw.)?

    Gruß
    Marcel

    Mittwoch, 8. Dezember 2010 21:48
    Moderator

Alle Antworten

  • Mittwoch, 8. Dezember 2010 18:49
  • Hallo Reiser,

    Zum Beispiel so:

      private void button1_Click(object sender, EventArgs e)
      {
       textBox1.Focus();
       string ausgabe1 = @"Mehrere Wörter mit Sonderzeichen äüö!$()=/\&'-:@µ";
       Sende(ausgabe1);
       string ausgabe2 = @"Satz mit
    Zeilenumbruch
    noch eine Zeile";
       Sende(ausgabe2);
      }
    
      private void Sende(string ausgabe)
      {
       SendKeys.Send(ausgabe.
        Replace("+", "{+}").Replace("^", "{^}").
        Replace("(", "{(}").Replace(")", "{)}").
        Replace("%", "{%}").Replace("~", "{~}").
        Replace("\r\n", "\n"));
      }
    

    Bei SendKeys haben Zeichen wie Plus (+), Zirkumflex (^), Prozent (%), Tilde (~) sowie die runden Klammern ( ) eine gesondert Bedeutung - insofern müsstest Du mit analogen Replace-Befehlen (wie oben) diese in geschweifte Klammern ({}) einschliessen. Das  [Replace("\r\n", "\n")] ist z.T. für den Zeilumbruch notwendig.

    [SendKeys-Klasse (System.Windows.Forms)]
    http://msdn.microsoft.com/de-de/library/system.windows.forms.sendkeys(v=VS.100).aspx

    Weiterhin sendet SendKeys nur Messages (Meldungen) ggf. an andere Prozesse. Somit gilt die UIPI Sicherheits Einschränkung ab Vista (höher priorisierte Prozesse müssten das erst erlauben etc., oder es funktioniert dann da nicht etc.). SendKeys ist ~normal keine besonders gute Lösung - gut manchmal geht es nicht anders.

     


    ciao Frank
    Mittwoch, 8. Dezember 2010 20:10
  • Hallo Reiser,

    Ich kann mir nicht vorstellen, was genau Du vorhast, aber umfangreiche Keys-Folgen an Notepad zu schicken, scheint mir eine etwas umständliche Lösung zu sein. 

    Lies als erstes die Dokumentation (sehr ernüchternd). SendKeys ist problematisch in der Verwendung, und zeigt zuweilen ein abweichendes Verhalten je nachdem welches Betriebsystem man verwendet.

    Käme eine andere Lösung für Dich nicht in Frage (Zwischenablage, Subclassing, Windows-Nachrichten usw.)?

    Gruß
    Marcel

    Mittwoch, 8. Dezember 2010 21:48
    Moderator