Einfaches Script für Tastenkombination mit ws.sendkeys resultiert in "Num ein"

  • VBScript

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcusma.

    Einfaches Script für Tastenkombination mit ws.sendkeys resultiert in "Num ein"

    Hallo Gemeinde,

    ich habe, um das vorauszuschicken, absolut keine Ahnung vom Programmieren, möchte mich aber in VB einarbeiten.

    Aktuell möchte ich ein Script erstellen, das mir in einem Programm mit ALT+N, ALT+O usw. einen Unterpunkt öffnet. Dazu habe ich folgendes zusammengestellt:

    Set ws = Wscript.CreateObject("Wscript.Shell")
    ws.sendkeys "%N", True
    ws.sendkeys "%O", True
    ws.sendkeys "%L", True
    ws.sendkeys "%N", True

    Das ist als VBS abgespeichert und wird per Verknüpfung und Tastatur Shortcut gestartet wenn das betreffende Programm offen und im Vordergrund ist.

    Nun passiert jedoch nur, dass kurz die Meldung "Num ein" der Tastatur eingeblendet wird. Dasselbe passiert auch bei anderen Kombinationen wie z.B. ALT+K, ALT+B oder wenn ich die Tastatureingaben mit "%(NOLN)" zusammenfasse.

    Hat dazu jemand eine Idee?!

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo Marcusma,

    da wir ja in einem Forum sind, um den Leuten in erster Linie mit Ihren aktuellen Problemen zu helfen,
    anbei ein Codeschnipsel den du auf deine Bedüfnisse zuschneiden und testen kannst:

    Visual Basic-Quellcode

    1. Set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.Run "%windir%\notepad.exe"
    3. WshShell.AppActivate "Notepad"
    4. Wscript.Sleep 150
    5. 'Text im Editor einfügen
    6. WshShell.SendKeys "Das ist ein Test"
    7. 'Menüpunkt "Format öffnen mittel ALT+O
    8. WshShell.SendKeys "%O"
    9. Set WshShell = nothing


    Ich hoffe er hilft dir weiter. Bei Fragen einfach fragen.

    Wenn du ernsthaft vor hast, dich mit Programmierung zu beschäftigen, solltest du dir aber sicherlich den Rat von @ErfinderDesRades zu Herzen nehmen.
    Gruß Murdoc
    Danke für den Schnipsel.

    Ich habe mal folgendes daraus übernommen:

    Quellcode

    1. ​Set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.SendKeys "%N", True
    3. WshShell.SendKeys "%O", True
    4. WshShell.SendKeys "%L", True
    5. WshShell.SendKeys "%N", True


    Das Ergebnis ist leider dasselbe.

    WshShell.Run bringt mir nichts, genauso wie AppActivate, da sich der Fenstername abhängig vom Inhalt laufend ändert. Es heißt z.B. "Übersicht ABC" wenn ich Kunde ABC geöffnet habe, "Übersicht XYZ" beim Kunden XYZ usw. Folglich brauche ich auch kein Sleep, da ich das Script ja ausschließlich bei offenem und aktiven Fenster starte und einen Text einfügen muss ich auch nicht.

    Insofern hilft mir das leider nicht weiter.

    Was mir jetzt auffiel ist, dass das Fenster nach dem starten des Scripts nur kurz aktiv bleibt. Dabei werden die relevanten Unterstriche der Menübezeichnungen kurz eingeblendet, dann wird das Fenster inaktiv, ohne dass sich ein Untermenü öffnet. Das sollte ja aber mit "True" abgewartet werden.

    Besteht denn die Möglichkeit, einen Fenstertitel abzugreifen und dann variabel aktiv zu halten?
    1. Für AppActivate brauchst Du nicht den vollen Titel, sondern nur den Anfang - der ggf. immer gleich ist, unabhängig vom Kunden.
    2. Dein Code würde in der Art auch nicht bei notepad funktionieren, weil ihm das Alt alias % ab dem 2. Mal wohl zuviel ist. Wenn ich in notepad Alt gedrückt halte und mit B- und danach U-Drücken und anschließend Alt-Loslassen (etwas umständlich) zum Suchen-Dialog kommen will, muss ich in VBS nämlich folgendes verwenden:

    Visual Basic-Quellcode

    1. Set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.AppActivate "Unbenannt" 'obwohl der komplette Titel "Unbenannt - Editor" heißt
    3. WScript.Sleep 1000 'erstmal etwas warten
    4. WshShell.SendKeys "%B", true 'um ins Bearbeiten-Menü zu kommen
    5. WshShell.SendKeys "U", true 'ohne Alt bzw %, um zu Suchen zu kommen

    Dein Code würde das Menü mit dem Mnemonic N, dann das mit O, dann L, dann N aufrufen. Es würde als versuchen von Menü zu Menü zu springen, ohne einen Menüeintrag in einem Menü anzuwählen. Es kommt nun darauf an, was Dein Menü hergibt. Wenn bei Dir ab Zeile#5 nur Menüpunkte angewählt werden sollen, muss also ab dort das % raus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Super, damit hat es jetzt geklappt! Ein Problem war noch, dass das Fenster mit "Kundenübersichht" beginnt. Mit dem Umlaut funktionierte es aber nicht, deshalb nur mit "Kunden" und schon geht es.

    Vielen Dank!!

    Quellcode

    1. ​Set WshShell = WScript.CreateObject("WScript.Shell")
    2. WshShell.AppActivate "Kunden"
    3. WScript.Sleep 1000
    4. WshShell.SendKeys "%N", True
    5. WshShell.SendKeys "O", True
    6. WshShell.SendKeys "L", True
    7. WshShell.SendKeys "N", True