C# で作成した、アイコンを投げ入れると、パスを通知する ActiveX 用のコントロール。
      .NET の ActiveX 用コントロール の作成法については メモ に。

■ インストール .NET が必要。(バージョン、3.5 でコンパイルした。) 使用するには、dll ファイルを、 GAC (グローバル アセンブリ キャッシュ)に インストールする事と、 レジストリに(型を)登録する事、その2つの作業をしないとならないが、 Windows 7 以降は、Visual Studio(Microsoftの開発用ソフト)を入れてないと、 GAC へのインストールが出来ないようである。 gacutil.exe /i iconPit.dll グローバル アセンブリ キャッシュ(GAC)に、インストールする。(管理者権限で) そのキャッシュ(フォルダ)は、%windir%\assembly\ (勿論、上のコマンドラインで、exe も iconPit.dll も、そのパスが必要。) gacutil.exe は、Visual Studio をインストールすると、 %ProgramFiles%\Microsoft SDKs\Windows\ の下の何処かの bin\ フォルダに ある。 Visual Studio (か VC++)に付属するコマンド プロンプトを使う なら、パスが通っているので探す必要ない。 Windows XP 等では、gacutil.exe を使わず、エクスプローラで、assembly フォルダを開き、dll をドラッグ&ドロップすれば、インストール出来た。 Windows 7 以降は、そうしても「アクセスが拒否されました」などと出て、 断られる。(管理者としてエクスプローラ..でも。) regasm.exe iconPit.dll レジストリへの型の登録。(パスは必要) regasm.exe は、%windir%\Microsoft.NET\Framework\ の下(多分、v で始まる 名のフォルダの中)にある。 この登録と、GACへのインストールと、どちらから実行すべきかの順序は、 問われない様である。 アンインストールと、登録解除は、 gacutil.exe /u iconPit アンインストール時には、dll の拡張子もパスも付けない。 GAC(assemblyフォルダ)中の名前を指定するようである。 または、エクスプローラで、assembly フォルダ中の iconPit を、右クリックし、 メニューから、アンインストールをクリックする。 regasm.exe /u iconPit.dll 型の登録の解除。/u または /unregster インストール後、多分この HTAは、(更新でなく)一旦閉じないと、反映されないかも知れない。 コンパイルし直した場合、GAC へ再インストールしないと、反映されない。 また使用側(このHTAなど)も、一度、閉じる必要ある。 その他、コンパイルなどについては、メモ の方を参照のこと。

■ テスト
 
