• 追加された行はこの色です。
  • 削除された行はこの色です。
  • Prog/Tool/HATENA Helper へ行く。

#freeze
#contents

*はじめに [#zb4c392a]

はてなダイアリーでブログを書いてます。~
サイト紹介的な内容が多く、サイトにリンク先を記述する事が多いのですが、(見出しとして)リンクを記述する際のフォーマットは、
>*[カテゴリ名][リンク先:title=タイトル(省略可)]

のようになっています。~
毎回この通りに記述するのは手間がかかるので、ブラウザのアドレス蘭からドラッグ&ドロップするだけで、上記フォーマットに従って整形出力するツールを制作しました。


*必要な機能と解説 [#x3ab3822]

**ドラッグ&ドロップの受け取り [#wb9c7efd]
URLのみ受け取る必要があります。~
DragEnterイベントで、URLのみ受け入れる処理を記述します。
 private void txt_Output_DragEnter(object sender, DragEventArgs e)
 {
 	//URLのみ受け入れる
 	if (e.Data.GetDataPresent("UniformResourceLocator"))
 	e.Effect = DragDropEffects.Link;
 	else
 	e.Effect = DragDropEffects.None;
 
 }



**URLとタイトルの抽出 [#jc04c72a]
ドラッグ&ドロップの内容から、URLとタイトルの抽出をします。
 //ローカル変数の定義
 string sBuffer;                     //作業用
 string sURL;                        //URL保管用
 string sTITLE;                      //TITLE保管用
 string[] arysBuffer;
 byte[] arybBuffer;
 int iLength = 0;
 
 //ドロップされたリンクのURLを取得する
 sURL = e.Data.GetData(DataFormats.Text).ToString();
 
 //タイトルの取得
 if (sURL.IndexOf('\\') > -1)
 {
     arysBuffer = sURL.Split('\\');
     sURL = arysBuffer[0];
     sTITLE = arysBuffer[1];
 }
 else
 {
     //FILEGROUPDESCRIPTOR構造体のデータをMemoryStreamで取得
     MemoryStream msBuffer = (MemoryStream)e.Data.GetData("FileGroupDescriptor");
 
     //FileGroupDescriptorの長さを取得
     msBuffer.Seek(76, SeekOrigin.Begin);
     iLength = 0;
     while (msBuffer.ReadByte() > 0)
     {
         iLength++;
     }
 
     //cFileNameの部分をbyte配列に取得
     arybBuffer = new byte[iLength];
     msBuffer.Seek(76, SeekOrigin.Begin);
     msBuffer.Read(arybBuffer, 0, iLength);
     msBuffer.Close();
 
     //Shift JISでデコードする
     sTITLE = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(arybBuffer);
     //最後が.urlか確認し.urlを除去
     if (sTITLE.ToLower().EndsWith(".url"))
     {
         sTITLE = sTITLE.Substring(0, sTITLE.Length - 4);
     }
 }


**文字列置換 [#e259fcdb]
前述のフォーマットに従って、URLとタイトルを含んだはてな記法を出力します。
 //フォーマットに従い文字列を生成
 sBuffer = txt_Format.Text.Replace("<TITLE>", sTITLE);
 sBuffer = sBuffer.Replace("<URL>", sURL);
 
 //結果を出力
 txt_Output.Text = txt_Output.Text + sBuffer + "\r\n";

**クリップボードへコピー [#n6cb3dc0]
生成した内容を、クリップボードへコピーします。
 Clipboard.SetText(txt_Output.Text);


*実行結果 [#yaa78b23]
ブラウザのURL欄から、このウィンドウに対しドラッグ&ドロップすると、「Format」欄に従って、はてな記法で出力します。
#ref(01_HelperForHATENA.PNG)


*サンプルコード [#z58c6325]
#ref(HelperForHATENA_src.lzh)


*参考 [#ra76c7bb]
-http://dobon.net/


RIGHT:2008-03-16 (日) 15:33:14
----
[[Prog]]
トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS