私は PowerPoint プレゼンテーションを処理するアプリケーションを作成しています。PowerPoint プレゼンテーションにパスワードがあるかどうかを検出し、処理を停止する方法を検討しています。
3 に答える
プレゼンテーションがパスワードで保護されているかどうかを確認する方法がないように思えます。プロパティにアクセスできるようにするには、最初にドキュメントを開く必要があります。ドキュメントを開くときにパスワードを入力する必要があります。
確認できるパスワード プロパティがあります。
Expert Exchange で回避策を見つけました:
問題は次のとおりです。Visual Basic はシングル スレッド アプリケーションです。これは、特定の手順を保留にして別の手順を (同じアプリケーション内で) 続行できないことを意味します。パワーポイントに「on open」パスワードが設定されている場合、アプリケーション内のCreateObjectプロシージャは、パワーポイントがリリースするまで保留されます。これは、ユーザーがパスワードを入力するときです。私が知っているこれを回避する方法はありませんが、回避策を作成できます。
2 つのアプリケーションを作成します。1 つのアプリケーションは既にお持ちのアプリケーションで、2 つ目は「パワーポイント アンロック」です。アプリケーション 1 で保護された PowerPoint プレゼンテーションを開く直前に、2 番目のプログラムを実行します。これは、シェル コマンドを使用して実行できます。「powerpoint unlocker」は、必要に応じて高度にすることができます。たとえば、コマンドラインパラメーターを提供して、どのプレゼンテーションをどのパスワードでロック解除する必要があるかを指定できます。次に、 findwindow API を使用して、ロックされたプレゼンテーションのウィンドウ ハンドルを取得します。それができたら、sendmessage API を使用してパスワードを入力します。この後、「powerpoint unlocker」がアンロードされ、最初のアプリケーションが実行を再開できます。
これが役立つことを願っています!
オスモディアン
PPTXドキュメントの場合、最初の8バイトを調べてヘッダーを調べ(暗号化されたファイルの場合は[d0cf 11e0 a1b1 1ae1]である必要があります)、暗号化されたPPTXであるかどうかを確認できます。
ただし、Office 2003(デフォルトの拡張子.ppt)で作成されたファイルの場合、ヘッダーは同じです(MS-CFBヘッダー)。したがって、誰かがOffice 2003ドキュメントを作成し、それをPPTXに名前変更した場合、コードはそれを暗号化されたドキュメントと見なします(ただし、必ずしも1つである必要はありません)。
Powerpointで既に開いているドキュメントを操作している場合は、SaveCopyAs関数を使用して、最初にドキュメントをpptx形式でディスクに保存し(2番目のパラメーターのデフォルトオプションを使用)、ヘッダーを調べて暗号化されているかどうかを確認できます。ファイル。
これを見ることを検討してください - https://msdn.microsoft.com/ko-kr/library/dd948895(v=office.12).aspx
PPT (office 2003) ドキュメントの場合、符号なし整数 (0xF3D1C4DF ビット) を調べて、ファイルが暗号化されているかどうかを識別できます。