none
Einfügen aus Zwischenablage RRS feed

  • Frage

  • Hallo

    Ich habe mit ps einen Text in der Zwischenablage aufbereitet, der kann nun mit CTRL+V irgendwo eingefügt werden.

    Schön wäre, wenn das (also CTRL+V) irgendwie automatisch möglich wäre, gibt es da eine Möglichkeit?

    Viele Grüsse, nebbiolo

    Montag, 30. Juli 2018 06:32

Antworten

  • Genau das schwarze Dos-Fenster ist das Problem. Dieses klaut dir den Focus zum Browser (bei mir ist das allerdings blau).

    Ich habe, ehrlich gesagt, auch noch keine Einstellung gefunden, das Powershell-Fenster komplett auszublenden.
    Egal was man macht, ganz kurz blitzt es da auf, hier ein paar Beispiele.

    https://stackoverflow.com/questions/1802127/how-to-run-a-powershell-script-without-displaying-a-window

    Du must also dafür sorgen, dass dein Powershell-Fenster verschwindet, und der Focus automatisch wieder auf den Browser gesetzt wird und dann erst weiterläuft.

    Der Aufruf mit der Option "-WindowStyle Hidden" deines Scripts könnte dies erreichen.

    Nochmal zum schwarzen Fenster:
    Rufst du eine .BAT auf oder eine .ps1?

    Montag, 30. Juli 2018 13:07
  • Auch wenn das jetzt ketzerisch ist - AutoIT wurde genau für solche Anforderungen gebaut. Das ist mit PoSh doch eher eine Krücke - Du müßtest im Skript erst mal wieder die Zielanwendung als aktives Fenster hinbekommen und dann noch sicherstellen, daß der Eingabefokus auch auf dem richtigen Feld ist...

    Montag, 30. Juli 2018 14:10

