voici un petit programme Windows qui le fait correctement (sans entraver le presse-papier). Il devrait être adaptable à PowerShell, et je pourrais mettre à jour cette réponse si le temps me le permet, mais vous pouvez également utiliser ce programme directement.
Eh bien, qu'en est-il de PowerShell? Pas besoin d'installer une autre application. Malheureusement, vous aurez besoin de créer un endroit de fichier script dans votre PATH
...
Version courte que vous pouvez utiliser
Si vous créez un fichier de commandes (par exemple ShowInNotepad.bat
) avec le contenu suivant et le placez PATH
quelque part:
@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');
vous pouvez alors appeler echo blah | ShowInNotepad
de n'importe où!
Notez que cela ne suppose que vous utilisez une version récente de Windows ish (Vista +) et pas désactivé PowerShell ou désinstaller le framework .NET. En d'autres termes, une installation Windows par défaut fonctionnera.
Longue explication et alternatives
Le moyen le plus simple auquel je puisse penser est d'automatiser l'action de collage ( Ctrl+ V). Au moins une autre réponse est déjà en cours, mais celle-ci utilise AHK - vous auriez peut-être plus de chance que PowerShell fonctionne dans un environnement d'entreprise verrouillé.
Passons au script, oui?
#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');
C'est assez simple, je ne vais donc pas m'expliquer le script plus que ne le font déjà les commentaires.
Usage
Pour l'utiliser, il vous suffit de placer le script dans un .ps1
fichier (par exemple ShowInNotepad.ps1
), de le placer quelque part dans votre PATH
, puis d'appeler powershell ShowInNotepad.ps1
après avoir placé le texte que vous souhaitez afficher dans le Presse-papiers.
Exemple:
echo blah | clip && powershell ShowInNotepad.ps1
Malheureusement, il peut parfois être difficile d’exécuter des scripts PowerShell (règles d’exécution, etc.). Par conséquent, j'ai condensé ce script en une ligne que vous pouvez appeler directement à partir de l'invite de commande, ou même placer dans un fichier de traitement par lots:
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');
Si vous créez un fichier de commandes (par exemple ShowInNotepad.bat
) avec le contenu suivant et le placez PATH
quelque part:
@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');
vous pouvez alors appeler echo blah | ShowInNotepad
de n'importe où!
more
Windows.