1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

Windowsの基本機能であるクリップボードについてあらためて整理

ASCII.jp / 2024年3月24日 10時0分

 今更ながらだが、Windowsのクリップボードについて整理しておく。なお、クリップボードの応用的については過去記事(「Windowsの基本機能 クリップボードをさらに活用する」)がある。本記事はそのアップデートも含む。

クリップボードはWindowsの基本機能

 クリップボードとは、プログラム間でテキストや画像などのデータを交換する方法の1つだ。Windowsの基本機能であり、多くのアプリケーションやWindows付属アプリ、システムプログラムがこれをサポートする。

 マウスのドラッグや「Shift+カーソルキー」で選択状態となるものは、基本的にクリップボードに「コピー」可能だ。この処理は、ウィンドウを表示しているプログラムがする。Windowsの標準的な機能であるため、コピー操作は「Ctrl+C」または「Ctrl+Ins」でできることが多い。これは、ホットキーではなく、プログラム自体が処理するキーボードショートカットである。

 以下の表は、クリップボード関連の操作を示す。このうち、グローバル欄に丸印があるのものは、どの場面でも有効なホットキーである。

クリップボード

 印のないもので、キーストロークを表すものは、ウィンドウを表示しているプログラムが処理するキーボードショートカットだ。その動作はプログラムに依存する。ただし、Windowsはユーザーインターフェースのガイドラインを策定しており、多くのプログラムがこれに従うため、同種の動作には、同じショートカットが割り当てられる。

 クリップボードにデータを転送することを「コピー」、データを受け取ることを「貼り付け」と呼ぶが、この操作が可能かどうかは実際にはプログラム次第だ。なお、「切り取り」はクリップボードの操作としては「コピー」だが、処理するアプリケーションが対象を削除することで実現されている。

 ほとんどのアプリケーションでは、受け入れ可能なデータ形式が決まっており、必ずしもクリップボードのデータを受け入れられるとは限らない。たとえば、メモ帳はテキスト形式は受け入れられるが、画像データは受け入れられない。

 クリップボードのコピーでは、貼り付け先アプリケーションが何を受け付けるのかがわからないため、できる限り多数の形式でクリップボードにデータをコピーする。Windowsは、あらかじめ定義されたデータ形式を持っている(前掲の過去記事参照)。これは、Win32APIと.NETで個別に定義されている。.NETのクリップボード(クラス)は、Win32APIのクリップボードを使って実装されているものの、APIとしては異なる。

クリップボード履歴と共有で 他のマシン間でクリップボードの内容を共有する

 Windowsのクリップボードには、「履歴」と「共有」の機能がある。これは、設定アプリの「システム」→「クリップボード」で有効化する。履歴機能と共有機能は個別にオンオフを指定できる。

クリップボード
設定アプリの「システム」→「クリップボード」で、クリップボード履歴と共有の有効化が可能。共有を有効にしたとき、リモート側との同期方法を「自動」「手動」の2つから選択できる。自動にしておくと、勝手にクリップボードがリモート側のコピー操作で切り替わる

 クリップボード履歴には、テキストとHTMLデータ、画像しか登録されない。1つのデータは最大4MBである。また、履歴には最大25個のデータを記録し、追加されるたびに、最も古いものから消去されていく。ただし、トータルでの最大容量に制限があるようで、大きな画像が登録されると、複数の項目が消えることがあり、常に25個のデータが登録されているわけではないようだ。

 画像データは、クリップボードに入っているときにはWindows BitmapやWindows DIB(Device Independent Bitmap)形式となるが、クリップボード履歴内での記録形式は不明でWindows Bitmap形式ではない模様。というのも、PNG形式などで4MB以下になるような画像でも、Windows Bitmap形式だと4MBを越えてしまうことがあるからだ。

 クリップボード共有は、前述の設定ページで、同期方法を自動・手動のどちらかを選択できる。「自動」は、他のマシン(リモート側)でコピーがされたとき、自動的にローカルのクリップボードに反映させる。また、ローカル側でコピーをしたときは、自動的に他のマシンにデータを転送する。

 これに対して、「手動」は、他のマシンでコピーがされても、ローカルのクリップボードは変化せず、「Win+V」でクリップボード履歴を表示させて、そこからクリップボードにコピーするデータを選択する。ローカルでコピーしたデータをリモート側に反映させるには手動で同期をする。

 「自動」と「手動」は、設定ページでは「コピーしたテキストを自動的に同期する」「コピーしたテキストを手動で同期する」と表記されているが、実際にはテキストだけでなく履歴に入れることができる画像やHTMLも同期の対象である。

 「Win+V」で表示される「クリップボード履歴パネル」は、Windows 11では、「Win+ピリオド」で開く「絵文字パネル」とウィンドウを共有しており、最上部にあるアイコンで機能を選択できる。この一番右側にあるのがクリップボード履歴だ。

