トップ回答者
【Office2013】読み取り専用を開く方法について

質問
-
お世話になっております。
Office2013でのPowerPointファイルについての質問です。
C#(.NET Framework 3.5)とWin32 APIを利用して以下の操作を行うプログラムを作成しました。
・書き込みパスワードを設定しているppt(pptx)ファイルを非表示で開く。
・書き込みパスワード入力ダイアログで「読み取り専用(R)」を選択する。
・開いたppt(pptx)ファイル内の情報を読み取る。
プログラムを実行するWindowsにインストールされたOfficeが2010の場合は、
書き込みパスワード入力ダイアログが#32770(ダイアログ)のため、
FindWindowEx(...)を使用して書き込みパスワード入力ダイアログ内のButtonオブジェクトのIntPtrを取得できます。
プログラムを実行するWindowsにインストールされたOfficeが2013の場合は、
書き込みパスワード入力ダイアログがNUIDialogのため、
FindWindowEx(...)を使用して書き込みパスワード入力ダイアログ内のButtonオブジェクトのIntPtrを取得できません。
(そもそもMicrosoftSpy++で確認してもダイアログ内のButton単体を取得できません。)
C#、Win32 API、Office2013を使用して、書き込みパスワードが設定されているppt(pptx)ファイルを読み取り専用で開く方法をご教示いただけませんでしょうか。
確認した環境は以下です。(どちらとも上記の現象が発生します)
①OS:Win8.1
②OS:Windows Server 2012R2
回答
-
FindWindowExを使って、パスワード入力ウィンドウ内にあるEditコントロールは見つけられますでしょうか?
Editコントロールに対して、下記のようにEnterキーのコマンドを送ってみてはどうでしょうか?
EditコントロールのウィンドウハンドルをhEditとした場合、
SendMessage(hEdit, WM_KEYDOWN, VK_RETURN, 0); SendMessage(hEdit, WM_KEYUP, VK_RETURN, 0);
上記の方法でもOSやOfficeのバージョン、仕様が変わったとき動作しなくなることがあります。- 編集済み kenjinoteMVP 2016年12月21日 8:27
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月22日 0:23
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年1月26日 1:29
すべての返信
-
FindWindowExを使って、パスワード入力ウィンドウ内にあるEditコントロールは見つけられますでしょうか?
Editコントロールに対して、下記のようにEnterキーのコマンドを送ってみてはどうでしょうか?
EditコントロールのウィンドウハンドルをhEditとした場合、
SendMessage(hEdit, WM_KEYDOWN, VK_RETURN, 0); SendMessage(hEdit, WM_KEYUP, VK_RETURN, 0);
上記の方法でもOSやOfficeのバージョン、仕様が変わったとき動作しなくなることがあります。- 編集済み kenjinoteMVP 2016年12月21日 8:27
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月22日 0:23
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年1月26日 1:29
-
"Office 2013 NUIDialog" で英語圏も含めてぐぐると、海外の事例があたります。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/33c41ac0-61d2-405e-8b4f-0b4121d8beeb/how-to-press-buttons-on-nuidialog?forum=vcgeneralコードは C++ のものですが、UI Automation を使えば実現できるとあります。
C# の UI Automation の事例を調べてみてはどうでしょうか。- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月22日 0:23
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年1月26日 1:28
- 回答としてマークされていない m_nishitake 2017年9月12日 7:10
-
ppt(pptx)ファイル内の情報を読み取る
この内容次第ではありますが、Open XML SDK 2.5 for Officeが提供されていますので、Officeをインストールせずもちろん立ち上げることもなく、C#プログラム内でpptxファイルを解析することが可能です。
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2016年12月26日 1:23
- 回答としてマーク 栗下 望Microsoft employee, Moderator 2017年1月26日 1:29
- 回答としてマークされていない m_nishitake 2017年9月12日 7:09