Aqui está um pequeno programa do Windows que faz isso corretamente (sem sobrecarregar a área de transferência). Ele deve ser adaptável ao PowerShell, e eu posso atualizar esta resposta se eu conseguir o tempo, mas você também pode usar esse programa diretamente.
Bem, e o PowerShell? Não há necessidade de instalar outro aplicativo. Infelizmente, você vai precisar criar um arquivo de script em algum lugar em sua PATH
...
Versão curta que você pode usar
Se você criar um arquivo em lotes (por exemplo ShowInNotepad.bat
) com o seguinte conteúdo e o colocar em PATH
algum lugar:
@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');
você pode simplesmente ligar echo blah | ShowInNotepad
de qualquer lugar!
Note que este não assumir que você está usando uma versão recente-ish do Windows (Vista +) e não tivesse desativado PowerShell ou desinstalado o .NET framework. Em outras palavras, uma instalação padrão do Windows funcionará.
Longas explicações e alternativas
A maneira mais fácil de pensar é automatizar a ação colar ( Ctrl+ V). Qual pelo menos uma outra resposta já está em andamento, mas essa usa o AHK - você pode ter melhor sorte em fazer com que o PowerShell funcione em um ambiente corporativo bloqueado.
Vamos continuar com o roteiro, sim?
#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');
É bem direto, então não vou me preocupar em explicar o script mais do que os comentários já fazem.
Uso
Para usá-lo, você só precisa colocar o script em um .ps1
arquivo (por exemplo ShowInNotepad.ps1
), colocá-lo em algum lugar do seu PATH
e depois ligar powershell ShowInNotepad.ps1
depois de colocar o texto que deseja exibir na área de transferência.
Exemplo:
echo blah | clip && powershell ShowInNotepad.ps1
Infelizmente, às vezes, a execução de scripts do PowerShell pode ser difícil (políticas de execução e tudo). Portanto, condensamos esse script em uma linha única que você pode chamar diretamente no prompt de comando ou até colocar em um arquivo em lotes:
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');
Se você criar um arquivo em lotes (por exemplo ShowInNotepad.bat
) com o seguinte conteúdo e o colocar em PATH
algum lugar:
@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');
você pode simplesmente ligar echo blah | ShowInNotepad
de qualquer lugar!
more
no Windows.