Lotus C API Toolkitを使う
ここからC APIをダウンロードできます↓
http://www.ibm.com/developerworks/lotus/documentation/
サンプルのビルド手順
User Guideでも結構詳しく説明されていますが、こんな感じです。
- Notesをインストールする
- Visual Studio 2008とかのVC++の開発環境をインストールする
- 「Lotus C API toolkit」をダウンロードして展開
- 環境変数に以下を追加(インストールパスに応じて読み替えてください)
- PATH -> C:\Program Files\Lotus\notes;
- INCLUDE -> E:\notesapi\include
- LIB -> E:\notesapi\lib\mswin32
- Visual Studio 2008コマンドプロンプトを開いて、イントロダクションサンプルをビルド
E: cd E:\notesapi\samples\basic\introwin nmake /f mswin32.mak /a
作成されたINTROWIN.exeを実行すると真っ白な画面が開きます。(データベース名を取得するサンプルらしい)
パスワード入力要求をフックするサンプル
C APIにしかない機能のExtension Managerを使った、Notesのパスワード入力要求をフックするサンプルが「notesapi\samples\misc\extpwd」に入っています。
でも同じ要領でビルドしようとしたら
mswin32.def : error LNK2001: 外部シンボル "LibMain" は未解決です。 nextpwd.lib : fatal error LNK1120: 外部参照 1 が未解決です。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\link.EXE"' : リターン コード '0x460' Stop.
ってのが出た。回避方法がよくわからないのでmswin32.defの「LibMain」の行を削除してビルドは成功。(警告は他にも出てる)
作成されたnextpwd.dllをC:\Program Files\Lotus\notesにコピーして、notes.iniに以下を追記する
EXTMGR_ADDINS=EXTPWD
Notesを起動すると、いつものパスワードダイアログではないカスタムダイアログが表示されます。
パスワード入力を無くす
さっきのサンプルを修正して自動ログインしたい。
extpwd.cの130行あたり
answer = ExtGetPasswordText ( MaxPwdLen, FileName, OwnerName, retLength, retPassword);
ここでカスタムダイアログを表示するコードを実行していますが、これを消して以下に修正
strcpy_s(retPassword, 8, "password"); *retLength = 8; return (ERR_BSAFE_EXTERNAL_PASSWORD);
retPasswordにパスワード、retLengthにパスワードの文字数を返します。
FileName、OwnerNameなどは既にnotes.iniから読み込んだ初期値が入っている状態なので、必要がなければ触らなくてOK。
同じようにビルドしてdllをnotesフォルダにコピーし、Notesを起動するとパスワードダイアログが表示されなくなるはずです。(パスワードが間違っていた場合はエラーメッセージが表示されます)
あとは、どっかのiniファイルからパスワードを読み込むようにすれば完璧。