在将包对象(XML)读入ADODB流时VBA阻止键盘输入?

我正在开发一个应用程序,它打开并读取以前嵌入PowerPoint演示文稿或Word文档中的 XML文档.为了读取这个对象(xmlFile as Object),我必须这样做:

xmlFile.OLEFormat.DoVerb 1

这将打开包对象,我有另一个子例程,它获取Notepad.exe的打开实例,并将其内容读入ADODB流.

Google文档中提供了此过程的示例:

XML_Test.pptm.

在此过程中,Notepad.exe会在几秒钟内获得焦点,无意中击键可能会导致意外结果或读取XML数据时出错.

我正在寻找两件事之一:

>这是一种防止用户在执行此操作时无意中输入(通过键盘/鼠标/等)的方法.最好不要像下面的MouseKeyboardTest子程序那样控制用户机器.要么,
>将XML数据提取到字符串变量的更好方法.

对于#1:这是我找到的功能,我对它的使用持怀疑态度.我担心对用户系统进行这种控制. ##我可以使用其他任何方法吗?##

Private Declare Function BlockInput Lib "USER32.dll" (ByVal fBlockIt As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub MouseKeyboardTest() 'both keyboard and mouse blocked

    BlockInput True ' Turns off Keyboard and Mouse
'   Routine goes here
    Sleep 5000 ' Optional coding
    BlockInput False ' Turns on Keyboard and Mouse

End Sub

对于#2:一些背景,但问题似乎是无法使用除DoVerb 1之外的任何方法可靠地提取嵌入对象.因为我正在处理应用程序(记事本)中未保存的文档,这对我的VBA技能免疫,这似乎是唯一的方法.完整的背景,在这里:

Extracting an OLEObject (XML Document) from PowerPoint VBA

我的理解是,您可以控制XML文件如何嵌入到PowerPoint演示文稿中.在这里,我不太明白为什么你选择将所需的数据作为嵌入对象的内容.

可以肯定的是,获取这些内容的任务不是小菜一碟.实际上,只要没有(简单甚至是中等难度)方法来调用QueryInterface并使用来自VBA的IPersist *接口,只有一种方法可以获取嵌入对象的内容.方法涉及以下步骤:

>激活嵌入的对象.你使用了OLEFormat.DoVerb 1.更好的方法是调用OLEFormat.Activate,但这与您的特定问题无关.
>使用嵌入对象的编程模型执行有用的操作,如获取内容,保存或暴露的任何内容. Notepad.exe没有公开这样的编程模型,你使用WinAPI这是最好的选择.

不幸的是,您当前的方法至少有两个缺陷:

>您在问题中确定的那个(激活notepad.exe导致用户干扰的可能性).
>如果用户使用默认程序打开notepad.exe以外的.txt文件,则您的方法注定失败.

如果您确实可以控制嵌入对象的创建方式,那么更好的方法是将XML数据存储在Shape对象的某些属性中.我会使用Shape.AlternativeText(非常简单易用;如果你将.pptm导出为HTML或者有一些不同的场景,其中AlternativeText很重要)或者Shape.Tags(这个可能是对语言最正确的任务).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