use Win32::API; use Win32::OLE; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; # エクセル を使う定義 use Win32::OLE::Const 'Microsoft Word'; # ワード を使う定義 use Win32::OLE::Const 'Microsoft PowerPoint'; # パワーポイントを使う定義 use Win32::OLE::Variant;# use するだけで良い:codeを数値化してくれる # --------------------------------------------------- my $MessageBox = Win32::API->new("user32", "MessageBoxA", "NPPN", "N");# メッセージボックスを使う定義 $MessageBox->Call(0, "ワード・エクセルの「作成者・最終編集者」を表\示します。", "Message", 0); my $cd = `cd`;chomp($cd); opendir(DRC,".");@f_get_files = grep(/\.doc/i || /\.ppt/i || /\.xls/i,readdir(DRC));closedir(DRC); foreach $file(@f_get_files) { my $file2 = "$cd/$file"; my $Au = ""; my $LA = ""; if ($file =~ m#\.doc#) {($Au,$LA) = &au_doc($file2);} elsif($file =~ m#\.xls#) {($Au,$LA) = &au_excel($file2);} elsif($file =~ m#\.ppt#) {($Au,$LA) = &au_ppt($file2);} if($Au eq "") {$Au = "未定義";} if($LA eq "") {$LA = "未定義";} $MessageBox->Call(0, "「ファイル:$file]\n「作成者:$Au]\n最終編集者:$LA]です。", "Message", 0); } $MessageBox->Call(0, "「終了しました!]", "Message", 0); # sub ----------------------------------------------------- sub au_ppt{ my ($file2) = @_; my $ppt = Win32::OLE->new('PowerPoint.Application') or die sprintf("Cannot start PowerPoint: '%s'\n", Win32::OLE->LastError); my $presen = $ppt->Presentations->Open({FileName => $file2,ReadOnly => 0,WithWindow => 0});# WithWindow => 0が重要 $Au = $presen->BuiltInDocumentProperties(3)->{Value}; $LA = $presen->BuiltInDocumentProperties(7)->{Value}; $presen->Close(); $ppt->Quit(); undef $ppt; undef $presen; return ($Au,$LA); } sub au_doc { my ($file2) = @_; my $i; my $temp; my $value; my $name; $word = Win32::OLE->new('Word.Application', sub {$_[0]->Quit;}) or die "Oops, cannot start Word"; $word->Documents->Open($file2) || die("Unable to open document ",Win32::OLE->LastError()); my $doc = $word->ActiveDocument; my $prop = $doc->{'BuiltInDocumentProperties'}; $i = 3;$temp = $prop->item($i); $name = $temp->{'Name'}; $Au = $temp->{'Value'}; $i = 7;$temp = $prop->item($i); $name = $temp->{'Name'}; $LA = $temp->{'Value'}; $doc->Close(); undef $doc; undef $Word; return ($Au,$LA); } sub au_excel{ my ($file2) = @_; my $i; my $temp; my $value; my $name; my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $Book = $Excel->Workbooks->Open($file2); my $prop = $Book->{'BuiltInDocumentProperties'}; $i = 3;$temp = $prop->item($i); $name = $temp->{'Name'}; $Au = $temp->{'Value'}; $i = 7;$temp = $prop->item($i); $name = $temp->{'Name'}; $LA = $temp->{'Value'}; $Book->Close; undef $Book; undef $Excel; return ($Au,$LA); }