パスワード付きWordファイルのオープン失敗時の例外処理

このQ&Aのポイント
  • Microsoft Wordで作成したパスワード付きの文章ファイルをオープンする際に、パスワード入力に失敗した場合の例外処理方法について教えてください。
  • 現在、ファイルオープン時にパスワード入力を失敗させると、Runtime Errorが発生し、abnomal program terminationというエラーメッセージが表示されています。このエラーを回避する方法を教えてください。
  • パスワード付きWordファイルのオープン時にエラーが発生し、abnomal program terminationというエラーメッセージが表示される問題について解決策を教えてください。
回答を見る
  • ベストアンサー

パスワード付きWordファイルのオープン失敗時の例外処理

少し前にも同様の質問を投稿したのですが、内容が曖昧だったと感じたので、改めて質問させていただきます。 目的は、Microsoft Wordで作成した文章ファイルにパスワードがかかっているか否かを判定することです。 現時点では、ファイルオープン時にパスワード入力を失敗させた Runtime Error を catch することで対処しようとしているのですが、このエラーの掴み方が分かりません。 エラーメッセージには abnomal program termination と出ています。 このエラーを掴む方法をどなたかご存知ないでしょうか。 よろしくお願いします。 ↓ソースは以下の通りです↓ #import "C:\Program Files\Microsoft Office\Office\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesDOC") #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace #import "C:\Program Files\Microsoft Office\Office\Msword9.olb" rename("ExitWindows", "ExitWindowsDOC") try { using namespace Word; _ApplicationPtr pAPP; COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR); //Wordの起動 pAPP.CreateInstance(L"Word.Application"); pAPP->Visible = TRUE; //新規ドキュメントを作成 DocumentsPtr pDocuments = pAPP->GetDocuments(); //任意のパスワード付きファイルをオープン。 //5要素目は正しくないパスワード。 _DocumentPtr pDocument = pDocuments->Open(COleVariant("C:\\test.doc"),vOpt,vOpt,vOpt, COleVariant("password"),vOpt,vOpt,vOpt,vOpt,vOpt, vOpt, vOpt); //Wordを閉じる pAPP->Quit(); } catch(CException *e) { AfxMessageBox("キャッチ"); e->Delete(); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

この方面にはくらいので外している可能性は多いですが……。 CExeption は、MFC が送出する例外らしいので、これとは別のクラスの例外が送出されているのではないでしょうか? もしも、例外が送出されるのであれば、 catch(...) で、全例外を補足してみると、何か進展があるかもしれませんが。

SUKOSHI
質問者

お礼

すべての例外を掴むのには catch(...) を使えばよかったのですね、恥ずかしながら初見でした。 CExeptionですべて掴めると勘違いしていました。 ソースの方ですが、catch(...)を使うことで無事に例外を補足できているようです。 これでとりあえずは目的の処理を行うことができそうです。 非常に助かりました、ありがとうございます。 ただ、相変わらず何という例外が出ているのかは不明のままです。 こちらの方でも調べていますが、解決するまでしばらくの間は未解決とさせてもらいます。

