2011年7月28日木曜日

TIF/TIFFファイルの編集を支援するJ TIFF Editor 3

JTIFEdit3
TIF/TIFFファイルの編集には、Imaging(Windows 2000等に付属)や、Microsoft Document Imaging(Office 2003等に付属)に、大変お世話になったという経験はございませんか。

ページの入れ替え・回転を支援いたします、オープンソース対応の簡易なTIFF編集ソフトがございます。

Windows XP/Vista/7版:入手は、こちらから。


次のような些細な特徴が有ります:

☆ 入れ替え: ページを入れ替えできます。

☆ 回転: ページを左や右に直角回転できます。

☆ 削除: ページを削除できます。

☆ メール送信: お使いのメーラー(MAPI)を立ち上げて、ページを添付できます。

☆ FreeImageライブラリを採用しています。(GNU GPL ライセンスで受入)

☆ ページのプレビュー表示をON・OFF切り替えできます。

ソースコードを閲覧して頂く事ができます:Source Browse

2011年7月20日水曜日

共有フォルダの移動・名前の変更・削除を制限できるかもしれないNoMoveFolder

ファイルサーバに保存しています共有フォルダ。

知らない間に、勝手に移動されたり、削除されたりして、大変な経験をなされたことはございませんか。

NoMoveFolderを利用することで、条件付きで制限することが可能です。

但し、これは魔法のような品では有りませんので: 動作の仕組みや、制限を正しく理解した上でご活用ください。

動作の仕組み:
  • ICopyHookという仕組みを利用します。
    Windows エクスプローラで、フォルダの移動・コピー・削除・名前の変更をする際に問い合わせする仕組みで、許す・許さないを決定できる仕組みです。
  • NoMoveFolderは、特定ファイルの有無を見て、フォルダ操作の不許可を決定します。
    ".NoMove"というファイルが入っていたら、そのフォルダを移動させない。
    ".NoRename"というファイルが入っていたら、そのフォルダの名前を変更させない。
    ".NoDelete"というファイルが入っていたら、そのフォルダを削除させない。
制限:
  • 共有フォルダを使用するすべてのパソコンに導入しないといけません。
    例:出入り業者様が持ち込んだパソコンで操作→防ぐことはできません。今日クリーンインストールしたばかりのパソコンで操作→十中八九、防ぐことはできません。
  • Windows エクスプローラ以外で操作する場合は多分、制限できません。
    例:ディスクをフォーマットする→防ぐことはできません。Windows PEやLinux等を起動してフォルダを触る→防ぐことはできません。コマンドプロンプト・VBScript等で操作→防ぐことはできません。
  • Windows XP又はそれ以降のOSで動きます。
    例:Windows NT 2000・Windows 98等、非対応のWindowsで操作→防ぐことはできません。
  • 導入していても、動作していなければ防ぐことはできません。
    例:ウィルス対策ソフトに検疫されてしまった→防ぐことはできません。
  • 特定ファイルを悪意の有る方に触られた場合は、お手上げです。
    例:パソコン分かる人が".NoDelete"を取り払ってしまった!→防ぐことはできません。スパイウェア・マルウェア対策ソフトが".NoXXX"を勝手に駆除してしまった!→防ぐことはできません。
  • やはり日頃の動作確認が肝要です→大変な手数!

結論としましては、かなり実験的で、業務における信頼性は余り高くない部類の一品と言えるでしょう。

NTRサポートで日本語入力を支援するNoime4ntr

NTRサポートをご利用中のオペレータ様で、

漢字キーの押下が転送されない問題で、「思い通りに日本語入力できない」といった悩みはございませんか。

NTRサポートで日本語入力できるように支援する為の方法をご紹介致します。

手順:
  1. Noime4ntrプログラム(Windows版)を次の場所から入手し、導入致します。但し、非公式・非公認のソフトです。ご利用の際にはライセンス条項等に十分ご注意ください:
  2. ソースコードを入手して頂けます。TortoiseGit等の使用を推奨:

2011年7月9日土曜日

"ControlSource/コントロールソース" プロパティ を持つATLコントロールを作成する

Microsoft Accessでフォームを構築する際には、多数のテキスト ボックス(コントロールソースを設定した物)を多用するかと思います。


開発者がこのようなコントロールを自作したい場合は、どのような作りこみをすれば良いか?

例えばExcelで見られるような、セル幅に合わせた表示をしてくれるラベル・コントロールを作りたい場合です。

Microsoft Visual Studio 2005で、Control Sourceを持つコントロールを作成できました。そのテクニックをご紹介したいと思います。

※ Microsoft社様のサイトにHow to情報が有りました:How to add Excel LinkedCell support to your ATL ActiveX control

既に作成しているコントロールを調整する場合:
  • 次のINTERFACE_ENTRYをすべて含みます:
    • COM_INTERFACE_ENTRY(IConnectionPointContainer)
      COM_INTERFACE_ENTRY(IProvideClassInfo)
  • 次のCONNECTION_POINT_ENTRYを含みます:
    • CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
  • IDLファイルで次の定義をinterfaceに含みます。Valueの名称、idの序数、displaybindの有無は任意。但しbindable必須、defaultbind必須、VARIANT型を用いることも必須です:
    •  [propput, bindable, displaybind, defaultbind, id(0)]
       HRESULT Value([in]VARIANT *rhs);
       [propget, bindable, displaybind, defaultbind, id(0)]
       HRESULT Value([out,retval]VARIANT *prv);
  • Valueプロパティの実装を作りこみます。
 この手はずでいけると思います。

