我有一个 ActiveX。
ActiveX 意味着:
- IE浏览器
- 本机二进制代码
- 从 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 中保存的临时文件的位置调用。执行此操作时,保护模式的用户代理会将文件从临时位置复制到用户选择的位置。