ось коротка програма Windows, яка робить це належним чином (не розтушовуючи буфер обміну). Він повинен бути адаптованим до PowerShell, і я можу оновити цю відповідь, якщо знайду час, але ви також можете просто скористатися цією програмою безпосередньо.
Ну, а як щодо PowerShell? Не потрібно встановлювати інший додаток. На жаль, вам буде потрібно створити файл сценарію в своєму PATH
...
Коротка версія, яку ви можете використовувати
Якщо ви створюєте пакетний файл (наприклад ShowInNotepad.bat
) із наступним вмістом і поміщаєте його у своє PATH
кудись:
@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');
Ви можете просто зателефонувати echo blah | ShowInNotepad
з будь-якого місця!
Зверніть увагу , що це дійсно припустити , що ви використовуєте останню іш версію Windows (Vista +) і не відключили PowerShell або деінсталювати рамки .NET. Іншими словами, буде встановлена установка Windows за замовчуванням.
Тривале пояснення та альтернативи
Найпростіший спосіб, який я можу придумати, - це автоматизувати дію вставлення ( Ctrl+ V). Який хоча б ще один відповідь вже робить, але той, що використовує AHK - ви, можливо, матимете більше удачі змусити PowerShell працювати в зафіксованому корпоративному середовищі.
Давайте продовжимо сценарій, так?
#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');
Це досить просто, тому я не буду намагатися пояснювати сценарій більше, ніж коментарі.
Використання
Для його використання потрібно просто помістити скрипт у .ps1
файл (наприклад ShowInNotepad.ps1
), розмістити його десь у своєму, PATH
а потім зателефонувати powershell ShowInNotepad.ps1
після розміщення тексту, який потрібно відобразити у буфер обміну.
Приклад:
echo blah | clip && powershell ShowInNotepad.ps1
На жаль, виконання сценаріїв PowerShell іноді може бути складним (правила виконання та всі). Тому я сконденсував цей скрипт до однолінійного виклику, на який можна зателефонувати безпосередньо з командного рядка або навіть розмістити у пакетному файлі:
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');
Якщо ви створюєте пакетний файл (наприклад ShowInNotepad.bat
) із наступним вмістом і поміщаєте його у своє PATH
кудись:
@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');
Ви можете просто зателефонувати echo blah | ShowInNotepad
з будь-якого місця!
more
Windows.