regeditからバイナリをコピーしてきてC#でデコードしたりするときに、クリップボードを経由できるとちょっと便利。
バイナリの編集画面からコピーすると"RegEdit_HexData"形式でクリップボードに入る。IDataObject経由で取り出して、GetFormatsでこのフォーマットが含まれているか確認して、GetDataで取り出す。取り出したデータはMemoryStreamなので、キャストしてバッファにコピーする。
今回は全体を取り出したが、バッファの先頭4バイトに32bitLEで長さが入っているらしいので、最初に4バイト取り出して長さを得る、もしくは最初の4バイトを読み捨てる、といった処理をやっても良さそう。
const string format = "RegEdit_HexData";
IDataObject clipboardObj = Clipboard.GetDataObject();
if (!clipboardObj.GetFormats().Contains(format))
{ throw new Exception("ひたいおうのけいしき!!"); }
byte[] buff;
using (MemoryStream ms = (MemoryStream)clipboardObj.GetData(format))
{
buff = new byte[ms.Length];
ms.Read(buff, 0, buff.Length);
}
int length = BitConverter.ToInt32(buff, 0);
そもそもMicrosoft.Win32.Registry使えって話なんだが(結局それ経由で取り出すようにしたのでClipboard経由は不要になったんだが、せっかく方法を調べたので捨てるにしのびなくメモ)。