キーフック Compact Framework編

今日はカレンダーではないネタです(・∀・)


CE機でキーフックする方法について、[id:lains_you:20060627]にトラックバックを貰っていたので、その補足です。
[id:machi_pon:20060617]に書いたのはC++での定義ですが、Compact Framework 2.0でキーフックを行う方法についてです。


やり方についてはここにまとまっていますので、リンクのみ。
http://blog.opennetcf.org/ayakhnin/PermaLink.aspx?guid=84b95802-76d7-499c-b266-e2251ab15706


リンク先はOpenNETCFのBlogですが、OpenNETCFのSDF(Smart Device Framework)というものがあって。
なんか、あんまり知られてはいないようですが。
自分が知っている限りでは、get2chで使われているのを見たくらいです。


SDFでは、通常のCompact Frameworkではサポートされていない機能の代替を用意していたりします。
例えばApplicationExクラスなんていうものがあって。
これは、GetMessage()、TranslateMessage()、DispatchMessage()をP/Invokeして、自前のMessageLoopを定義することにより、Compact FrameworkではサポートされていないIMessageFilter機構を用意していたりします( ゚Д゚)


SDFはCompact Frameworkのプログラミングでは色々参考になることがあるので、W-ZERO3でプログラムを作りたいなんて人は参考にしてみてはどうでしょうか?
http://www.opennetcf.org/


で、話をキーフックに戻しますが、これはCompact Framework 2.0限定で、Compact Framework 1.0では使用できません。
理由は、1.0ではdelegateのコールバックへのマーシャリングがサポートされないためです。


Compact Framework 1.0時代は、通常の.NET Frameworkに比べて色々と制限事項が多かったんですが、特に致命的だったのがコレです(´・ω・`)
Controlのウインドウハンドルが公開されていないとか、GDI周りが貧弱だとかは、SDFでやっているような方法で回避できたんですが。
コールバックを使用したいケースについてはCompact Frameworkだけでは完結できず、eVC++を使ってヘルパーDLLを作成していました。


Compact Framework 1.0の開発は、通常の.NET Frameworkとの違いを知らずにはまっている人も多かったと思います。
自分は.NET最初の仕事がCompact Frameworkだったので、色々な制限事項や対策方法について調べていて、その結果OpenNETCFに辿り着いていたりします。
通常の.NET FrameworkとCompact Frameworkの違いは、「Javaで言えばJ2SEとJ2MEくらい違うよ」なんて言っていたりしました。
APIベースでは、通常のWindowsとCEはそこまでは違わないんですけどね…(´ω`)


さて、カレンダーについては週末に統計情報を実装予定(・∀・)