Alle Antworten

  • Woher willst du das Ziel kennen?

    Hier ein Beispiel des Aufrues von wscript aus Powershell (VBS), mit dem man SENDKEYS an das aktive Fenster sendet.
    Im Zweifel kann es aber das Powershellfenster selber sein.

    https://superuser.com/questions/1249976/sendkeys-method-in-powershell

    Montag, 30. Juli 2018 07:57
  • Vielen Dank für die Antwort!

    Ich habe meine Anliegen zu wenig genau beschrieben:

    Bei geöffnetem Browser stehe ich auf einem Eingabefeld. Nun habe ich eine Batchdatei, die F9 aufgerufen werden kann und die eben einen ausgewählten Text in die Zwischenablage schreibt. Danach kann nun dieser mit CTRL+V eingefügt werden. 

    Es wäre natürlich wünschenswert, dass der Text (ohne CTRL>V) direkt eingefügt werden könnte.

    Aber ich vermute das ist nicht möglich, oder ev. mit Java oder C ...

    Montag, 30. Juli 2018 08:24
  • Klar geht das. Deine Batchdatei darf halt nur nicht im Vordergrund zu sehen sein.
    Dann kannst du per

    wscript.SendKeys "^v"

    an das Explorerfenster senden. Du kannst ja leider nicht sicherstellen, dass der Cursor auch auf einem Eingabefeld steht. Es bleibt halt auszuprobieren.

    Montag, 30. Juli 2018 08:37
  • Wenn man SendKeys in der beschriebenen Weise benutzt, kann man sogar gänzlich auf die Zwischenablage verzichten und den erzeugten Text direkt mit SendKeys "eintippen" lassen.

    Mit Tabulator kann man auch zwischen mehreren Feldern in der Ausgabe springen, falls das relevant ist. Auf diese Weise befülle ich z.B. Tabellen in Systemen, für die ich keinen Upload-Mechanismus habe.

    Montag, 30. Juli 2018 08:51
  • Das wäre natürlich super - vielen Dank bfuerchau :-)

    Aber ich bekomme eine Fehlermeldung:

    wscript.SendKeys : Die Benennung "wscript.SendKeys" wurde nicht als Name eines Cmdlet, einer Funktion, einer Scriptdatei oder eines ausführbaren Programms erkannt.

    Ich habe nun ein bisschen gegoogelt ... das scheint recht kompliziert ... 

    ein.bat (Batchdatei)

    echo das ist der Text | clip
    powershell -ep RemoteSigned -file ein.ps1
    pause
    #exit

    ein.ps1 (Powershell)

    wscript.SendKeys "^v"
    was muss ich da noch ergänzen?



    • Bearbeitet nebbiolo Montag, 30. Juli 2018 09:17
    Montag, 30. Juli 2018 09:16
  • Stimmt, der Link ist nicht ganz korrekt:

    $wsh = New-Object -comobject "Wscript.Shell"
    $wsh.SendKeys("^v")

    Montag, 30. Juli 2018 09:23
  • > Bei geöffnetem Browser stehe ich auf einem Eingabefeld. Nun habe ich eine Batchdatei, die F9 aufgerufen werden kann und die eben einen ausgewählten Text in die Zwischenablage schreibt. Danach kann nun dieser mit CTRL+V eingefügt werden.

    Also wenn ich in einem Browserfenster des IE etwas einfügen möchte, dann mache ich das direkt im DOM :-) Geht natürlich - leider - nur mit IE... Für Firefox würde sich Greasemonkey anbieten. Und "universell" ist - wie schon geschrieben - SendKeys.

    Montag, 30. Juli 2018 10:16
  • Was spricht gegen Get-Clipboard?

    Get-Clipboard

    Montag, 30. Juli 2018 11:07
  • "der kann nun mit CTRL+V irgendwo eingefügt werden."

    Kann der IE/Firefox/Chrome das denn selber?
    Ich glaube eher nicht;-).

    Montag, 30. Juli 2018 11:21
  • > Was spricht gegen Get-Clipboard?

    Nichts :-) Du kannst auch einen Clipboard-Watcher implementieren - https://mnaoumov.wordpress.com/2013/08/31/cpowershell-clipboard-watcher/
    Aber dann hast Du erst mal nur den Inhalt der Zwischenablage - und wenn Du den jetzt wo einfügen willst, brauchst ja "irgendwas".

    Montag, 30. Juli 2018 11:25
  • Ich habe nun verschiedene Varianten getestet, so auch mit Chrome, IE und Firefox. Aber es will mir einfach den Text nicht einfügen. In der Zwischenablage ist der Text (wie Set-Clipboard) ... aber das schwarze Dos-Fenster zeigt sich kurz ... aber sonst nichts :-(

    Batch-Datei:
    
    cls
    @echo off
    powershell -ep RemoteSigned -file ein.ps1
    #exit 
    
    PowerShell:
    
    Set-Clipboard -Value "Das ist der gewünschte Text der eingefügt werden sollte"
    $wsh = New-Object -comobject "Wscript.Shell"
    $wsh.SendKeys("^v")

    Was mache ich da falsch?

    Montag, 30. Juli 2018 12:28
  • Bist du sicher, dass der Fokus im Moment der Ausführung auf dem Eingabefeld liegt? Ansonsten geht der Befehl einfach ins Nichts.

    Zum Testen könntest du noch ein Sleep von ein paar Sekunden einbauen und in dieser Pause noch einmal auf das Eingabefeld klicken.

    Montag, 30. Juli 2018 12:50
  • Genau das schwarze Dos-Fenster ist das Problem. Dieses klaut dir den Focus zum Browser (bei mir ist das allerdings blau).

    Ich habe, ehrlich gesagt, auch noch keine Einstellung gefunden, das Powershell-Fenster komplett auszublenden.
    Egal was man macht, ganz kurz blitzt es da auf, hier ein paar Beispiele.

    https://stackoverflow.com/questions/1802127/how-to-run-a-powershell-script-without-displaying-a-window

    Du must also dafür sorgen, dass dein Powershell-Fenster verschwindet, und der Focus automatisch wieder auf den Browser gesetzt wird und dann erst weiterläuft.

    Der Aufruf mit der Option "-WindowStyle Hidden" deines Scripts könnte dies erreichen.

    Nochmal zum schwarzen Fenster:
    Rufst du eine .BAT auf oder eine .ps1?

    Montag, 30. Juli 2018 13:07
  • Danke auch Dir hpotsirhc!

    Also, der "Cursor" blinkt auf dem Eingabe-Feld, dann drücke ich F8, das DOS-Fenster erscheint kurz ... dann passiert nichts mehr - der Cursor ist aber weg. Wenn ich nun mit der Maus auf das Feld klicke erscheint der "Curser" wieder ... wenn ich dann CTRL+C ausführe setzt es den gewünschten Inhalt ein.

    Ich vermute schon, dass es etwas mit dem Fokus zu tun hat ... aber wie kann ich den setzen?

    Gibt es eine Möglichkeit das PS ohne batch direkt aufzurufen (via Funktionstaste)? 

    Montag, 30. Juli 2018 13:10
  • wie oben angegeben, ein .bat, das dann das .ps1 aufruft ... kenne keinen anderen Weg :_-(
    Montag, 30. Juli 2018 13:12
  • Das verstehe ich nun nicht, das ps1 müsste auch direkt aufrufbar sein.
    Poste mal den Code.
    Montag, 30. Juli 2018 13:13
  • oben angeben vor ca. 50 Minuten ...
    Montag, 30. Juli 2018 13:19
  • also nochmals: könnte ich irgendwie das PowerShell "ein.ps1" aufrufen wenn ich im Eingabefeld stehe? nicht über die batch.datei ...
    Montag, 30. Juli 2018 13:27
  • also, ich hab nun auf der F10 Taste direkt: 

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -file ein.ps1

    Aber das "schwarze" Fenster öffnet sich immer noch schnell - eingefügt wird nichts.

    Hier das ein.ps1

    Set-Clipboard -Value "Das ist der gewünschte Text der eingefügt werden sollte"
    $wsh = New-Object -comobject "Wscript.Shell"
    $wsh.SendKeys("^v")

    Montag, 30. Juli 2018 14:08
  • Auch wenn das jetzt ketzerisch ist - AutoIT wurde genau für solche Anforderungen gebaut. Das ist mit PoSh doch eher eine Krücke - Du müßtest im Skript erst mal wieder die Zielanwendung als aktives Fenster hinbekommen und dann noch sicherstellen, daß der Eingabefokus auch auf dem richtigen Feld ist...

    Montag, 30. Juli 2018 14:10
  • Das AutoIt klingt jedenfalls interessant, wenn es nicht doch auch irgendein Fenster aufmacht, bzw. ggf. sort der IE ja dafür.

    Ansonsten, da die Ausführung ja ggf. schneller als das Schließen des Fenster ist, mach ma probeweise einen

    $wsh.Sleep(1000)  # für 1 Sekunde pausieren

    vor dem SendKeys.
    Wenn du die schwarze Box währenddessen immer siehst, kannst du den Focus leider nicht zurückgeben.
    Dann schau dir mal AutoIt an, das klingt schon interssant.

    Alternativ kann man auch mittels .vbs VB-Scripte direkt ausführen.
    Hier wird bei der direkten Ausführung keine DOSe geöffnet.
    WScript lässt sich von da aus auch direkt aufrufen, also

    Wscript.SendKeys("^v")

    Montag, 30. Juli 2018 14:30
  • Danke für den Tip mit autoid - aber ich möchte dafür nicht eine Applikation installieren ...

    Dann lebe ich halt mit dem CTRL+V - wäre feudal gewesen, muss aber nicht sein ... Vielen Dank an Alle!

    Montag, 30. Juli 2018 14:56
  • Im WScript.Shell-Objekt ist auch ein Befehl AppActivate enthalten. Mit 

    $wsh.AppActivate("Chrome")

    kannst du z.B. den Chrome-Browser als aktives Fenster aufrufen. 

    Du musst jetzt herausfinden, auf welchen Namen dein Fenster hört. Üblicherweise steht das im Fenstertitel.

    Und das muss dann vor deinen Einfüge-Befehl.

    Mittwoch, 1. August 2018 08:43
  • Im Firefox habe ich z.B. keinen Fenstertitel mehr sondern nur die Reiter, hinzu kommt, dass ich trotzdem mehrere Instanzen ööffnen kann.

    AppActivate sucht den ersten Prozess, dessen Titel der Suche entspricht.
    Sicher ist das so auch nicht.

    Mittwoch, 1. August 2018 12:22