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

我希望能够将Windows中的剪贴板上的文本发送到应用程序.例如,我正在编写记事本中的文本文件,我想将一部分复制到一个新文件中..我想将其复制到剪贴板,然后使用热键启动发送的应用程序或powershell脚本将文本复制到记事本的新实例.

我怎样才能在C#或Powershell中实现这一目标?

解决方案:使用AutoHotKey

^+c::
Send ^c
Run Notepad
WinWait Untitled - Notepad
WinActivate
Send ^v
return

最佳答案:

我有2个解决方案,一个使用PowerShell,另一个使用Autohotkey.

Autohotkey版本

我会使用这个;)您定义绑定到键的自定义键和操作.我的文件包含以下代码:

^#n::
  Run, Notepad
  WinWaitActive Untitled - Notepad2
  Send !e
  Send p
  return

它运行notepad2,然后模拟按Alt E和P.粘贴字符串的方式与您自己按下它的方式相同.出于某种原因,我在按下’Ctrl V’时遇到了一些问题(我不记得了).有关更多信息,请查看Autohotkey的网站.

PowerShell版本

您需要使用像Notepad2这样的编辑器.使用switch / c启动Notepad2并粘贴剪贴板中的文本.

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

function tnp {
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [object]
        $InputObject
    )
  begin   { $objs = @() }
  process { $objs += $InputObject }
  end {
        $old = Get-clipboard # store current value
        $objs | out-string -width 1000 | Set-Clipboard
        notepad /c
        sleep -mil 500
        $old | Set-Clipboard # restore the original value
  }
}

function Set-Clipboard { 
  param(
    [Parameter(Mandatory=$true,ValueFromPipeline=$true,Position=0)][object]$s
  )
  begin { $sb = new-object Text.StringBuilder }
  process {
    $s | % { 
      if ($sb.Length -gt 0) { $null = $sb.AppendLine(); }
      $null = $sb.Append($_) 
    }
  }
  end { Add-Type –a system.windows.forms; [windows.forms.clipboard]::SetText($sb.Tostring()) }
}

function Get-Clipboard {
  Add-Type –a system.windows.forms
  [windows.forms.clipboard]::GetText() 
}

使用这些功能,您可以运行以下内容:

# gets list of members, opens Notepad2 and pastes the content (members list)
(get-date) | gm | tnp

换句话说 – 如果某些信息将被返回并格式化为屏幕,您可以获取它并粘贴到记事本.

上一篇:Clipboard


下一篇:js实现复制隐藏域的内容 —— clipboard.js