関連するQ&A

  • vbaのインポートでエラー

    WinXP+VC7+Excel2003の環境を利用しているのですが、以前はエラーがでなかった箇所で エラーが出るようになりました。 調べると、COMを削除したのがいけないようなのですが、確かに最近PCが重いのでCCleanerというツールで整理したり、不要なプログラムもいくつか削除しました。 エラーを解決するには、どのCOMを入れればいいのでしょうか。 ご教授ください。よろしくお願いします。 【エラー】 d:\・・・\xxx.h(11) : error C4772: #import は存在しない型ライブラリから型を参照しましたす; '__missing_type__' はプレースホルダとして使用されます d:\・・・\release\vbe6ext.tli(248) : error C2440: 'return' : '__missing_type__ *' から '__missing_type__' に変換できません。 この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 【宣言】 #import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\Mso.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL") rename("RGB", "RGBXL") rename("SearchPath", "SearchPathXL") #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace #import "D:\Program Files\Microsoft Office\OFFICE11\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") rename("ReplaceText", "ReplaceTextXL") rename("CopyFile", "CopyFileXL") no_dual_interfaces no_auto_exclude

  • ワード(2002)のファイルを開こうとすると、インターネットにアクセスしようとするのですが。

    昨日までは普通に起動していたのですが、今日、ワードのファイルを開こうとしたら、「C:\Program Files\Microsoft Office\Office10\WINWORD.EXE が初めてインターネットにアクセスしようとしています」とノートンのインターネットセキュリティーの警告が出るようになりました。 どのように対応したらよいのでしょうか。 よろしくお願いいたします。

  • 例外処理についてお願いします!!

    下のプログラミングについていくつか質問があります。 (1) プログラムの冒頭に来るpublic static void main(String[] args)を今まで気にしていなかったのですが これはどういうことですか?これもメソッドのひとつなんですか?このプログラムではpublic static void main(String[] args)でメソッドを定義してそれをetest( )メソッドで開いているという感じでしょうか? それとetstってどこから来たのかわかります?作者が勝手につけた名前だそうですが。 (2)FileReader fr = new FileReader("xfile.txt"); のところがわかりません。これはどういう意味ですか? public static void main(String[] args) { public static void etst( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } } よろしくお願いします!!

    • ベストアンサー
    • Java
  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java
  • Office 2003 インストールの場所について

    Windows Vistaを使っています。 Office 2003 Excel/Wordのインストール先がデフォルトと違うようなので変更したいのですが、 インストール先がうまく変更できず困っています。 状況は以下のとおりです。 ■現在、Office 2003 Excel/Wordは(1)の場所にインストールされています。 (1)C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Office ■インターネットで調べてみたところ、デフォルトのインストール先は(2)のようです。 (2)C:\Program Files\Microsoft Office ※インストールの際にインストール先を(2)に設定してもなぜか「Program Files」ではなく「ProgramData」にインストールされてしまいます。 SONYのVAIOを使っており、3年ほど前に買ったパソコンです。 1度修理に出して、リカバリをしています。 それから、しばらくWordやExcelを開く際にエラーが出ていました。 (現在はエラーが出ないのでエラーメッセージは不明です。) どなたかご教授いただけると幸いです。 よろしくお願いいたします。

  • コマンドプロンプトで一度に複数のプログラムを立ち上げたいのですが、

    コマンドプロンプトで一度に複数のプログラムを立ち上げたいのですが、 "C:\Program Files\Microsoft Office\Office\EXCEL.EXE" "C:\Program Files\Microsoft Office\Office\WINWORD.EXE" のように書いて.batに変更して起動させても、エクセルだけが立ち上がりワードは立ち上がりません。 エクセルを終了させた後にワードが立ち上がります。 全てが同時に立ち上がるようにしたいのですが、良い方法はないでしょうか。 OSはウィンドウズ XPです。 よろしくお願いします。

  • batファイルでのプログラム起動順

    皆さん宜しくお願いします。 OS起動時に複数のプログラムをbatファイルで起動しようとしています。 で、困っているのが起動順です。 たとえば 起動したいプログラムがエクセル・ワード・パワーポイントとして普通に start "" "C:\Program Files\Microsoft Office\Office\EXCEL.EXE" start "" "C:\Program Files\Microsoft Office\Office\WINWORD.EXE" start "" "C:\Program Files\Microsoft Office\Office\POWERPNT.EXE" とします。 個々のプログラムの起動時間が違うのでパワーポイント・エクセル・ワードの順で立ち上がり最前面に出ているのがワードになるとします。 しかし一番最初に使いたいのはエクセルなんです。 タスクバーで入替えればいいのですがエクセルが最前面にしておきたいのです。 batファイルの記述で起動するタイミングを遅らせたりすることは可能でしょうか?

  • iostream インクルード時に発生するエラー

    C++ の勉強をするためにVisualStudio2008にて下記コードをビルドしたのですが、エラーが発生してビルドが失敗しました。 ■ コード #include <iostream> using namespace std; int main() { std::cout << "Hello World !"; return 0; } ■ 操作 空のコンソールアプリケーションを作成し、ソースファイルに追加>新しい項目 にて "temp.cpp" を追加、コードを入力。その後 ビルド > ソリューションのビルド を実行。 ■ エラー(一部) >> 「説明」 列 warning C4985: 'strlen': 前の宣言に属性が存在しません。 error C2039: 'wmemcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemcpy_s': 識別子が見つかりませんでした error C2039: 'wmemmove_s' : '`global namespace'' のメンバではありません。 error C3861: 'wmemmove_s': 識別子が見つかりませんでした error C2039: 'memcpy_s' : '`global namespace'' のメンバではありません。 error C3861: 'memcpy_s': 識別子が見つかりませんでした error C2039: 'memmove_s' : '`global namespace'' のメンバではありません。 >>対応する「ファイル」列 d:\program files\microsoft visual studio 9.0\vc\include\exception d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd d:\program files\microsoft visual studio 9.0\vc\include\iosfwd プロジェクトのプロパティやインストール時の構成などで何か問題があるのでしょうか。VisualStudio以外にはWindows SDK 、Windows SDK 6.0A、SQL Server2005などが導入されています。 再インストールするのもありかと思ったのですが、原因が分からないとまた同じ現象が発生しそうなため踏み切れません。 よろしくお願いします。

  • MSXML3でerror: 'C2065 IID_IXMLDOMSelection' :定義されていない識別子です。 が出てコンパイルできない。

    #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename_namespace("MSXML2") rename("EOF", "EndOfFile") #import "msxml3.dll" using namespace MSXML2; というようにMSXML3をimportし以下のようなソースを 書いたのですがコンパイルエラーになってしまいます。 IXMLDOMDocumentPtr pDoc; IXMLDOMNodeListPtr pNodeList; pDoc.CreateInstance(__uuidof(DOMDocument30)); pDoc->put_async(VARIANT_FALSE); pDoc->validateOnParse = FALSE; pDoc->load( _variant_t(XMLファイル) ); pNodeList = pDoc->selectNodes("//rs:data"); IXMLDOMSelection *pIXMLDOMSelection=NULL; pNodeList->QueryInterface(IID_IXMLDOMSelection, (void**)&pIXMLDOMSelection ); ヘッダがないとよく出てくるエラーだと思いMSDNで調べたらmsxml2.hというヘッダがあるようなことが書かれていました。 そこで #include <msxml2.h> というコードを追加したのですが"見つかりません"と言われてしまいます。 http://cvs.sourceforge.net/viewcvs.py/libxml2-pas/dom2/Attic/MSXML3.pas?rev=1.3 上記のサイトに IID_IXMLDOMSelection: TGUID = '{AA634FC7-5888-44A7-A257-3A47150D3A0E}'; という記載がありこれが見つからないのではと思っていますがどうしたらよいのか分かりません。 アドバイスお願いします。

    • ベストアンサー
    • XML
  • office 2007をインストール出来ません。

    word2007の調子が悪くなったので、アンインストールし再インストールしようとしたら、「エラー1303」が表示されてインストール出来ません。 Administratorでログインしてますのでアクセス権が無いことは無いと思います。 Cドライブを確認したところ、下記のフォルダーがありませんでした。 C:¥Program Files(x86)¥Microsoft office¥office12 このフォルダーを自分で作れば良いんでしょうか。 よろしくお願いいたします。