Novice benötige Hilfe bei SendKeys

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von rommi.

    Novice benötige Hilfe bei SendKeys

    Hallo Zusammen,

    wer kann helfen? Ich habe bisher mit VB noch absolut garnichts gemacht
    und benötige asap zum Testen ein gaaaanz kleines Script mit dem Befehl
    "SendKeys"! Es geht darum die Tastatureingabe "Strg+V" mit SendKeys zu
    simmulieren. Mehr braucht das Script nicht zu tun! Wer kann mir das mal
    asap ins Forum stellen? Vielen Dank im voraus! Wenns geht soll dabei kein
    Consolen-Fenster erscheinen und ausserdem möchte ich das Script dann als
    exe kompelieren.

    Ich habe Visual Studio 2008 im Einsatz und habe bisher nur mit C++ pro-
    grammiert. Natürlich gibt es in C++ die Befehle "SendInput" und "keybd_event"
    aber aus bestimmten Gründen (ist jetzt zu lange zum erklären) möchte ich
    SendKeys von VB testen.

    Liebe Grüsse, rommi
    Hallo Computerdepp,

    nein, ich benötige nur ein kleines VB-Code dass mit der Funktion "SendKeys" die angebeneTastenfolge simuliert.

    Natürlich wird dann der Inhalt der Zwischenablage entsprechend irgenwo (je nachdem wo sich gerade der Fokus

    befindet) eingefügt schliesslich ist die Tastfolge Strg+V dafür da. Wie gesagt bräuchte ich einen vollständigen

    Code (also plus Kopfanweisungen etc.) da ich bisher noch nie was in VB geschrieben habe und ich im Moment nicht

    viel Geld für Literatur ausgeben möchte wo ich nur dieses kleine Snippet benötige damit ich etwas testen kann

    (Zusammenspiel mit andere Programmen). Wenn ich mal mehr Zeit habe werd ich mich mal näher mit VB beschäftigen

    aber im Moment ...

    Liebe Grüsse, rommi
    Hallo Zusammen,
    jetzt habe ich mal bis hierher durchgebissen. Aber da kommt bei der Zeile mit SendKeys immer die Fehlermeldung "Der Name "SendKeys" wurde nicht deklariert". Was muss ich denn am Code noch verändern damit die Funktion SendKeys läuft? Wer kann weiterhelfen? Gruss, rommi

    Quellcode

    1. Module Tastendruck
    2. Sub Main()
    3. 'XXXXXX MessageBox-Aufruf
    4. MsgBox("Taste 1 wird gedrückt") ' Display message on computer screen.
    5. 'XXXXXX Kurze Pause
    6. System.Threading.Thread.Sleep(5000)
    7. 'XXXXXX Zum Testen mal die Taste "1" drücken
    8. SendKeys.Send("1")
    9. End Sub
    10. End Module
    Ich hab was du brauchst ;)

    Also, ich hab keine Ahnung wie weit du mit VB vertraut bist, also folgendes.

    Du startest Visual Basic. Dann gehst du auf Datei -> Neues Projekt und dann auf Windows Forms Anwendung.
    nun ziehst du dir mal einen Timer aus der Toolbox(Falls Toolbox nicht vorhanden, klicke auf Ansicht -> Toolbox)
    auf deine Form. Stelle den Intervall auf 1000 und Enabled auf True. Jetzt dobbelklickst du auf den Timer und gibst im Timer1_Tick Event folgendes ein:

    VB.NET-Quellcode

    1. Sendkeys.SendWait("^" & "V")


    Falls du bereits gerade einen Text oder eine Datei kopiert hast, wird diese(r) nun eingefügt.

    "^" für STRG
    "%" für ALT
    "+" für Umschalt

    Bispiele:

    VB.NET-Quellcode

    1. 'einfügen:
    2. Sendkeys.SendWait("^" & "C")
    3. 'Alle auswählen
    4. Sendkeys.SendWait("^" & "A")
    5. 'Anwendung mit Sendkeys schließen:
    6. Sendkeys.SendWait("%" & "{F4}") 'Ist also dasselbe wie ALT+F4
    7. 'Zahl senden:
    8. Sendkeys.SendWait("9")
    9. 'Diese Zahl nun mit Umschalt senden:
    10. Sendkeys.SendWait("+" & "9") '<- Sendet natürlich dann ein Klammer-zu ")"


    Gruß %P%
    Hello World
    Servus %P%,

    ich hab mal alles so gemacht wie du es beschrieben hast aber es funzt nicht. Erstens soll ja beim Ausführen des Programms kein Fenster (bzw. Form) auf dem Bildschirm erscheinen sondern es soll absolut im Hintergrund (also ohne Fenster) arbeiten und zweitens selbst mit der von dir beschriebenen Version wird der Befehl (Strg+V) auch nicht ausgeführt. Es erscheint das Windows-Form-Fenster aber der die Tastensimulation findet nicht statt. Ich hab mal den Timer auf 5000 Millisekunden eingestellt damit ich nachdem Start/Debug des Scripts noch genügend Zeit habe noch auf ein Notepad-Fenster zu klicken und dann warte ich eigentlich darauf das Strg-V ausgeführt wird und nachdem Notepad gerade den Fokus hat müsste rein theoretisch der aktuelle Inhalt der Zwischenablage in das Notepad-Fenster eingefügt werden. Aber leider passiert nix ausser dass das "blöde" Form-Fenster erscheint :(

    Was mich auf jeden Fall sehr verwundert dass bei deinem Beispiel die Funktion "Sendkeys" mit keiner Fehlermeldung angemoosert wird wogegen wenn ich nur ein leeres Projekt erstelle ohne Forms dann kommt die schon von mir beschriebene Fehlermeldung ?!! Bei Zeus, das versteh ich einfach nicht, aber wer mal ein bisschen programmiert (hab bisher nur mit C++ und mit Perl a bisserl rumgemacht) hat der darf sich eigentlich über garnix mehr wundern ;)

    Trotzdem vielen Dank erstmal für deinen Einsatz. Finde ich immer Klasse wenn jemand helfen will :)

    Gruss, rommi
    nein, der Code funktioniert!!!

    Um es zu testen öffne notepad. Jetzt kopiere, woher auch immer, irgendeinen Text. Starte nun dein Programm und hole Notepad in den Vordergrund. Nun müsste im 2,5 Sekundentakt (bzw. du hast es ja auf 5000 geändert) das kopierte eingefügt werden.

    -> Ist Timer1 eigentlich überhaupt Enabled = True??? Sehr beliebter Fehler.

    Bei mir funzt der Code einwandfrei. PS Alternativ könntest du, wenn Notepad bereits geöffnet ist, im Timer auch schreiben:

    VB.NET-Quellcode

    1. AppActivate("editor")
    2. Sendkeys.SendWait("^" & "V")



    Gruß %P%
    Hello World

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „%P%“ ()

    Servus %P%,

    ja du hast recht es funzt. Timer war nicht enabled!!!! Ok es funzt aber wie schon gesagt wie bekomme ich denn das Ganze jetzt ohne dieses Window-Form-Fenster hin? Kann man das irgenwie ausblenden, gibts dafür ne Eigenschaft oder Einstellung? Ausserdem frag ich mich echt warum SendKeys bei einem leeren Projekt (Konsole) nicht geauso geht! Na ja danke auf jeden Fall erstmal für alles :thumbup:

    gruss, rommi
    ohne windows forms fenster?

    Alsdann da gibt es

    - Im Eigenschaftsfenter der Form Opacity auf 1 oder oder während der Laufzeit 0.01
    - Im Eigenschaftsfenter WindowsState auf Minimized
    - Im Eigenschaftsfenster ShowInTaskbar auf False
    - Während der Laufzeit: Me.Hide()

    so, damit wäre deine App schon mal versteckt.

    Gruß %P%

    PS: Ich schau noch schnell nach wegen der Konsolenfrage, Antwort kommt noch ;)
    Hello World
    Servus %P%,

    ok jetzt is das Fenster weg, yippi! Aber jetzt zum Schluss noch ne Frage. Was muss ich machen wenn den Strg+V Befehl nur einmalig ausgeführt haben möchte und nicht z.B. alle 5 Sekunden bzw. was ich in der Eigenschaft "Intervall" beim Timer-Objekt einstelle. D.h. nach einer einmaligen Ausführung soll das kleine Basic Programm beendet werden..

    Gruss, rommi
    Kleiner Nachtrag noch! Ich habe bei der ersten Erstellung (also vor der Windows-Form) des kleinen Basic-Programms den Projekttyp "leeres Projekt" ausgewählt und nicht "Konsolenanwendung". Ich wollte Konsolenanwendung nicht auswählen da man dort ja auch ein Fenster (DOS-Fenster) während der Laufzeit bekommt und ich wollte ja von vornherein ohne ein Fenster auskommen. Gruss, rommi
    Hi rommi,

    wieso willst du denn UNBEDINGT VB.NEt verwenden ? wenn du eh keine Form benötigst.

    Mach es doch (is ja auch vb;)) mit vb script:

    Das würde etwa so aussehen:

    VB.NET-Quellcode

    1. set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.AppActivate "Calculator" ' oder in welche app du auch immer deine sendkeys senden willst
    3. WScript.Sleep 100
    4. WshShell.SendKeys "^V"


    habs nicht getest aber sollte funktionieren.

    Schreibs in eine .txt und nenns .vbs

    läuft aber standard mässig nur unter windoofs ^^

    gruss mono
    Das ist meine Signatur und sie wird wunderbar sein!
    naja direkt nach dem Code eben so:

    VB.NET-Quellcode

    1. Sendkeys.SendWait("^" & "V")
    2. Timer1.stop()
    3. Application.Exit() 'falls ich dich richtig verstanden habe


    Gruß %P%
    Hello World
    Servus Zusammen,

    @Mono. Leider funzt die Variante mit VB-Script nicht (habe ich schon vor ein paar Tagen getestet) und der SendKeys-Befehl von VBS verhält sich unterschiedlich zu dem von VB. Darum wollte ich unbedingt ein Script in VB haben.

    @%P". Jetzt funzt erstmal alles wie ich es haben wollte, Danke!!! :thumbsup:

    gruss, und gute Nacht rommi