我正在尝试使用
从powershell中的应用程序中注入文本$MODIObj = New-Object -ComObject MODI.Document
$MODIObj.Create($filepath)
是否可以直接从剪贴板中获取我的图像?我试过这个:
$MODIObj.Create([System.Windows.Forms.Clipboard]::GetImage())
但它不起作用。是否可以在不制作文件的情况下尝试类似的东西?
答案 0 :(得分:1)
根据MSDN,Create()
需要一个字符串参数,其中包含MDI或TIF文档的路径或文件名,这意味着它不会接受System.Drawing.Image
- 对象你来自GetImage()
。作为一种解决方法,您可以将存储在剪贴板中的图像保存到临时文件并尝试加载它。实施例
#Get image from clipboard
Add-Type -AssemblyName System.Windows.Forms
$i = [System.Windows.Forms.Clipboard]::GetImage()
#Save image to a temp. file
$filepath = [System.IO.Path]::GetTempFileName()
$i.Save($filepath)
#Create MODI.Document from filepath
$MODIObj = New-Object -ComObject MODI.Document
$MODIObj.Create($filepath)
如果Create()
抱怨文件名(缺少扩展名),那么只需将其添加到临时文件路径中:
$filepath = [System.IO.Path]::GetTempFileName() + ".tif"
您也可以在文件上按复制(例如文件资源管理器中的ctrl + c)并检索该路径。例如:
#Get image from clipboard
Add-Type -AssemblyName System.Windows.Forms
#If clipboard contains image-object
if([System.Windows.Forms.Clipboard]::ContainsImage()) {
#Get image from clipboard
$i = [System.Windows.Forms.Clipboard]::GetImage()
#Save image to a temp. file
$filepath = [System.IO.Path]::GetTempFileName()
$i.Save($filepath)
} elseif ([System.Windows.Forms.Clipboard]::ContainsFileDropList()) {
#If a file (or files) are stored in the clipboard (you have pressed ctrl+c/ctrl+x on file/files)
$files = [System.Windows.Forms.Clipboard]::GetFileDropList()
#Only using first filepath for this demo.
#If you need to support more files, use a foreach-loop to ex. create multiple MODI.documents or process one at a time
$filepath = $files[0]
}
#If filepath is defined
if($filepath) {
#Create MODI.Document from filepath
$MODIObj = New-Object -ComObject MODI.Document
$MODIObj.Create($filepath)
}