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には、ファイル名の変更をするものがなさそうなので、
解決できずにいます。メッセージでメニューとクリップボードを使って処理する方法もありますが、
スマートじゃないですよね。