新たにコントロールを作成する場合:
  • 「クラスビュー」を表示、プロジェクトを右クリック、「追加」クリック、「クラス」クリック、「ATL コントロール」選択、「追加」クリック。
  • 「オプション」では、「接続ポイント」のサポートにチェックを入れてください。
  • 「インターフェイス」では、「IPropertyNotifySink」「IProvideClassInfo2」をサポート有りに移動します。
  • IDLファイル中の作成したinterfaceに、Valueプロパティの定義を追加します。例:
    •  [propput, bindable, displaybind, defaultbind, id(1001)]
       HRESULT Value([in]VARIANT *rhs);
       [propget, bindable, displaybind, defaultbind, id(1001)]
       HRESULT Value([out,retval]VARIANT *prv);
  • 作成したクラスのヘッダファイルにValueプロパティ操作の実装を追加します。例:
    •  public:
        CComVariant m_vt;

        virtual HRESULT STDMETHODCALLTYPE put_Value(VARIANT *rhs)
        {
         return m_vt.Copy(rhs);
        }

        virtual HRESULT STDMETHODCALLTYPE get_Value(VARIANT *prv)
        {
         return VariantCopy(prv, &m_vt);
        }
注意する箇所の図解です:
[ATLコントロールウィザード]-[オプション]画面
 [ATLコントロールウィザード]-[インタフェイス]画面
IExcellyLabel6のinterface定義にValueプロパティを追加
CExcellyLabel6にValueプロパティ操作の実装を追加

2011年5月6日金曜日

Dropboxで、Windowsサーバのデータをバックアップ

デジタルドルフィンズ(文書管理システム)の、オンライン・バックアップに活用しようと検証しています。

課題等:
・「バックアップ」サービスではなく、「同期」サービスですよ、と言われました。http://forums.dropbox.com/topic.php?id=36079
・Dropboxフォルダに入っていないフォルダは同期されません。
・とはいえ、任意のフォルダをバックアップしたいものです。
・Windows Server 2003では、再解析ポイントを貼り付けることで、対象を拡大できました(※1)。
・Windows Server 2008では、シンボリックリンクを貼り付けることで、対象を拡大できました(※2)
・データベースの生データを同期するのは困難なようです:ファイルサイズの問題と、複数にまたがるファイルに対する一貫性維持の問題。
・生データのダンプ(バックアップ)を同期する分にはうまくいくようです。
・Word/Excel/PDF等、ファイルを同期する分にもうまくいくようです。

・Windowsにログインしていないと同期できません→サーバでは通常、ログインしていないので、対策が必要かもしれません。
・同期の成功・失敗がサーバマシンの外から分かりにくい。
・被災した場合には恐らく、支払い能力を巡ってDropboxと英語で交渉しなければなりません。
・同期状況がパーセンテージで表示されません。
・本当に同期されているのか、という漠然とした不安感が有ります。
・ファイルの履歴は何世代残るのか。
・世代数と使用容量の関係は?
・使用容量の増大により、履歴が消えていくのかどうか。
・優秀なファイアウォールやIDS等を導入している場合に、誤って同期が遮断されないかどうか。

(※1)
対象は拡大しましたが、拡大した部分は常時同期されませんでした。クライアントソフトで、Pause→Resumeの操作をしますと、拡大部分の同期が開始されました。これは大変!

対象の拡大には、Windows SysinternalsのJunctionを利用いたしました:http://technet.microsoft.com/ja-jp/sysinternals/bb896768%28en-us%29.aspx

(※2)
 対象は拡大しましたが、拡大した部分は常時同期されるかどうかは、不明です。

2011年4月19日火曜日

IReconcilableObjectは、誰が使っているのだろうか

英語版のWikipediaに記述が有りました。

Briefcase (Microsoft Windows)
http://en.wikipedia.org/wiki/Briefcase_(Microsoft_Windows)

「Microsoft Accessが入っていると、レプリケーションツールとして利用できる」とあります。

そこで試してみますと、同期の方法から「結合」を選ぶオプションを出すことができました。

ブリーフケースの同期で、「結合」オプションが利用できる

2011年4月14日木曜日

ホスト(Internet Explorer等)のサイト(IOleClientSite等)を得る方法

Visual Studio 2005の、Windows Control Libraryプロジェクトで作成致します、UserControlでの話です。

一日掛けて試行錯誤しました所、次の方法で落ち着きました:

    IOleClientSite pClientSite = (IOleClientSite)Site.GetService(new AntiMoniker().GetType());

  [ComImport(), Guid("00000305-0000-0000-C000-000000000046")]
  class AntiMoniker {
  }


ポイントはnew AntiMoniker()の部分で、System.__ComObjectをインスタンス化しているという点です。かなり姑息な方法ですが… 他に良策を思いつきません。

必ずしもAntiMonikerである必要は無いと思います。

然しながら、何とかMoniker系は歴代Windowsでも問題なく使えそうなクラスだと思いましたので、AntiMoniker辺りを選びました。

また、AntiMonikerの中身は省いています(メソッド・プロパティは今回使いませんので)。

---
本件で参考にしたポストです:

How to use IOleClientSite in C#?
http://www.eggheadcafe.com/software/aspnet/33997199/how-to-use-ioleclientsite-in-c.aspx
How to cast a control to IOleObject
http://stackoverflow.com/questions/1216760/how-to-cast-a-control-to-ioleobject