นี่เป็นโปรแกรม Windows สั้น ๆ ที่ทำงานได้อย่างถูกต้อง (โดยไม่ต้องปิดบังคลิปบอร์ด) ควรปรับให้เข้ากับ PowerShell และฉันอาจอัปเดตคำตอบนี้ถ้าฉันมีเวลา แต่คุณก็สามารถใช้โปรแกรมนั้นได้โดยตรง
แล้ว PowerShell ล่ะ ไม่จำเป็นต้องติดตั้งแอปพลิเคชันอื่น น่าเสียดายที่คุณจะต้องสร้างไฟล์สคริปต์ที่ไหนสักแห่งในPATH
...
เวอร์ชั่นสั้นที่คุณสามารถใช้ได้
หากคุณสร้างไฟล์แบตช์ (เช่นShowInNotepad.bat
) ด้วยเนื้อหาต่อไปนี้และวางไว้ในที่ของคุณPATH
:
@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');
คุณสามารถโทรecho blah | ShowInNotepad
จากที่ใดก็ได้!
ทราบว่านี้ไม่คิดว่าคุณกำลังใช้รุ่นล่าสุด-ish ของ Windows (Vista +) และยังไม่ได้พิการ PowerShell หรือถอนการติดตั้งกรอบ NET กล่าวอีกนัยหนึ่งการติดตั้งเริ่มต้นของ Windows จะใช้งานได้
คำอธิบายและทางเลือกที่มีความยาว
วิธีที่ง่ายที่สุดที่ฉันคิดได้ก็คือทำให้การวาง ( Ctrl+ V) เป็นไปโดยอัตโนมัติ มีคำตอบอื่นอย่างน้อยหนึ่งคำตอบที่ทำอยู่แล้ว แต่คำตอบนั้นใช้ AHK - คุณอาจโชคดีกว่าที่ได้ PowerShell มาทำงานในสภาพแวดล้อมขององค์กรที่ถูกล็อค
มาต่อด้วยสคริปต์ใช่ไหม
#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');
มันค่อนข้างตรงไปตรงมาดังนั้นฉันจะไม่สนใจอธิบายสคริปต์มากกว่าความคิดเห็นที่ได้ทำไปแล้ว
การใช้
ในการใช้งานคุณเพียงแค่วางสคริปต์ใน.ps1
ไฟล์ (เช่นShowInNotepad.ps1
) วางไว้ที่ใดที่หนึ่งของคุณPATH
แล้วโทรpowershell ShowInNotepad.ps1
หลังจากวางข้อความที่คุณต้องการแสดงในคลิปบอร์ด
ตัวอย่าง:
echo blah | clip && powershell ShowInNotepad.ps1
น่าเสียดายที่บางครั้งการเรียกใช้สคริปต์ PowerShell อาจทำได้ยาก (นโยบายการดำเนินการและทั้งหมด) ดังนั้นฉันจึงย่อสคริปต์นี้ให้เป็นหนึ่งซับที่คุณสามารถโทรโดยตรงจาก Command Prompt หรือแม้แต่วางลงในไฟล์แบทช์:
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');
หากคุณสร้างไฟล์แบตช์ (เช่นShowInNotepad.bat
) ด้วยเนื้อหาต่อไปนี้และวางไว้ในที่ของคุณPATH
:
@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');
คุณสามารถโทรecho blah | ShowInNotepad
จากที่ใดก็ได้!
more
ที่ Windows ได้เช่นกัน