« ☆Docuworksプラグイン「自動正立」を作る。 | トップページ | ■TMS Advanced ToolBars & Menusアップデート »

☆Docuworksで「ファイル名に日付を付加する」プラグイン

Docuworksは、設定すればスキャン時に日時をファイル名に自動的に付加してくれますが、 印刷した場合等には自分で付ける必要があります。(と思います。)
そこで、作成日時か最終更新日時の内、古い方の日時をファイル名に付加する機能を 持つプラグインを作ってみます。(実は仕事で必要だったりします。)

前回のプラグインのコードと同様なので、PLG_ExecuteCommand関数のみ書きますね。
// ExecuteCommand Entry
function PLG_ExecuteCommand(pPlgStruct: PLUGGEDIN_STRUCT): LongInt; stdcall;

  function GetFileDateTime(const FileName: String; var CreateYMD, LastWriteYMD,
    LastAccessYMD: TDateTime): Boolean;
  var
    Handle: Integer;
    Time1, Time2, Time3: TFILETIME;
    SysTime: TSYSTEMTIME;
    SECURITYATTRIBUTES: TSECURITYATTRIBUTES;
  begin
    Result := False;
    with SECURITYATTRIBUTES do
    begin
      nLength := SizeOf(TSECURITYATTRIBUTES);
      lpSecurityDescriptor := nil;
      bInheritHandle := False;
    end;

    Handle := CreateFile(PChar(FileName),GENERIC_READ,0,@SECURITYATTRIBUTES,
                          OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,0);

    if Handle = 0 then Exit;
    try
      GetFileTime(Handle, @Time1, @Time2, @Time3);

      FileTimeToLocalFileTime(Time1,Time1);
      FileTimeToSystemTime(Time1, SysTime);
      CreateYMD := SystemTimeToDateTime(SysTime);

      FileTimeToLocalFileTime(Time2,Time2);
      FileTimeToSystemTime(Time2, SysTime);
      LastAccessYMD := SystemTimeToDateTime(SysTime);

      FileTimeToLocalFileTime(Time3,Time3);
      FileTimeToSystemTime(Time3, SysTime);
      LastWriteYMD := SystemTimeToDateTime(SysTime);

      Result := True;
    finally
      CloseHandle(Handle);
    end;
  end;

var
  I: Integer;
  S: String;
  InputFile: String;
  CreateYMD, LastWriteYMD, LastAccessYMD: TDateTime;
begin
  S := '';
  for I := 0 to pPlgStruct^.ps_nFiles-1 do
  begin
    InputFile := pPlgStruct^.ps_pszFiles^[I];
    if GetFileDateTime(InputFile, CreateYMD, LastWriteYMD, LastAccessYMD) then
    begin
      if CreateYMD <= LastWriteYMD then
        S := FormatDateTime('yyyymmdd', CreateYMD)
      else
        S := FormatDateTime('yyyymmdd', LastWriteYMD);
      S := ExtractFilePath(InputFile) + S + ExtractFileName(InputFile);
      RenameFile(InputFile, S);
    end;
  end;
  Result := 1;
end;

上記のコードで、きちんとファイル名を修正してくれるのですが、Docuworks Deskでのファイル位置が 一番最後に移動してしまいます。DocuworksのAPIには、ファイル名の変更をするものがなさそうなので、 解決できずにいます。メッセージでメニューとクリップボードを使って処理する方法もありますが、 スマートじゃないですよね。

|

« ☆Docuworksプラグイン「自動正立」を作る。 | トップページ | ■TMS Advanced ToolBars & Menusアップデート »