掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
クリップボードの中身をバイナリレベルで書き換えるには? (ID:106449)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>=Clipboard.GetDataObject(GetType(String)) ↓ >=Clipboard.GetDataObject.GetData(GetType(String)) 間違えました。;~_~) すっぴさんが投稿されたコードは、クリップボードの中に入っているデータのデータ形式を調べるという動作はしているのですが、肝心なデータを獲得する.GetDataメソッドがないようです。 VB.NETでクリップボードから獲得可能な形式一覧を調べるには、GetFormatsメソッドを使えば調べられます。 Dim F() As String = Clipboard.GetDataObject.GetFormats ListBox1.Items.Clear() Dim i As Integer = 0 Do While i < F.Length ListBox1.Items.Add(F(i)) i += 1 Loop F()には、通常、"Text"、"UnicodeText"、"OEMText"、"System.String"、"Locale"などが格納されるのですが、このリストに載ってない形式で獲得することはできないと思います。(クリップボードにデータが無いので) 例えば、リストに"UnicodeText"が入っているのが確認できれば、 = Clipboard.GetDataObject.GetData("UnicodeText") でその形式のデータが獲得できます。 すっぴさんが扱っているデータは↑のようにすると、どのようなデータ形式が返ってくるのでしょうか? "Format566"なのでしょうか? -------------------------------------- バイト配列として読み込むには、 Dim rStream As System.IO.MemoryStream = Clipboard.GetDataObject.GetData("text") If rStream Is Nothing OrElse rStream.Length = 0 Then Exit Sub Dim B() As Byte = rStream.ToArray ReDim Preserve B(B.Length - 2) でOKでした。これでB()に配列として格納されます。 ----------------------------- バイト配列の中身を確認するには、 = BitConverter.ToString(B) が手っ取り早いです。 例えば、バイトデータ「05 00 00 00 D8 4C 00 00 00」が格納されていたとすれば、 文字列"05-00-00-00-D8-4C-00-00-00"が返ります。 Hex(B(インデックス)) というやり方もあるでしょうけど、BitConverterを使うのが簡単だと思います。 --------------------------------- バイト配列をクリップボードに書き込むには、 = System.Text.Encoding.Default.GetString(B) で文字列に変換できるので、 Clipboard.SetDataObject(System.Text.Encoding.Default.GetString(B), True) でできます。Trueはアプリケーションが終了した後もクリップボードに書き込んだものが消えないという意味です。 ちなみに、書いた後であれなんですけど、クリップボードからバイト配列で取り込むよりは、文字列として取り込んだほうが簡単な気がします。 バイト配列の状態だと、Replace関数とか、文字列比較ができないので・・・、まあ、BitConverterなどで文字列に変換すれば良いのですけど。 ちょっと難しいプログラムになってしまいましたけど、何か分からないところがあったら追記しますので。(´Д`)/
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.