HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0415
Last Samuiデータの型6解決


Last Samui

リンク

2011/4/15(Fri) 18:06:47|NO.38414

いつか、文字列のデータと画像のデータと間違えて、プログラムが強制終了したことがある
のですが、そういうことを避けるために、それがテキストデータか、否かを判別する方法は
あるのでしょうか?



この記事に返信する


HK2

リンク

2011/4/15(Fri) 19:32:27|NO.38418

先にbloadでそのファイルのヘッダを読み込むといいと思います。
ヘッダは、検索するとすぐに見つかると思います。
「BMP ヘッダ」と検索をかけると、すぐに目的の情報が手に入りました。



Cookies

リンク

2011/4/15(Fri) 19:40:41|NO.38419

BMPならいいが、ほかのなら… いちいちフォーマットに対応するのも難しいし。
画像のデータってのはどんなデータなんですか?
画像ファイルをそのままbloadしたようなものですか?

バイナリかテキストかの判定は難しい。所詮データなんてみんな二進数の数値だから。
全部データを印字可能か調べるようなことでもしないと無理じゃないですか?
手間がかかるうえに、信頼性は低いですけどね。



Last Samui

リンク

2011/4/15(Fri) 21:03:27|NO.38422

質問者ですが、
知りたいのは、クリップボードに読み込んだ情報なので、ファイル形式になっているか
どうかは、わかりません。
それで分かりたいのは、文書データかどうかではなく、文字列データかどうかなので、
peek命令で1バイトずつ調べて0が入っていたら、文字列データではないとかいう事は
ないですかね?
確か文字列データの最後にNull文字を入れるとか聞いたことが、あるけど。
Null文字って0でしたよね。
ということは、文字列データの中には0はないという事はありませんか?



Cookies

リンク

2011/4/15(Fri) 21:11:41|NO.38423

クリップボードって保存するときに、これは何のデータかを入れるんですよ?
GetClipBoardDataAPIを見てみてください。http://msdn.microsoft.com/ja-jp/library/cc429794.aspx
第一引数にCF_TEXTとかCF_BITMAPとかCF_DIBとかを指定するらしいです。
CF_TEXTでクリップボードに保存すれば、ほかの画像データとかは変わりません。

つまり、CF_BITMAPを指定してクリップボード内容を取得すればだいたい画像だろうということです。
もちろん、バグか悪意かでCF_BITMAP指定でテキストを他プロセスが保存すれば、画像データではありませんけどね。



Last Samui

リンク

2011/4/15(Fri) 21:48:23|NO.38424

Cookiesさん、それは、WindowsAPIとかいう奴ですか?
私は全然わからないので、一応本は買ってみたんですが、
買っただけで満足して読んでないので未だにどう処理するのかさっぱりわかりません。
もう少し、本で勉強してから確かめてみます。
完全解決はしていませんが、解決の道筋はついたので、これで終わりにしときます。
みなさん、ありがとうございました。



Cookies

リンク

2011/4/15(Fri) 22:03:38|NO.38425

ああ、APIなんか出すんじゃなかった。。そんなに難しくないんですよ。
そして、たとえばhspextにあるclipget,clipset,clipsetgだってこのAPIを中で呼んでるんでしょうから、
区別は付いているということです。(もし、このAPIを呼んでいなかったとしたって区別はあるでしょう。)

だから、ほとんどのクリップボード操作関連のものは、データ型判定しなくていいということです。
ちゃんと、画像データを取得するものを使えばテキストが混入することはほとんどありません。

過去にそれでエラーが起きたのなら、空かどうかを確認していなかったか、
さっきのように保存側のバグ・悪意、またはスクリプトの命令の間違いだと思います。

http://hspnext.com/hspkura/hspkura04.htm#contents09
には、ちゃんとモジュールがあるので、テキストと画像とを使い分けてください。



ONION software Copyright 1997-2023(c) All rights reserved.