将剪贴板中的文本发送到应用程序,如记事本(C#或Powershell)

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)

ste*_*tej 3

我有 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\n

PowerShell版本

\n\n

您需要使用像Notepad2这样的编辑器。通过开关,/c它启动 Notepad2 并粘贴剪贴板中的文本。

\n\n

为了使其更有用,我使用tnp如下定义的函数:\n (请注意,您需要使用 -sta 参数运行 PowerShell,否则它们将无法正常工作)

\n\n
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