Hier ist ein kurzes Windows-Programm, das es richtig macht (ohne die Zwischenablage zu überladen). Es sollte an PowerShell anpassbar sein, und ich könnte diese Antwort aktualisieren, wenn ich die Zeit dazu habe, aber Sie können das Programm auch direkt verwenden.
Wie wäre es mit PowerShell? Keine Notwendigkeit, eine andere Anwendung zu installieren. Leider haben Sie werden benötigen eine Skriptdatei irgendwo in Ihrem erstellen PATH
...
Kurze Version, die Sie verwenden können
Wenn Sie eine Batch-Datei (z. B. ShowInNotepad.bat
) mit folgendem Inhalt erstellen und an einem beliebigen Ort PATH
ablegen:
@echo off
clip
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
Sie können dann einfach echo blah | ShowInNotepad
von überall anrufen !
Beachten Sie, dass dies voraussetzt , dass Sie eine neuere Version von Windows (Vista +) verwenden und PowerShell nicht deaktiviert oder das .NET Framework nicht deinstalliert haben. Mit anderen Worten, eine Windows-Standardinstallation wird funktionieren.
Ausführliche Erklärung und Alternativen
Der einfachste Weg, den ich mir vorstellen kann, ist die Automatisierung der Einfüge- ( Ctrl+ V) Aktion. Was zumindest eine andere Antwort bereits tut, aber diese AHK verwendet - Sie haben möglicherweise mehr Glück, wenn PowerShell in einer gesperrten Unternehmensumgebung funktioniert.
Fahren wir mit dem Drehbuch fort, ja?
#start notepad, get process object (to get pid later)
$process = Start-Process -PassThru notepad;
# activate Notepad window
# based on http://stackoverflow.com/a/4994020/1030702
# SW_SHOW activates and shows a window http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx
$SW_SHOW = 5;
$sig = '[DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';
Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;
[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) | Out-Null;
# send a "Ctrl+V" keystroke to the active window
# from http://stackoverflow.com/a/17851491/1030702
Add-Type -AssemblyName System.Windows.Forms;
[System.Windows.Forms.SendKeys]::SendWait('^V');
Es ist ziemlich unkompliziert, daher werde ich das Skript nicht mehr erklären als die Kommentare, die es bereits tun.
Verwendungszweck
Um es zu verwenden, müssen Sie nur das Skript in eine .ps1
Datei (z. B. ShowInNotepad.ps1
) platzieren, es irgendwo in Ihrer PATH
und dann aufrufen, powershell ShowInNotepad.ps1
nachdem Sie den Text, den Sie in der Zwischenablage anzeigen möchten, platziert haben.
Beispiel:
echo blah | clip && powershell ShowInNotepad.ps1
Leider kann das Ausführen von PowerShell-Skripten manchmal schwierig sein (Ausführungsrichtlinien und alles). Aus diesem Grund habe ich dieses Skript zu einem Einzeiler zusammengefasst, den Sie direkt über die Eingabeaufforderung aufrufen oder in eine Batchdatei einfügen können:
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
Wenn Sie eine Batch-Datei (z. B. ShowInNotepad.bat
) mit folgendem Inhalt erstellen und an einem beliebigen Ort PATH
ablegen:
@echo off
clip
powershell -Command $process = Start-Process -PassThru notepad;$SW_SHOW = 5;$sig = '[DllImport("""user32.dll""")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);';Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32;[Win32.NativeMethods]::ShowWindow($process.Id, $SW_SHOW) ^| Out-Null;Add-Type -AssemblyName System.Windows.Forms;[System.Windows.Forms.SendKeys]::SendWait('^^V');
Sie können dann einfach echo blah | ShowInNotepad
von überall anrufen !
more
unter Windows eine Pipe-Funktion verwenden .