我想截取当前窗口特定部分的屏幕截图并将其复制到剪贴板,以便将其粘贴到我的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"
我尝试了其他各种方法,但无法破解它。
即使是简单的文字也没有复制到剪贴板。
请给我一些建议。
答案 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))
经过测试并验证为复制了适当大小的实际屏幕截图,并且可能是正确的来源。