0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

メモ:C#でregeditからコピーしたバイナリを受け取る

Posted at

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経由は不要になったんだが、せっかく方法を調べたので捨てるにしのびなくメモ)。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?