このページの本文へ

Windows Info 第335回

Windowsの基本機能 クリップボードをさらに活用する

2022年07月10日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 クリップボードは、Windowsでも利用頻度が高い機能の1つだろう。そもそもGUIシステムとクリップボードは切っても切れない関係にある。クリップボードは、基本的にはコピーや切り取りを実行するアプリケーションがデータを登録する。このときアプリケーションは、同一内容のデータを複数の形式で保存できる。できるだけ多くの形式で登録することが推奨されているが、何を登録するのかはアプリケーション次第である。貼り付けを実行するプログラムは、登録されたデータから適当と思われるものを取り出す。

 結局のところ、クリップボードとは、アプリケーションから見ればWindowsが用意した機能をAPIを介して利用することだ。また、Windowsなどが用意するGUI部品の中には、コピーやペーストに対応しているものもあり、アプリケーションがその動作を禁止しない限り有効になることもある。こうした場合、アプリケーションは何もしなくてよい。

PowerShellでクリップボードを扱う

 基本的にはGUIで使うクリップボードだが、コマンドラインからの操作もできる。cmd.exeにはclip.exe、PowerShellには「Set-Clipboard」「Get-Clipboard」というコマンドが用意されている。clip.exeは、クリップボードへの登録しかできないが、PowerShellだと、クリップボードデータの取り出しも可能だ。

PowerShellでGet-Clipboardコマンドを使えば、クリップボードの内容を取り出すことができる

 それぞれ、以下に解説がある。

●Get-Clipboard
 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/get-clipboard?view=powershell-5.1

●Set-Clipboard
 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/set-clipboard?view=powershell-5.1

 PowerShellでGet-Clipboardを使う場合、画像や音声データも取り出すことができる。ただしテキスト以外は、PowerShellでは直接扱うことは不可能。そこで画像データであれば以下のようにして、ファイルに保存すれば利用できるようになる。

(Get-Clipboard -Format Image).Save("c:\Temp\test.png")

クリップボードをさらに活用する

 アプリケーションはデータをコピーするとき、可能な限り多くのデータ形式をクリップボードに登録することが推奨されていると書いた。つまり、クリップボードには複数のデータ形式が同時に登録できることを意味する。PowerShellにはクリップボードを扱うコマンドがあるが、前述のように機能が限定されている。なので、直接.NET Frameworkを使う。

 .NET Frameworkでのクリップボード機能(Clipboardクラス)は、Win32APIとほぼ同等だが、簡略化されている。たとえば、Win32APIでは、クリップボードが変化したときにイベント処理ができるが、.NET Frameworkではこうした機能はカバーされていない。

 ClipboardクラスをWindows PowerShellから使うには、準備として以下のコマンドを実行する。

Add-Type -AssemblyName PresentationFramework

 上記のコマンドは、Windows PowerShell起動後に1回だけ実行すればよい。では、Excelでセル範囲をコピーしたとき、どのようなデータが出てくるのかを調べて見る。Excelが登録したデータ形式は、以下のコマンドで調べることができる。

[System.Windows.Clipboard]::GetDataObject().GetFormats()

Excelはセル範囲のコピーで25種類のデータ形式をクリップボードに登録している。ただし、Excelのバージョンより違いが出る可能性がある

 いくつかの形式は、利用頻度が高いため、Windowsでは標準的なものとして登録されている。これについては、以下に記述がある。

●DataFormats クラス
 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.dataformats?view=netframework-4.8

 Excelは、24種のデータ形式を登録している。

 この表では、各形式を「テキスト」「メディアデータ(画像、音声)」「バイナリデータ」に分類している。Excelのセル範囲のコピーなのに「画像」は変に思うかもしれない。しかし、貼り付けするアプリケーションは、たとえば、ペイント(mspaint.exe)かもしれない。

 データ形式を確認するだけなら、フォーマット名には、上記のコマンドで表示されたものを使う。たとえばテキスト(Text)データなら

[System.Windows.Clipboard]::GetDataObject().GetData("Text")

とすればよい。

 指定したフォーマットにより、読み出し方にはいろいろと違いがある。画像データ("System.Drawing.Bitmap")の場合には、上記のコマンドを使うと、ビットマップオブジェクトのプロパティが表示される。

System.Drawing.BitmapオブジェクトならSaveメソッドが使えるのでファイルとして保存すれば表示できる

 これは、以下のようにすることでGIFファイルに保存できる。

[System.Windows.Clipboard]::GetDataObject().GetData("System.Drawing.Bitmap").Save("c:\temp\excel.gif")

 表示や保存などはフォーマットごとに違う。どんなオブジェクトが出力されたのかは、Get-Memberコマンドで調べることができる。たとえば、Excelの"DataInterchangeFormat"形式の場合、

[System.Windows.Clipboard]::GetDataObject().GetData("DataInterchangeFormat") | get-member

とすると、「System.IO.MemoryStream」オブジェクトが出力されていることがわかる。

出力されるデータ形式が「System.IO.MemoryStream」の場合、ToArray()メソッドを使ってバイト配列に変換する

 この場合には、「ToArray()」メソッドで1回、バイト配列に変換することでデータを取り込むことが可能だ。たとえば、

[System.Windows.Clipboard]::GetDataObject().GetData("DataInterchangeFormat").ToArray() | Format-Hex

とすれば、16進数でダンプできる。

バイト配列に変換したら、たとえばFormat-Hexコマンドを使って16進数ダンプにできる

 スクリプトやコマンドなどを併用することで、クリップボードの中身を変換――たとえば日付の書式を変える――して再度クリップボードに書き戻すことが可能だ。

「2022年」というテキストがクリップボードに入っているとき、これを読み出して書式を変更して、クリップボードに書き戻すことができる。この処理はコマンドラインだが、クリップボード経由なので、GUIアプリケーションからデータを受け取り、GUIアプリケーションに渡すことが可能だ

 手作業では面倒だが、スクリプトを使えば簡単な変換処理は結構ある。このとき、スクリプトへの入力と出力にクリップボードを使うとGUIプログラムの間をスクリプトで補完することが可能になる。

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,980
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
6
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,100
7
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥1,880
8
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
¥1,899
9
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥4,918
10
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン