在将包对象(XML)读入ADODB流时VBA阻止键盘输入?
我正在开发一个应用程序,它打开并读取以前嵌入PowerPoint演示文稿或Word文档中的
XML文档.为了读取这个对象(xmlFile as Object),我必须这样做:
xmlFile.OLEFormat.DoVerb 1 这将打开包对象,我有另一个子例程,它获取Notepad.exe的打开实例,并将其内容读入ADODB流. Google文档中提供了此过程的示例: XML_Test.pptm. 在此过程中,Notepad.exe会在几秒钟内获得焦点,无意中击键可能会导致意外结果或读取XML数据时出错. 我正在寻找两件事之一: >这是一种防止用户在执行此操作时无意中输入(通过键盘/鼠标/等)的方法.最好不要像下面的MouseKeyboardTest子程序那样控制用户机器.要么, 对于#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导致用户干扰的可能性). 如果您确实可以控制嵌入对象的创建方式,那么更好的方法是将XML数据存储在Shape对象的某些属性中.我会使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |