Articles of ole

如何通过COM接口以编程方式激活OLE控件?

我有一个应用程序通过ActiveXembeddedbutton控件。 该button由第三方提供,实现了一系列的ActiveX接口(其中IOleInPlaceObject )。 我有一个对IUnknownbutton实现的引用。 我面临的问题是由对象提供的IOleWindow::GetWindow函数总是返回一个错误; 错误代码是0x80004005,这显然是一个常见的HRESULT值,意思是E_FAIL 。 不太具描述性。 对于什么是值得的,该对象还通过它的IDispatch实现公开hWnd属性; 查询成功,但财产的价值总是为零。 有一点谷歌search表明,我可能需要“激活”的OLE对象之前, hWnd属性产生一个有用的价值。 有谁知道如何做到这一点,有没有一个专用的COM接口来激活OLE对象? 有趣的是,button似乎有一个窗口句柄,如在Spy ++中可见的。 更新:我刚刚发现IQuickActivate这是由我正在处理的button控制,并可以用来'快速'(嗯…)激活一个项目。 然而,填补QACONTAINER结构似乎是一个相当痛苦的事情,所以我现在宁愿不这样做。

如何使用Python脚本编写一个OLE组件?

我想用Python来编写一个应用程序来宣传自己提供一个OLE组件。 我该如何开始? 我还不知道我需要调用什么方法来访问我将要访问的组件。 我应该使用win32com加载这些组件,然后开始按IPython中的“选项卡”?

VarToDateTime(VarDateFromStr)使用哪种date格式?

最近我最近遇到了date转换的问题。 我的应用程序运行的某些工作站不能正确地将string转换为date。 我跟踪到VarDateFromStr这个问题,似乎没有检查LOCALE_SSHORTDATE进行转换。 我想知道是否有人知道它检查转换。 还是不同的行为只链接到不同的DLL版本? GetLocaleStr(GetThreadLocale, LOCALE_SSHORTDATE, 'm/d/yy'); // returns 'dd-MM-yyyy' FormatDateTime('dd-MM-yyyy', VarToDateTime('05-11-2010')); //returns '11-05-2010' 编辑:我已经被告知,从“dd-MM-yyyy”更改短date格式(在控制面板中),然后回到“dd-MM-yyyy”解决了这个问题。 我仍然需要validation这一点。 编辑2:Kindda忘了提,这个问题只在WinXP SP3上得到确认。

在wxPython中拖放的OLE方式

我有在MS Windows上运行的wxPython应用程序,我希望它支持在其实例之间拖放(所以用户打开我的应用程序3次,并将数据从一个实例拖到另一个实例)。 wxPython中的简单拖放工作方式如下: 用户启动拖动 :源窗口在wx.DataObject()中打包必要的数据,创build新的wx.DropSource,设置其数据并调用dropSource.DoDragDrop() 用户将数据拖放到目标窗口上 :拖放目标调用库函数GetData(),它将实际数据传输到其wx.DataObject实例,最后 – dataObject.GetData()将实际数据解包。 我想有一些更复杂的拖放,这将允许用户select什么数据被拖动后,他下降。 我的梦想情景: 用户启动拖动 :只有一些指向源窗口的指针被打包(某些函数或对象)。 用户将数据拖放到目标窗口上 :显示尼斯对话框,询问用户select了哪种拖放模式(如拖动歌曲名称,歌曲名称和拖动的艺术家的艺术家名称或整个专辑)。 用户select拖放模式 :拖放目标在被拖动的数据对象上调用一些函数,然后从拖动源中检索数据并将其传送到放置目标。 我梦想中的情景在MS Windows中似乎是可行的,但是wxWidgets和wxPython的文档是相当复杂和令人怀疑的。 并不是所有的wx.DataObject类都在wxPython中可用(只有wx.PySimpleDataObject),所以我希望有人分享他的经验。 这样的行为可以在wxPython中实现,而不必直接在winAPI中编写它? 编辑:ToniRuža给出了一个工作拖放示例的答案,但这不完全是我的梦想的场景。 他的代码在数据丢失时处理数据( HandleDrop()显示popup式菜单),但在启动拖动时(在On_ElementDrag() )中准备数据。 在我的应用程序中,应该有三种不同的拖放模式,其中一些需要耗时的数据准备。 这就是为什么我想推迟数据检索到用户丢弃数据和select(潜在成本高昂)D&D模式的时刻。 而对于内存保护问题 – 我想使用OLE机制进行进程间通信,就像MS Office一样。 您可以复制Excel图表并将其粘贴到MS-Word,其行为就像一个图像(好,有点)。 因为它的工作原理,我相信它可以在winAPI中完成。 我只是不知道我是否可以在wxPython中编写它。

将多个Word文档窗口放在同一个父窗口中

这个插件添加到Microsoft Word的“文档选项卡”,我不知道它是如何完成的? 据我们所知,根据Word的“对象模型”API, 每个Word文档都与一个独立的Word窗口相关联,该插件如何将多个Word文档窗口放到同一个父窗口中并使用制表符来切换它们? 附上这个截图来说明这个插件是如何工作的:

使用StgOpenStorage打开OLE组合文档只读

我正在使用XP下的StgOpenStorage API来读取一个OLE复合文档,但我找不到正确的标志混合告诉Windows,我只需要读取文件,而不阻止访问到任何其他进程… 现在我正在使用STGM_READ | STGM_EXCLUSIVE STGM_READ | STGM_EXCLUSIVE但很明显,如果在同一时间,我尝试从另一个应用程序打开文件,它抱怨拒绝访问..所以我试着用STGM_READ | STGM_SHARE_DENY_NONE STGM_READ | STGM_SHARE_DENY_NONE但它抱怨无效的标志.. 有没有办法做到这一点? 我走错路了吗? 提前致谢! (我通过pythoncom从Python调用API,如果它是相关的)

如何在没有注册ocx的情况下将具有ocx依赖性的实用程序部署到testing机器上?

我有一个testing工具,依赖于我的开发机器上安装/注册的ocx文件。 我们希望在testing机器上运行这个工具,而不用任何不必要的文件污染机器。 目标机器软件除外。 在networking驱动器上运行该工具或从复制到testing机器的独立目录运行该工具将是理想的。 但是,在testing机器上注册ocx是不可能的。 将该ocx文件放在与exe相同的目录不起作用。 无论它仍然给我这个错误 – “应用程序启动失败,因为应用程序configuration不正确,重新安装应用程序可能会解决问题。 我还有什么可以尝试? 仅供参考,我正在使用Visual Studio 2008。