クリップボード
「Win+V」でクリップボード履歴パネルが表示される。このパネルは、絵文字入力パネルなどと同じもので、上部のアイコンで対象を切り替える。右端がクリップボード履歴

 ここには、クリップボードにコピーされたデータの履歴が並び、項目をクリックすることで、データは現在のクリップボードにコピーされる。また、「クリア」ボタンを使って履歴すべてを消去できるが、データ項目の右下のピン留めアイコンをクリックすることで、クリアの対象から外せる。

 クリップボード履歴パネルでは、個々の項目の右上にある点が3つ並んだアイコンで、削除や手動同期が可能。ローカルからコピーされたデータで、クリップボード共有の同期が手動の場合には、同期ボタンが表示される。右端のゴミ箱アイコンは、項目の削除である。

クリップボード
クリップボード履歴右上の点が3つ並んだアイコンでクリップボード項目の「テキストとしてコピー」「手動同期」「項目の削除」に対応するボタンが表示される。ただし「手動同期」は、設定で同期方法を手動としたときのみ

 リモートでコピーされたデータでは、同期ボタンは表示されない。どの場合でも対象がテキストデータの場合、右側に「テキストとしてコピー」ボタンが表示される。

クリップボード
リモート側から追加された項目は、手動同期ボタンが表示されない

クリップボードをPowerShellで便利に使うためのTips

 最後にクリップボード関連の事柄をいくつか紹介する。まず、現在のクリップボード内容だが、PowerShell(Windows PowerShell)から簡単に表示させることが可能だ。それには、以下の2行を実行する。

Add-Type -AssemblyName PresentationCore [System.Windows.Clipboard]::GetDataObject().GetFormats()

クリップボード
Windows PowerShell(PowerShell.exe)やPowerShell(pwsh.exe)では、コマンドでクリップボードに格納されているデータの形式を調べることができる。テキストのコピーでは、ユニコード形式やOEM(Shift JIS)形式のテキストや、アプリケーションが認識するロケールなどの情報がクリップボードに格納される

 1行目は、.NETのSystem.Windows.Clipboardクラスを使うための「おまじない」(アセンブリのロード)なので、最初の一回だけ実行すればよい。前掲の過去記事では、Add-Typeのクラス名が異なり、Windows PowerShellでのみ有効だった。しかし、アセンブリ名を「PresentationCore」にすると、PowerShell、Windows PowerShellのどちらでも有効になる(これについては前回記事を参照のこと)。

 Windows付属のターミナル(Windows Terminal)では、選択範囲を自動的にクリップボードに設定することが可能である。

 これは、GUI設定の「操作」にある「選択範囲をクリップボードに自動でコピーする」をオンにする。これにより、コマンドの出力を簡単にクリップボード経由で他のプログラムに転送できる。

 また、PowerShellを使う場合、同じページにある「単語の区切り文字」からハイフンを削除すると、PowerShellのコマンド名をダブルクリックで選択状態にできるようになる。その後、右クリックメニューの「Web検索」を使えば、コマンドに関する情報を簡単にインターネット検索できる。PowerShellのヘルプコマンドを起動するよりも簡単だ。

 特にPowerShell(Core)は、ヘルプファイルが貧弱なので、Microsoftのドキュメントページを探すことが多い。なお、右クリックメニューは、settings.jsonファイルにあるプロファイル設定に

"experimental.rightClickContextMenu": true

を追加する。デフォルトプロファイルで設定しておくといいだろう。右クリックメニューの詳細に関しては過去記事(「内部的な改良で便利になったWindows Terminal v1.19での新機能を確認」)を参照してほしい。

 ディレクトリ内のファイルのリストを作りたいといった場合、コマンド出力を直接クリップボードに入れることができる。cmd.exeであれば、

dir | clip.exe

とする。PowerShell/Windows PowerShellなら、もう少し複雑なことが可能で、たとえば、ハードリンクを除きシンボリックリンクだけのリストを作りたいなら、

dir | where ModeWithoutHardLink -match "^l" | Set-Clipboard

とすればよい。

 また、クリップボードのテキストを加工することもできる。以下のコマンドでは、クリップボードテキストから半角の角カッコ(“[”と“]”)を削除してクリップボードに書き戻す。

((Get-Clipboard) -replace "[\[\]]","") | Set-Clipboard

 「Get-Clipboard」で得たテキストは、そのままPowerShellの演算子やコマンドで処理が可能なので、メモ帳などで編集しなくてもよい。

 クリップボードは、GUIと深い関係にあり、GUIの元祖といわれるAltoに搭載されていた。Ctrl+C/X/Vのショートカットは、その頃からのもの。Windowsも最初のVer.1.xからクリップボードを持っていた。クリップボード関連の機能をうまく使うと、「一手間」減らせることがある。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください