kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

OneNoteをCOM経由で使う2回目

OneNote 2007をCOM経由で使う - 新日々此何有哉
OneNoteはファイルのような、そうでないような構造を持っています。一応oneというファイルがそうなのですが、通常ユーザーが意識する必要はありません。じゃあ、どうやってそのタグがどうやって管理されているか?ということですが、階層で管理されていて、XML形式で取得できます。

  Microsoft.Office.Interop.OneNote.Application onApplication;
  onApplication = new Microsoft.Office.Interop.OneNote.ApplicationClass();

  String Hierarchy;
  onApplication.GetHierarchy(null, HierarchyScope.hsPages, out Hierarchy);

これでHierarchyには階層構造がXMLで返却されます。Visual StudioXML Visualizerで表示。

このXMLをパースすればほしいタブのGUIDを取得できます。

OneNote 2007をCOM経由で使う

OneNote便利です。特にWindows + Sキーに割り当てられている、画面の任意範囲のスクリーンショット便利すぎです。私は仮想マシンスクリーンショットをこの機能使って撮っています。細かい要望としては「前回と同じ位置、サイズで取る」って機能があるともう何も言うことはありません。Office 2010でいえばよかった…忘れてました。
そんなOneNoteで取ったスクリーンショット、いちいちpngに保存するのは面倒です。特にマニュアル作成などで何枚も連続して撮っている場合などは。そんな機能が作れないか?ということでやってみましょう。ここではコマンドラインプロジェクトで作っています。ここに書いているので、これでわかる人は読み進めましょう。
What's New for Developers in OneNote 2007 (Part 1 of 2)

COMを登録

OneNoteのCOMをC#から使えるようにします。

  • 「参照の追加」のCOMのタブからMicrosoft Office 12.0 Object Libraryを追加します。
  • 同じく「参照の追加」の.NETのタブからMicrosoft.Office.Interop.OneNoteの"12.0"を追加します。Visual Studio 2010を追加した人はVisual Studio 9.0とVisual Studio 10.0の二種類あるので、間違えないようにします。
  • C#の場合、usingを追加します。
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.OneNote;

と…書こうと思ったんだけど、花粉症でめがしぱしぱして、全く進みません(;-;)。困ったものです…。例年よりも症状は軽い…のかなぁ?

APIも時と場合

.NETでプリンタを扱うにはどうすればいい?というよくある質問があって、PRINTER_INFO_2使いましょうとか、GetPrinter使いましょうとかいろいろ書かれていました。
だけど、マーシャリングコード書くの面倒だし(誰かのコピペやPInvoke.net使えばいいけど)、Win32 APIしかなかった時代ならともかく、今や他の方法も割とあるんですからもうちょっと楽をしたいな…ということで、私はWMIで取得する方法を押してみたい。
プリンタ関係はWin32_Printerに入っています。dobon.netさんのところに通常使うプリンタをWMIで取得する方法が載っています。とても参考になります。
通常使うプリンタを取得、設定する: .NET Tips: C#, VB.NET
WMIは確かにOSによって使える、使えないとかあるのですがもうXP/Windows Server 2003以降ってことに限れば大分選択肢が増えますよ。

Silverlight製MMOPRGエンジン

Silverlight MMORPG Game Engine - Home
ちょっと前にも紹介した中国の人が作ったMMOPRGのエンジンがcodeplexで公開されました。彼のサイトからダウンロードできるデモで使っているイメージは他のゲームのものから拝借したとのことなので、配布物には入ってないようです。その彼が中身のTIPSみたいなものを紹介したblog。
Jianqiang Bao - 博客园
ゲームデモは少しCPU/GPUパワーがいるようです。ノート型のCore2 Duoではすこーし重いかな。Core i7ではばっちりです(当たり前だ)。

HtmlPage.Document.GetElementById("SilverlightHost").AttachEvent("oncontextmenu", Game_MouseRightButtonDown);

こんなことをやってSilverlightホスト内で右クリックメニューを奪っちゃえるんですね。ちなみにFirefoxではうまく動かなくて、IE限定っぽいです。「なんで?」って聞いたら「IEでしかうまく動かない」としか答えてくれませんでした(^^;。