私は ActiveX を持っています。
ActiveX の意味:
- インターネットエクスプローラ
- ネイティブ バイナリ コード
- dll (.ocx) から実行
- 保護モードで
ユーザーはコンテンツを保存したいと考えています。[名前を付けて保存] ダイアログを表示して、指定した場所に保存したいと思います。
ActiveX をホストしているプロセスが低整合性レベルで実行されているため、ユーザーが要求した場所にコードを保存できません。
ActiveX をホストしているプロセスが Internet Explorer の保護モードで実行されているため、ユーザーが要求した場所にコードを保存できません。
代わりに、ファイルはユーザーが要求していない場所にサイレントに保存されます。
代わりに、ファイルはエンド ユーザーが見つけられない場所に静かに保存されます。
これを処理する方法の提案はありますか?
ボーナスおしゃべり
ユーザーはハード ドライブに何を保存しようとしていますか? 質問には関係ありません。しかしふり:
- 数百メガバイトの 3D CAD メッシュです
- これは GIS 画像のダンプです
- それはPDFです
- それはPNGです
- それはテキストファイルです
追加資料
Internet Explorer の保護モード APIでは、アドインが保存されたダイアログを表示できます。
IEShowSaveFileDialog(this.Handle, "Eden.3ds",
GetUserDocumentsFolder(), null,
"3D Studio File|*.3ds|GIS Imagery|*.kvm|Adobe Acrobat File|*.pdf|All Files|*.*|"
null, 0,
OFN_ENABLESIZING | OFN_PATHMUSTEXIST,
ref destinationPath, ref stateCookie);
次に、提供された保存用のCookieを使用してファイルを保存します。
IESaveFile(stateCookie, sourcefilename);
どこsourcefilename
かに保存できたファイルはどこにありますか(これは別の質問です)。
ボーナスリーディング
保護モードの Internet Explorer を理解して使用する
一部の拡張機能では、ユーザーまたはアプリケーションが後でファイルを見つけられるように、ファイルを特定の場所に保存する必要があります。次の手順は、整合性の低い場所以外にファイルを保存する方法を示しています。
%userprofile%\AppData\LocalLow にファイルの一時バージョンを作成します。ファイルが正常に保存されたら、忘れずに一時ファイルを削除してください。
ユーザーのプロファイル フォルダーの場所を指定して呼び出し
IEShowSaveFileDialog
、ファイルを別の場所に保存するようユーザーに促します。ユーザーが [名前を付けて保存] ダイアログを受け入れると、IEShowSaveFileDialogは選択された保存先フォルダーを返します。
IESaveFile
手順 1 で保存した一時ファイルの場所を指定して呼び出します。これを行うと、保護モードのユーザー ブローカーはファイルを一時的な場所からユーザーが選択した場所にコピーします。