aqui 'é um pequeno programa do Windows que faz isso adequadamente (sem estrobiar a área de transferência). Ele deve ser adaptável ao PowerShell, e eu posso atualizar essa resposta se tiver tempo, mas você também pode usar esse programa diretamente.
Bem, e quanto ao PowerShell? Não há necessidade de instalar outro aplicativo. Infelizmente, você irá precisar criar um arquivo de script em algum lugar no seu PATH
...
Versão resumida que você pode usar
Se você criar um arquivo de lote (por exemplo, ShowInNotepad.bat
) com o seguinte conteúdo e colocá-lo no seu PATH
em 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 chamar echo blah | ShowInNotepad
de qualquer lugar!
Observe que isso faz presumir que você está usando uma versão recente do Windows (Vista +) e não desativou o PowerShell ou desinstalou o .NET framework. Em outras palavras, uma instalação padrão do Windows funcionará.
Explicação e alternativas longas
A maneira mais fácil de pensar é automatizar a ação colar ( Ctrl + V ). O que pelo menos uma outra resposta já está fazendo, mas aquela usa o AHK - você pode ter mais 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');
É bastante simples, então não vou me incomodar em explicar o script mais do que os comentários já feitos.
Uso
Para usá-lo, basta colocar o script em um arquivo .ps1
(por exemplo, ShowInNotepad.ps1
), colocá-lo em algum lugar no seu PATH
e depois chamar powershell ShowInNotepad.ps1
depois de colocar o texto que você deseja exibir a área de transferência.
Exemplo:
echo blah | clip && powershell ShowInNotepad.ps1
Infelizmente, a execução de scripts do PowerShell pode, às vezes, ser difícil (políticas de execução e tudo). Portanto, eu tenho condensado este script para um one-liner que você pode chamar diretamente do Prompt de Comando, ou até mesmo colocar em um arquivo de lote:
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 de lote (por exemplo, ShowInNotepad.bat
) com o seguinte conteúdo e colocá-lo no seu PATH
em 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 chamar echo blah | ShowInNotepad
de qualquer lugar!