Вот небольшая программа для 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.