如何在powershell中将图像复制到剪贴板

时间:2014-12-22 05:22:46

标签: powershell screenshot

我想截取当前窗口特定部分的屏幕截图并将其复制到剪贴板,以便将其粘贴到我的PPT或其他文档中。

我能够以bmp格式成功获取图像,但无法找到将其放入剪贴板的方法。

到目前为止,这是我的代码。

[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
function screenshot([Drawing.Rectangle]$bounds, $path) {

   $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height
   $graphics = [Drawing.Graphics]::FromImage($bmp)

   $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
   $bmp.Save($path)

   # Create data object.
   $dataObject = New-Object windows.forms.dataobject

   # Add generated strings to data object.
   $dataObject.SetData("jpg", $true, $bmp)

   # Put data object in system clipboard.
   [Windows.Forms.Clipboard]::SetDataObject($dataObject, $true)
   [Windows.Forms.Clipboard]::SetText("Hello")

}

$bounds = [Drawing.Rectangle]::FromLTRB(0, 100, 700, 500)
screenshot $bounds "d:\screenshot.png"

我尝试了其他各种方法,但无法破解它。

即使是简单的文字也没有复制到剪贴板。

请给我一些建议。

1 个答案:

答案 0 :(得分:0)

好的,我们走了。从相关论坛帖子和Clipboard方法列表获得的一般方法。名称尝试关注approved verbs list。无关功能(保存到路径?)被修剪为非必要功能。

[Reflection.Assembly]::LoadWithPartialName("System.Drawing")

function Set-ClipboardFromScreenshot([Drawing.Rectangle]$Bounds) {
   $bmp = New-Object Drawing.Bitmap $Bounds.width, $Bounds.height
   $graphics = [Drawing.Graphics]::FromImage($bmp)
   $graphics.CopyFromScreen($Bounds.Location, [Drawing.Point]::Empty, $Bounds.size)
   [Windows.Forms.Clipboard]::SetImage($bmp)
}

Set-ClipboardFromScreenshot ([Drawing.Rectangle]::FromLTRB(0, 100, 700, 500))

经过测试并验证为复制了适当大小的实际屏幕截图,并且可能是正确的来源。