cto*_*orx 5 c# clipboard powershell automation autohotkey
我希望能够将Windows中的剪贴板上的文本发送到应用程序.例如,我正在编写记事本中的文本文件,我想将一部分复制到一个新文件中..我想将其复制到剪贴板,然后使用热键启动发送的应用程序或powershell脚本将文本复制到记事本的新实例.
我怎样才能在C#或Powershell中实现这一目标?
解决方案:使用AutoHotKey
^+c::
Send ^c
Run Notepad
WinWait Untitled - Notepad
WinActivate
Send ^v
return
Run Code Online (Sandbox Code Playgroud)
我有 2 种解决方案,一种使用 PowerShell,另一种使用Autohotkey。
\n\n自动热键版本
\n\n我会使用这个;)您定义自定义键和绑定到键的操作。我的文件包含以下代码:
\n\n^#n::\n Run, Notepad\n WinWaitActive Untitled - Notepad2\n Send !e\n Send p\n return\n
Run Code Online (Sandbox Code Playgroud)\n\n它运行 notepad2,然后模拟按 Alt+E 和 P。这会以与您自己按下字符串相同的方式粘贴字符串。由于某种原因,我在“按”Ctrl+V 时遇到了一些问题(我不记得了)。欲了解更多信息,请访问 Autohotkey 的网站。
\n\nPowerShell版本
\n\n您需要使用像Notepad2这样的编辑器。通过开关,/c
它启动 Notepad2 并粘贴剪贴板中的文本。
为了使其更有用,我使用tnp
如下定义的函数:\n (请注意,您需要使用 -sta 参数运行 PowerShell,否则它们将无法正常工作)
function tnp {\n param(\n [Parameter(Mandatory=$true,ValueFromPipeline=$true)]\n [object]\n $InputObject\n )\n begin { $objs = @() }\n process { $objs += $InputObject }\n end {\n $old = Get-clipboard # store current value\n $objs | out-string -width 1000 | Set-Clipboard\n notepad /c\n sleep -mil 500\n $old | Set-Clipboard # restore the original value\n }\n}\n\nfunction Set-Clipboard { \n param(\n [Parameter(Mandatory=$true,ValueFromPipeline=$true,Position=0)][object]$s\n )\n begin { $sb = new-object Text.StringBuilder }\n process {\n $s | % { \n if ($sb.Length -gt 0) { $null = $sb.AppendLine(); }\n $null = $sb.Append($_) \n }\n }\n end { Add-Type \xe2\x80\x93a system.windows.forms; [windows.forms.clipboard]::SetText($sb.Tostring()) }\n}\n\nfunction Get-Clipboard {\n Add-Type \xe2\x80\x93a system.windows.forms\n [windows.forms.clipboard]::GetText() \n}\n
Run Code Online (Sandbox Code Playgroud)\n\n使用这些函数,您可以运行如下命令:
\n\n# gets list of members, opens Notepad2 and pastes the content (members list)\n(get-date) | gm | tnp\n
Run Code Online (Sandbox Code Playgroud)\n\n换句话说 - 如果某些信息将返回并格式化到屏幕上,您可以获取它并粘贴到记事本。
\n 归档时间: |
|
查看次数: |
11996 次 |
最近记录: |