↑アイコンを投入。 (※ 選択したアイコン中に、ゴミ箱や、デスクトップ、マイ ドキュメントなどの オブジェクトが混ざっていると、ドロップ出来ない。)
(以下では、[Ctrl] か [Shift] が伴う時には、追加になるようにした。)
■ 使い方 <object id="○" classid="clsid:CFCAF3FD-32C4-43C0-8B4C-3317B966D063" width="160" height="120" style="border: solid 4px #404040;" > <param name="BackColor" value="255, 255, 255" > <param name="ForeColor" value="Black" > <param name="Font" value="MS ゴシック, 18" > <param name="pText" value="アイコンを&#10;投げ入れると&#10;パスを通知する。" > <param name="pTextAlign" value="1" > </object> ( この例は、上の実際とは異なる。) BackColor は背景色、ForeColor は文字色、Font はフォントの設定で、これらは、 デフォルトで備わっているプロパティで、PARAM 要素で、初期値を与える事が出来る。 しかし、後からスクリプトでは、アクセス出来ないようだ。 上の、pText 等は、プログラムで付け加えた公開のプロパティであり、 スクリプトでも変更出来る。( 区別の為、先頭に p を付けてみた。) BackColor, ForeColor の PARAM 要素の value の書き方は、 色名 (文字の大小区別なし)、1つの数値、3つまたは4つのカンマ区切りの数値、などが あるようで、3つ区切りの数は、RGB の各指定。4つ区切りは、先頭が アルファ(透明度) の指定。 数値1つの場合、4 バイト符号ありで、先頭バイトが、 255 以外なら 透明度の指定になる。 Font には、FontFamily 名。または、カンマに続けてサイズ。サイズには、単位を付ける事も 出来る様で、px pt world など。それ以上の例えば、太字などスタイルの指定は、不明。 以下で、○ は、上の object 要素の id ▼ アイコンなどがドロップされた時の通知を受け取る関数 function ○::onDropFile( paths, iModKey ){ // ファイルのアイコンを落とした時の通知。 // 引数 paths (arguments[0]) は、パスの文字列であるが、 // 複数の場合、改行( \n の1文字)で 区切ってあり、 // 引数.split("\n") で、配列になる。 // // iModKey (arguments[1]) は、マウスボタンと、修飾キーを表し、 // 左マウスボタン: 1, 右マウスボタン: 2, // Shift: 16, Ctrl: 32, Alt: 64 、複数のキーなら和(ビットOR)。 } function ○::onDropText( text, iModKeys ){ // 選択されたテキストを、ドラッグして落とした時に、通知。 // 一つ目引数は、そのテキスト。2つ目は、修飾キー(同上)。 } function ○::onDropLink( text, iModKeys ){ // ブラウザのリンクを、ドラッグして落とした時に、通知。 // ただし、IE のリンクは落とせない (多分セキュリティ絡み?)。 } function ○::onClick( iModKeys ){ // コントロールをクリックした時に、通知。 // 左クリックなら 1、右クリック 2、中ボタン 4 。 // 修飾キーは、Shift: 16, Ctrl: 32, Alt: 64, のビット和。 // キーによるクリックの場合は、下から2バイト目に、キーコードを入れてあり、 // iModKeys >> 8 とした場合、0 でなく、 // [Enter]キー 13 、[Space] 32 、[App] 93 、になる。 // キーフォーカスについて。ブラウザのこの要素がフォーカスされても、 // 中のコントロールが、フォーカスされない事がよくある。この辺りは、 // よく判らない。 } function ○::onDoubleClick( iModKeys ){ // ダブルクリック時。(この場合、直前に、onClick あり。) } コントロールが無効の時や、インストールされてない場合、 これら 要素::名前 の書き方の function が存在していると、 「クラスはオートメーションをサポートしていません。」という、エラーが起きる。 エラーが出るのを避けるには、これらの関数定義の部分全体を、関数の中に置いて、 コントロールが有効である場合のみ、その関数を呼び出す。 ( :: 付きの関数に、スコープは関係なく、関数の中に入れても問題ない。) 有効であるかは、if( 要素.Enabled ) ... などで判断する。 ( このコントロールでは、無効時に、window.要素id が undefined になる、 object要素が無くなってしまう、という事はないようである。) ▼ (作成した) スクリプト用のプロパティ、メソッド ○.pText : プロパティ、表示テキスト。 ( 改行は、スクリプト言語によるが、上の Box 中では \n を。) ○.pTextAlign : プロパティ、表示テキストの配置法。 1: TopLeft, 2: TopCenter, 4: TopRight, 16: MiddleLeft, 32: MiddleCenter, 64: MiddleRight, 256: BottomLeft, 512: BottomCenter, 1024: BottomRight ○.setFont( FontFamily名, float サイズ, int スタイル, int 単位 ) フォントの変更。 スタイル、 0: Regular, 1: Bold, 2: Italic, 4: Underline, 8: Strikeout 単位は、サイズの単位で、 0: World ワールド座標系, 1: Display 表示デバイスによる, 2: Pixel, 3: Point プリンタ ポイント(1/72インチ), 4: Inch, 5: Document ドキュメント単位(1/300インチ), 6: Millimeter, ○.setBkRGB( RGB値 ) 0x ○.setFrRGB( RGB値 ) 0x 背景、文字色の変更。0 は 黒、0xFFFFFF は 白。( アルファは不透明に固定。) ○.pBackColor , ○.pForeColor プロパティ、背景/文字色の ARGB 値。 A は、アルファ(透明度)で、0 が透明、0xFF(255)が不透明。 A = 値 & 0xFF000000; R = 値 & 0xFF0000; G = 値 & 0xFF00; B = 値 & 0xFF; 設定で、不透明にするには、 = 0xFF000000 | RGB値; ビット演算しないで、0x80000000 以上の値を渡すと、32 ビットを越える数が 向こうへ渡されてしまうので、エラー(オーバーフロー)になる。 負数で渡すなら問題ない。不透明の、白は -1 、黒は -16777216 。 ○.pSignalBackColor , ○.pSignalForeColor 背景/文字の一時的変更時の色、RGB 値。面倒なので、アルファ値無し(不透明に固定)。 キーフォーカス時と、ファイルなどをドロップした時に、色を一時的に変更する。 ○.pInfoInterval プロパティ、数値。ファイルなどをドロップした後、背景/文字色を一時的に 変更する時間の指定。ミリ秒単位。 0 なら変更なし。 ○.setImageFile( パス ) 画像の表示。パスは、.bmp .jpg 等のファイルパス。 他、ソースを参照。(コンストラクタ以外の public なメンバーは、ほぼ、こちらから使用可。) ※ HTML や フレームのある HTA で起きる問題などは、Delphi 版の 同コントロール の説明に。

■ [テスト] (スクリプトの実行)

eval コントロールの変数 ○. は、IconDropIn.  
 


2011/04/14 初出 2011/07/29 通知の引数の2つ目に、修飾キーの状態を加える。 テキストなどのドロップと、Clickや キー押下も、通知するようにした。 2011/08/05 上の修飾キーの状態などを表す数値などを変更。 2012/02/10 通知するパスの最後にいつも改行(\n)が付いてしまっていたのを直した。 2016/12, 2017/04 このファイル中の説明と、スクリプトを一部修正。