« ☆特殊フォルダのパス名を取得する。 | トップページ | ■Delphiの本 »

☆Docuworksプラグインを作成してみる。

Fuji XeroxはDocuworksのプラグイン仕様についても丁寧な解説とヘッダーファイルを配布しておられるのですが、 C++向けとなっており、私にはよくわからないんですよね。いろいろ試した結果、下記のコードで一応動作しているようなので書いておきますね。

プラグインの実態は、DLLなので、ファイル新規作成その他DLLウィザードをクリックして新規にプロジェクトを作成します。
library Project1;

uses
  Windows,
  SysUtils;

{$R *.res}

const
  PLUGGEDIN_REGKEY = 'Software\\FujiXerox\\MPM3\\MPWS\\PLUGGEDIN';
  MAX_PLUGGEDIN_NUMBER = 30;
  PLUGGEDIN_VERSION = 2;
  //
  PLUGGEDIN_NAME_INITIALIZE = '_PLG_Initialize@4';
  PLUGGEDIN_NAME_FINALIZE ='_PLG_Finalize@4';
  PLUGGEDIN_NAME_CANFINALIZE = '_PLG_CanFinalize@4';
  PLUGGEDIN_NAME_REQUIREFILES =  '_PLG_RequireFiles@4';
  PLUGGEDIN_NAME_EXECUTECOMMAND = '_PLG_ExecuteCommand@4';
  PLUGGEDIN_NAME_ISPARALLEL = '_PLG_IsParallel@4';
  PLUGGEDIN_NAME_ISCLONINGCOMMAND = '_PLG_IsCloningCommand@4';
  PLUGGEDIN_NAME_GETNEWCLONE =  '_PLG_GetNewClone@8';
  PLUGGEDIN_NAME_RELEASECLONE = '_PLG_ReleaseClone@4';
  PLUGGEDIN_NAME_EXECUTABLE =  '_PLG_Executable@8';
  PLUGGEDIN_NAME_CANSETPROFILE = '_PLG_CanSetProfile@4';
  PLUGGEDIN_NAME_SETPROFILE = '_PLG_SetProfile@4';
  PLUGGEDIN_NAME_GETCOMMANDICON = '_PLG_GetCommandIcon@8';
  PLUGGEDIN_NAME_ENUMERATECOMMANDS = '_PLG_EnumerateCommands@12';

type
  PLUGGEDIN_STRUCT = ^TPluggedin_struct;
  TPluggedin_struct = packed record
    ps_nPlugVersion: LongInt;
    ps_pszFunction: PChar;
    ps_execParallel: LongInt;
    ps_nFiles: LongInt;
    ps_pszFiles: PChar;
    ps_pnPageNumbers: LongInt;
    ps_pszExecFolder: PChar;
    ps_hwndDWDesk: LongInt;
  end;

// Initialize Entry
function PLG_Initialize(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 1;
end;

// Finalize Entry
function PLG_Finalize(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 1;
end;

// CanFinalize Entry
function PLG_CanFinalize(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 1;
end;

// RequireFiles Entry
function PLG_RequireFiles(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 1;
end;

// ExecuteCommand Entry
function PLG_ExecuteCommand(pPlgStruct: PLUGGEDIN_STRUCT): LongInt; stdcall;
begin
  MessageBox(0, pPlgStruct.ps_pszFunction,
    'Welcome to Docuworks Plugins', MB_OK);
  Result := 1;
end;

// IsParallel Entry
function PLG_IsParallel(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 0;
end;

// IsCloning Entry
function PLG_IsCloningCommand(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 0;
end;

// GetNewClone Entry
function PLG_GetNewClone(cmdName: PChar; nBufSize: LongInt): LongInt; stdcall;
begin
  Result := 0;
end;

// ReleaseClone Entry
function PLG_ReleaseClone(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 0;
end;

// Executable Entry
function PLG_Executable(const cmdName: PChar; nArgFiles: LongInt):
  LongInt; stdcall;
begin
  Result := 1;
end;

// CanSetProfile Entry
function PLG_CanSetProfile(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 0;
end;

// SetProfile Entry
function PLG_SetProfile(const cmdName: PChar): LongInt; stdcall;
begin
  Result := 0;
end;

// GetAppIcon Entry
function PLG_GetCommandIcon(const cmdName: PChar; bNormalSize: LongInt):
  HICON; stdcall;
begin
  Result := LoadIcon(hInstance, MAKEINTRESOURCE('MAINICON'));
end;

// EnumerateCommands Entry
function PLG_EnumerateCommands(var cmdNameList: PChar; nBufSize: LongInt;
  var nBufSizeRequired: LongInt): LongInt; stdcall;
const
  S = 'SamplePlugin by hiderin';
begin
  nBufSizeRequired := Length(S)+1;
  if (nBufSize < nBufSizeRequired) then
  begin
    Result := 0;
    Exit;
  end;
  StrCopy(@cmdNameList, S);
  Result := 1;
end;

exports
  PLG_INITIALIZE name PLUGGEDIN_NAME_INITIALIZE,
  PLG_FINALIZE name PLUGGEDIN_NAME_FINALIZE,
  PLG_CANFINALIZE name PLUGGEDIN_NAME_CANFINALIZE,
  PLG_REQUIREFILES name PLUGGEDIN_NAME_REQUIREFILES,
  PLG_EXECUTECOMMAND name PLUGGEDIN_NAME_EXECUTECOMMAND,
  PLG_ISPARALLEL name PLUGGEDIN_NAME_ISPARALLEL,
  PLG_ISCLONINGCOMMAND name PLUGGEDIN_NAME_ISCLONINGCOMMAND,
  PLG_GETNEWCLONE name PLUGGEDIN_NAME_GETNEWCLONE,
  PLG_RELEASECLONE name PLUGGEDIN_NAME_RELEASECLONE,
  PLG_EXECUTABLE name PLUGGEDIN_NAME_EXECUTABLE,
  PLG_CANSETPROFILE name PLUGGEDIN_NAME_CANSETPROFILE,
  PLG_SETPROFILE name PLUGGEDIN_NAME_SETPROFILE,
  PLG_GETCOMMANDICON name PLUGGEDIN_NAME_GETCOMMANDICON,
  PLG_ENUMERATECOMMANDS name PLUGGEDIN_NAME_ENUMERATECOMMANDS;

begin
end.



コンパイルしてできたDLLを C:\Program Files\Fuji Xerox\DocuWorks\bin\pluginsにコピーします。
Docuworksを起動させて、プラグイン設定を選択すると次のようなダイアログが表示されます。

Plugin1



実行させてみると、きちんとダイアログが表示されました。

Plugin2





DocuWorks Development Tool Kit 6.2.3 日本語版
http://www.fujixerox.co.jp/soft/docuworks/download301.html



[20080121 追記]
レコード型PLUGGEDIN_STRUCTを下記の記事で書き換えています。
☆「char**」 を Delphiで書くと・・・。

|

« ☆特殊フォルダのパス名を取得する。 | トップページ | ■Delphiの本 »