Benutzer mit den meisten Antworten
Einfügen aus Zwischenablage

Frage
-
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?- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:54
-
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...
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:53
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:54
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
-
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 ...
-
Klar geht das. Deine Batchdatei darf halt nur nicht im Vordergrund zu sehen sein.
Dann kannst du perwscript.SendKeys "^v"
an das Explorerfenster senden. Du kannst ja leider nicht sicherstellen, dass der Cursor auch auf einem Eingabefeld steht. Es bleibt halt auszuprobieren.
-
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.
-
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
-
> 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.
-
Was spricht gegen Get-Clipboard?
-
> 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". -
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?
-
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.
-
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?- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:54
-
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)?
-
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")
-
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...
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:53
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 9. August 2018 09:54
-
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, alsoWscript.SendKeys("^v")
-
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.
-