PowerShellでemf 形式の画像ファイルをクリップボードに コピーする
手こずったのですが 参考 URL を見て作ることができました
バッチファイル
ドラッグアンドドロップやパッチファイルの引数指定可能です
echo e %*
@powershell -Command "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 | Where-Object {$_.readcount -gt 3}| Out-String )+ '}'))" %*
timeout /t 5&goto:eof
# C# コード部分を定義
$cSource = @'
using System;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public class ClipboardHelper
{
private const int CF_ENHMETAFILE = 14;
[DllImport("user32.dll")]
private static extern bool OpenClipboard(IntPtr hWndNewOwner);
[DllImport("user32.dll")]
private static extern bool EmptyClipboard();
[DllImport("user32.dll")]
private static extern IntPtr SetClipboardData(int uFormat, IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int CloseClipboard();
public static void SetEmfToClipboard(string path)
{
using (Metafile metaFile = new Metafile(path))
{
// メタファイルのハンドルを取得
IntPtr hMetaFile = metaFile.GetHenhmetafile();
// クリップボードを開く
OpenClipboard(IntPtr.Zero);
// クリップボードを空にする
EmptyClipboard();
// EMF ファイルをクリップボードに設定
SetClipboardData(CF_ENHMETAFILE, hMetaFile);
// クリップボードを閉じる
CloseClipboard();
}
}
}
'@
Write-Host $Args[0]
# EMFファイルのパス
$emfPath = 'D:\app2\VSCode\svg\a.emf'
$emfPath = $Args[0]
# C# クラスをPowerShellに組み込む
Add-Type -TypeDefinition $cSource -ReferencedAssemblies System.Drawing,System.Windows.Forms
# EMFファイルをクリップボードに設定
[ClipboardHelper]::SetEmfToClipboard($emfPath)
# メッセージを表示
Write-Host "EMFファイルがクリップボードにコピーされました。"
# スクリプトが終了する前に待機
Start-Sleep -s 5
ディスカッション
コメント一覧
まだ、コメントがありません