2008年7月17日

 Windows Live カレンダーがUpdateされてました。カレンダーの共有ができるようになったのが大きい変更なのかなー? ちょうどつい最近カレンダーを共有できないか調べていたのでちょっとタイムリーでした。Webブラウザからもかなり従来よりは使いやすくなってますが、まだまだ感もあります。とりあえず祝日、あとメールなどのリンクから他のページに移動したら戻るリンクがない。

 Windows Live カレンダー

説明ページ: Windows Live Hotmail ? 概要

(via Windows Live Calendar Upgraded - LiveSide - News blog and Using Windows: Windows Live カレンダーがアップグレード -- Outlook での確認も可能に

posted @ 1:23 | Feedback (75)

(via Live Mesh Is Indeed Now Open - LiveSide - News blog

 利用できる人が制限されていたLive Mesh Tech Previewですが、誰でも利用できるようになったみたいです。USの人なら。これはLive IDの国情報をUSにしてGoってことでしょうか? それは少しはばかれるので、知り合いのUSの人に登録してもらって自分を招待してもらうのが一番良さそうですね。まだクライアントソフトのインストール時にWindowsの言語チェックがあるようなので日本語のOSを使用している場合は残念ながら使えません。Ultimateの場合は英語パックをインストールしてから言語変更により使えます。

posted @ 0:49 | Feedback (1)

 これを試すために新プラグインをさわったと言っても過言ではない。先のWindows Live Writer、Publish Notification Hookプラグインの通常の想定される使い方は、Blogや投稿記事の内容を参照するだけの処理になります。つまり、プラグインが記事を編集することは考えられていないということ。でも、できちゃうらしいってのが今回の話し。

 記事の内容が格納されているIPostInfoオブジェクトのプロパティは全部、読み取り専用です。ですが、リフレクションによって書き換えができるらしい。できました。

 IPostInfo.Contentsプロパティでは、HTML形式の文字列となった投稿記事が参照できます。それを書き換えたのが以下。なるほどー。記事のタイトル(”Title”)も同様に変更できます。

Public Overrides Function OnPrePublish(ByVal dialogOwner As IWin32Window, ByVal properties As IProperties, ByVal publishingContext As IPublishingContext, ByVal publish As Boolean) As Boolean
    Dim info = publishingContext.PostInfo.GetType.GetProperty("Contents")
    Dim contents = DirectCast(info.GetValue(publishingContext.PostInfo, Nothing), String)
    info.SetValue(publishingContext.PostInfo, contents.Replace("ー", "━(゜∀゜)━"), Nothing)

    Return True
End Function

 ポイントはpublishingContext.PostInfoからTypeを取得してるところでしょうか。GetType(IPostInfo) のように取得すると書き換えできません。GetValueメソッドによりプロパティ値を取得したけど、これ普通に参照すればいいじゃん……。

 WLW自体は書き換えられることを想定してないので、プラグインから書き換えても投稿後にエディタ中の表示は変化しません。

posted @ 0:39 | Feedback (94)

 Windows Live Writer Technical Preview Version の新しいプラグイン形式、Publish Notification Hook プラグインを作ってみます。 Blogの投稿前と投稿後に処理を行うことができます。

 コーディングは驚くほど簡単です。

  1. クラスライブラリプロジェクトを作成。
  2. WLWインストールフォルダにあるWindowsLive.Writer.Api.dll および .NETのSystem.Windows.Formsの参照を追加。
  3. クラスにWriterPlugin属性を付け、PublishNotificationHookクラスを継承。
  4. OnPostPublish、OnPrePublishメソッドをオーバーライド。
  5. ビルドして、インストールフォルダ下Pluginsフォルダにできたdllファイルをコピー。

という流れです。コードはこちら。

Imports System.Windows.Forms
Imports WindowsLive.Writer.Api

<WriterPlugin("ae75cea3-cf7d-406c-94a8-2e94bb76e264", "PublishNotificationHookPluginSample")> _
Public Class PublishNotificationHookPluginSample
    Inherits PublishNotificationHook

    Public Overrides Sub OnPostPublish(ByVal dialogOwner As IWin32Window, ByVal properties As IProperties, ByVal publishingContext As IPublishingContext, ByVal publish As Boolean)
    End Sub

    Public Overrides Function OnPrePublish(ByVal dialogOwner As IWin32Window, ByVal properties As IProperties, ByVal publishingContext As IPublishingContext, ByVal publish As Boolean) As Boolean
        Return True
    End Function
End Class

 引数が多いので少し見にくいですが、投稿前に呼ばれるのがOnPrePublish、投稿後に呼ばれるのがOnPublishになります。使うのはこれだけ。両方とも引数は

  • dialogOwner: ダイアログを表示する場合に使用するためのもの。
  • properties: プラグイン独自のオプション設定を使用する場合のIPropertiesオブジェクト。従来のプラグインと同様に使います。
  • publishingContext: これにBlog自体や投稿記事の情報が入っています。これを参照して何らかの処理をします。
  • publish: わかりにくい名前ですが、下書き投稿の場合はFalseが入ってます。

という感じ。投稿前のOnPrePublishは戻り値を設定でき、Falseを返すと投稿をキャンセルできます。プラグインによりキャンセルされた場合、次のようなダイアログが表示されます。

Publish Cancelled

 投稿前のpublishingContextの中身はこんな感じ。PostInfoプロパティにほしいと思われる情報が入っていますね。

OnPrePublish

 投稿後のpublishingContext。注目はPermalink部分。投稿された記事のURLが入っています。サンプルに付属しているTwitterプラグインはこれを使用しているわけですね。

image

 詳しくは、リファレンスがSDKに含まれているのでそちらを参考にしてください。

posted @ 0:25 | Feedback (3)