======================================================================== 【ソ フ ト 名】cmdRegistryNotifyApp 【バ ー ジョン】1.0.0.0 【著 作 権 者】ssipa 【メ ー ル】sisipa@gmail.com 【ホームページ】http://ssipa.web.fc2.com/ 【対 応 機 種】Windows Mobile Version 5.0以上 【動 作 確 認】zero3 es(WS007SH) 【ソフト 種 別】フリーウェア 【転 載 条 件】内容を変更しない限り 御自由に御転載ください ======================================================================== 【ソフトの紹介】 ・RegistryNotifyApp API を呼び出すコマンドです ・RegistryNotifyApp API を eMbedded Visual C++ 4.0 や スクリプトから使用できます ・常駐しません ・レジストリ監視通知がシステムに登録されます、登録したレジストリの値が変更、または指定の値になる度に、指定アプリケーションの起動やmsgの送信を行います ・登録を削除するには cmdRegistryStopNotification.exe を使用します 【インストール】 【アンインストール】 ・RegistryNotifyApp.exe を任意の場所に配置して使用してください ・独自のレジストリは使用しません 【説明】 1.コマンドフォーマット cmdRegistryNotifyApp.exe msglevel;NotifyID;hKey;RegPath;RegValue;AppName;'AppArgs';pszClass;pszWindow;msg;dwFlags[;ctComparisonType;dwMask;TargetValue dw;TargetValue psz] 引数項目の区切り文字は「;」を使用します 「;」の前後に余計な空白を入れてはいけません 省略は「-」を指定します 2.使用例 @ cmdRegistryNotifyApp.exe 3;cmdRegistryNotifyApp.test;HKCU;Software\Sharp\PhoneStatus;Status22;\Windows\fexplore.exe;'\';-;-;-1;1 W-ZERO3で入力文字種が変更される度に、エクスプローラを引数¥で起動する A cmdRegistryNotifyApp.exe 3;cmdRegistryNotifyApp.test;HKCU;Software\Sharp\PhoneStatus;Status22;\Windows\fexplore.exe;'\';-;-;-1;1;1;7;0;- W-ZERO3で入力文字種に「あ」が選択される度に、エクスプローラを引数¥で起動する ※上記の通知登録を削除するには cmdRegistryStopNotification.exe 3;cmdRegistryNotifyApp.test を起動します(あらかじめショートカットを用意しておく事を推奨します) 3.引数 型・選択値 (DWORD) msglevel{0-3}; (LPCTSTR) NotifyID; (LPCTSTR) hKey{HKCR|HKCU|HKLM|HKU}; (LPCTSTR) {RegPath|-}; (LPCTSTR) {RegValue|-}; (LPCTSTR) AppName; (LPCTSTR) AppArgs(' 'で囲む); (LPCTSTR) {pszClass|-}; (LPCTSTR) {pszWindow|-}; (int) {msg(WM_APP + n)|-1}; (DWORD) dwFlags{0|1(RNAF_NONAMEONCMDLINE)}; (DWORD) ctComparisonType{0-9}; (int) {dwMask|-}; (DWORD) {TargetValue dw|-}; (LPCTSTR) {TargetValue psz|-} ※以下の説明はMSDNのAPI説明からの引用を含みます 4.引数説明(必須項目) @msglevel MSGダイアログの出力レベル、引数不正のエラーは下記の指定に関係なく必ず出力されます 0:何も表示しない 1:エラーのみ表示 2:成功のみ表示 3:全て表示 ANotifyID 登録される通知要求を識別するユニークな任意の文字列 通知を停止したい時には、この文字列をRegistryStopNotificationに渡します この名前は個々の通知要求を識別するためにユニークにする必要があります アプリケーションの間の衝突を防止するために、以下のフォーマットを使うことができます:ApplicationName.EventName BhKey レジストリキーrootのハンドル {HKCR|HKCU|HKLM|HKU} の何れかを指定 CRegPath レジストリキーパス もし指定が-(NULL)であるならば、RegValueは、hkeyの直下にあると仮定されます DRegValue レジストリキーValue もし指定が-(NULL)であるならば、変化の通知はデフォルト値に基づきます EAppName 起動するアプリの実行可能フルパス FAppArgs 起動するアプリの引数、''で囲んで指定する GpszClass 通知を受け取るウィンドウのクラス文字列 もしAppNameを起動するだけなら、pszClassとpszWindowに -(NULL)を指定する HpszWindow 通知を受け取るウィンドウのタイトル文字列 もしAppNameを起動するだけなら、pszClassとpszWindowに -(NULL)を指定する Imsg pszClassとpszWindowにより指定されたウィンドウに送るメッセージID 指定された数値 + WM_APP のMSGを送信します 省略する場合は -1 を指定します JdwFlags 通知フラグ 0または1(RNAF_NONAMEONCMDLINE)を指定します 0を指定した場合、 /notify "NotifyID" が、AppArgs(引数)に自動追加されます、引数を追加しない場合は、1 を指定してください 5.引数説明(任意項目) いつ通知を送るかを決める為の付加条件(省略化、指定する場合は以下の4項目を追加で全て指定する事) レジストリー値が変わる時に、変更された値とTargetValue(ユーザ指定値)の比較をすることができます。 以下の指定を省略した場合は、指定されたレジストリー値のどのような変化にも通知が送られます KctComparisonType 変更されたレジストリー値をTargetValueと比較する条件式を指定します 0:全ての変更で通知する 1:TargetValueと等しくなった 2:TargetValueと等しくなくなった 3:TargetValueより大きくなった 4:TargetValue以上になった 5:TargetValueより小さくなった 6:TargetValue以下になった 7:TargetValueを含んでいる 8:TargetValueで始まっている 9:TargetValueで終わっている LdwMask DWORD値にだけあてはまります このマスクは、比較する前に、レジストリー値に適用されます ビットマスクを指定することによって、レジストリーの特定のビット変化だけを、クライアントに通知します このマスクはTargetValueには適用されません もしdwMaskが0であるならば、TargetValueはストリング(タイプREG_SZ)とみなされ、そうでなければタイプREG_DWORDとみなされます 全体のdoublewordに対してテストする場合、dwMaskに - を設定します TargetValue レジストリ値を特定の値と比較して通知を送る場合に指定します もし変更された値がタイプREG_SZであるならば、比較は、pszと変更された値の間にされます もし変更された値がタイプREG_DWORDであるならば、dwMaskは、変更された価値に適用されて、それから、結果はdwと比較されます もし変更された値がREG_SZとREG_DWORDではないならば、通知はどのような比較なしで送られます Mpsz 比較する文字列を指定します、省略の場合は - を指定 Ndw 比較するDWORD値を指定します、省略の場合は - を指定 6.補足 指定されたレジストリ値が変化し、指定された条件がTRUEであれば、毎回通知が実効されます、エラーはどのような変化も起こしません 通知書を止めるために、RegistryStopNotificationを呼ばなければなりません、さもなければ、通知要求は永久的に有効です、たとえ機器がリセットされても、通知は、RegistryStopNotificationが呼ばれるまで、有効であり続けます 通知において、RegistryNotifyAppは、pszClassとpszWindowにおいて指定されるウィンドウを検索して、AppNameで指定されたアプリケーションが動いているかどうかを確認しています、もしアプリケーションが動いていないならば、アプリケーションを起動します (確認〜起動まで数秒を要します(遅延します)、pszClass、pszWindow、msgを省略した場合は遅延なくアプリケーションを起動します) アプリケーションに渡す引数は、AppArgs文字列において指定します、AppArgs文字列は前後を’で囲む必要があります、引数中に’を含む場合は指定できません msgにおいて指定されたメッセージは、PostMessage() を使用してウィンドウに送信されます PostMessage() に渡されるパラメータは以下の通りです WPARAM:データ型REG_DWORDには 新しい値(または値の削除(0))および他のデータ型には0 LPARAM:0 個々のクライアントが複数の通知書を区別するように、msgパラメータはRegistryNotifyAppのために個々の呼び出しのためにユニークでなければなりません レジストリ値が追加された時、または値が変更された時には、クライアントは通知を得ます、もし通知が到着する時に以下の条件のうちの1つでもあるならば、登録は削除されます ・AppNameにおいて指定された実行モジュールをスタートできなかった ・(AppNameに指定された実行モジュールの起動後を含む)pszClass、pszWindowで指定されたウィンドウを発見できなかった ・ポストメッセージに失敗した この機能は、システムのどのようなレジストリーキーでも監視することができます 使用できるOS Windows Mobile Pocket PC for Windows Mobile Version 5.0 and later Smartphone for Windows Mobile Version 5.0 and later 【更新履歴】 ・2007年05月01日  - 初版公開 【おことわり】 本ソフトウェアを使用した結果のいかなる損害に対しても作者は責任は負いませんRegistryNotifyApp APIに関する問合せは受け付けません 【配布】 内容を変更しない限り再配布は自由とします。連絡は不要です ただし雑誌等、商業掲載する場合は、事前に通知をお願いします 【著作権】 本ソフトウェアはフリーウェアです。全著作権は作者にあります