2010-09-01から1ヶ月間の記事一覧

WPFxUPnP 2 その1a

その1の補足。 COMは利用した分だけ、IUnknownのReleaseを実行し、参照カウンタを解放する必要があります。(利用する際には、IUnknownのAddRef) C#からCOMの呼び出しは、ランタイム呼び出し可能ラッパー (RCW: Runtime Callable Wrapper)ってのが、仲立ち…

WPFxUPnP 2 その1

UPnPデバイスのクライアント側の作成にチャレンジです! 対象は、作っていたUPnPライトを操作するアプリケーションを作成してみます。UPnPのクライアント側は、まず「UPnP 1.0 Type Library(Control Point)」を参照に加えます。 そして、UPnPデバイスの検索…

排他制御

C++

C#でスレッドの排他ロックを行う場合、次のようにすれば、スコープ内は排他制御されます。 lock (this) { } WindowsのC++で、「排他制御をC#風にできないか?」をテーマに実装してみました。 結果、こんな感じになりました。 #include <Windows.h> class CLockObject { </windows.h>…

WPFxUPnP その13

最後に、コントロールです! 操作用のVBScriptはこんな感じ。 ' ----------------------------------------------------------------------------- ' Control ' ----------------------------------------------------------------------------- Sub LightOn…

WPFxUPnP その12

UPnPデバイスとしては動作するようになりました。 次に、プレゼンテーションを作成して、コントロールとイベントを動かします。 まずは、イベントを。UPnPライトの状態をイベントで受け取り、プレゼンテーションのHTMLに表示します。 これには、VBScriptを用…

WPFxUPnP その11

UPnPのデバイスとWPFのVMとを結びつけて、UPnPからの操作をWPF側へ反映させてます。 また、WPFの設定値をUPnPデバイスへ反映させます。 public bool ON { get { return Light.On; } set { Light.On = value; Program.Light.SwitchPowerService.SetStatus(val…

WPFxUPnP その10

では、OSに認識されるまで行きましょう! UPnPはCOMから呼び出され、動作するというのは、いままでの流れで、ご存じかと。 そこで、COMのセキュリティを設定して、動くようにする必要があります。 COMセキュリティを設定するには、CoInitializeSecurityを用…

WPFxUPnP その9

次にデバイスクラスの作成を行います。 UPnPデバイスはIUPnPDeviceControlインターフェースを実装する必要があります。 using UPnPHostLib; /// <summary> /// UPnPライトデバイス /// </summary> [ComVisible(true)] public class DimmableLightDevice : IUPnPDeviceControl { …

WPFxUPnP その8

作成したSwitchPowerサービスのI/Fを実装します。上図のような感じに、イベントで通知し動くようにします。 なお、状態変数の変更イベントを通知する場合、IUPnPEventSourceインターフェースを実装し、値に変化があれば、ID指定で通知を行います。 using Sys…

WPFxUPnP その7

SwitchPowerサービスのインターフェースを作成します。 インターフェースを作成して、SwitchPowerサービス定義のメソッドをわかりやすくします。 using System.Runtime.InteropServices; /// <summary> /// SwitchPowerサービスI/F /// </summary> [ComVisible(true)] public in…

WPFxUPnP その5

下準備最後に、プレゼンテーションで表示するHTMLを作成します。UPnPのプレゼンテーションを利用した操作やイベント受信は後ほど。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="author" content="White Bear"> <meta name="copyright" content="since 2010"> </meta></meta></meta></head></html>

WPFxUPnP その4

SwitchPowerサービスディスクリプタを作成します。 XMLのコメントとか、UPnPと関係ないタグは入れないようにします。 プレゼンテーションでの解析に失敗した記憶が・・・・ <scpd xmlns="urn:schemas-upnp-org:service-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <serviceStateTable> <stateVariable sendEvents="no"> <name>…</name></statevariable></servicestatetable></scpd>

WPFxUPnP その6

いよいよ、作り込みに入っていきます! まずは、プロジェクトの設定を行います。 次のことを実行してください。 プロジェクトの参照設定にCOMの中から、「UPnP 1.0 Type Library(Device Host)」を加える プロジェクトにフォルダ(web)を作成して、作成したDim…

WPFxUPnP その3

次に、デバイスディスクリプタを作成します。 なお、このXMLファイルは、UTF-8シグネチャなしで保存します。 この形式でないと、UPnPデバイスを登録する際に、XMLファイル内容を読み取って、その内容をUPnPのフレームワークに渡すのですが、失敗します。 と…

WPFxUPnP その2

まずは、デバイスとしてのAP作成。 VisualStudioでWPFアプリケーションを選んで、土台を作成。 こんな感じに作成してみました。ボタンのON/OFFをライトのON/OFFに。 スライダーの値を、ライトの明るさにしてます。 後、ONの時は、円を黄色、OFFの時に灰色に…

WPFxUPnP その1

試しに、WPFxUPnPとして、UPnPライトを作ってみる C#でUPnPデバイスの作成ってなかなか資料がないので、参考になれば良いかな。 ちゃんと、すべてのレイヤーを利用するところまで行くよっ!<コントロール/イベント/プレゼンテーションUPnPの詳細は、本家へ。…

WPFのアプリで、Alt + F4を無効にする

WPF

WPFのアプリで、Alt + F4を無効にする方法。 Alt + F4押下時に発行されるWM_SYSKEYDOWNを拾って、 それを処理しちゃった♪と嘘をつく。 すると、Alt + F4押したのに、反応しないということに! 原理は簡単ですね。 using System.Windows.Interop; const int W…

ちわっす

技術系のメモを書いていこうかと思います。 結構サボり気味かと思うけど、 自分のメモ代わりになればと。