đây là một chương trình Windows ngắn thực hiện đúng cách (không ghi đè lên bảng tạm). Nó có thể thích ứng với PowerShell và tôi có thể cập nhật câu trả lời này nếu tôi có thời gian, nhưng bạn cũng có thể chỉ cần sử dụng chương trình đó trực tiếp.
Chà, thế còn PowerShell thì sao? Không cần phải cài đặt ứng dụng khác. Thật không may, bạn sẽ cần tạo một tệp tập lệnh ở đâu đó trong PATH
...
Phiên bản ngắn bạn có thể sử dụng
Nếu bạn tạo một tệp bó (ví dụ ShowInNotepad.bat
) với các nội dung sau và đặt nó vào PATH
đâu đó:
@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');
sau đó bạn có thể gọi echo blah | ShowInNotepad
từ bất cứ đâu!
Lưu ý rằng điều này không cho rằng bạn đang sử dụng phiên bản Windows gần đây (Vista +) và chưa tắt PowerShell hoặc gỡ cài đặt .NET framework. Nói cách khác, cài đặt Windows mặc định sẽ hoạt động.
Giải thích dài dòng và giải pháp thay thế
Cách dễ nhất tôi có thể nghĩ đến là tự động hóa hành động dán ( Ctrl+ V). Mà ít nhất một câu trả lời khác đã được thực hiện, nhưng câu trả lời đó sử dụng AHK - bạn có thể may mắn hơn khi PowerShell hoạt động trong môi trường công ty bị khóa.
Hãy bắt đầu với kịch bản, phải không?
#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');
Điều này khá đơn giản, vì vậy tôi sẽ không bận tâm giải thích kịch bản nhiều hơn những bình luận đã làm.
Sử dụng
Để sử dụng nó, bạn chỉ cần đặt tập lệnh vào một .ps1
tệp (ví dụ ShowInNotepad.ps1
), đặt nó ở đâu đó trong của bạn PATH
và sau đó gọi powershell ShowInNotepad.ps1
sau khi đặt văn bản bạn muốn hiển thị vào bảng tạm.
Thí dụ:
echo blah | clip && powershell ShowInNotepad.ps1
Thật không may, việc thực thi các tập lệnh PowerShell đôi khi có thể khó khăn (chính sách thực thi và tất cả). Do đó, tôi đã cô đọng tập lệnh này thành một tập lệnh mà bạn có thể gọi trực tiếp từ Dấu nhắc Lệnh hoặc thậm chí đặt vào một tệp bó:
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');
Nếu bạn tạo một tệp bó (ví dụ ShowInNotepad.bat
) với các nội dung sau và đặt nó vào PATH
đâu đó:
@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');
sau đó bạn có thể gọi echo blah | ShowInNotepad
từ bất cứ đâu!
more
Windows.