inilah program Windows singkat yang melakukannya dengan benar (tanpa merusak clipboard). Seharusnya bisa beradaptasi dengan PowerShell, dan saya mungkin memperbarui jawaban ini jika saya punya waktu, tetapi Anda juga bisa langsung menggunakan program itu.
Nah, bagaimana dengan PowerShell? Tidak perlu menginstal aplikasi lain. Sayangnya, Anda akan perlu untuk membuat suatu tempat file script di Anda PATH
...
Versi singkat yang dapat Anda gunakan
Jika Anda membuat file batch (mis. ShowInNotepad.bat
) Dengan konten berikut dan letakkan di PATH
suatu tempat Anda :
@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');
Anda kemudian dapat menelepon echo blah | ShowInNotepad
dari mana saja!
Catatan bahwa ini tidak berasumsi bahwa Anda menggunakan versi terbaru-ish Windows (Vista +) dan memiliki tidak cacat PowerShell atau dihapus NET framework. Dengan kata lain, instalasi Windows default akan berfungsi.
Penjelasan panjang dan alternatif
Cara termudah yang dapat saya pikirkan adalah mengotomatiskan tindakan tempel ( Ctrl+ V). Yang setidaknya sudah dilakukan oleh satu jawaban lain, tetapi yang menggunakan AHK - Anda mungkin lebih beruntung mendapatkan PowerShell untuk bekerja di lingkungan perusahaan yang terkunci.
Ayo lanjutkan skripnya, ya?
#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');
Ini cukup mudah, jadi saya tidak akan repot menjelaskan skrip lebih dari komentar yang sudah dilakukan.
Pemakaian
Untuk menggunakannya, Anda hanya perlu menempatkan skrip dalam .ps1
file (misalnya ShowInNotepad.ps1
), letakkan di suatu tempat di Anda PATH
dan kemudian panggil powershell ShowInNotepad.ps1
setelah menempatkan teks yang ingin Anda tampilkan di clipboard.
Contoh:
echo blah | clip && powershell ShowInNotepad.ps1
Sayangnya, menjalankan skrip PowerShell terkadang sulit (kebijakan eksekusi dan semua). Oleh karena itu, saya telah memadatkan skrip ini ke one-liner yang dapat Anda panggil langsung dari Command Prompt, atau bahkan ditempatkan ke dalam file batch:
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');
Jika Anda membuat file batch (mis. ShowInNotepad.bat
) Dengan konten berikut dan letakkan di PATH
suatu tempat Anda :
@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');
Anda kemudian dapat menelepon echo blah | ShowInNotepad
dari mana saja!
more
Windows.