.NET的OLE容器
我正在研究一个项目,该项目需要我加载OLE对象并将其渲染到.NET WINFORM应用程序(C#)中.与VB6 .NET不同,没有内置的OLE容器,建议的方法是使用支持显示ActiveX内容的WebBrowser控件.我遇到的问题是所讨论的OLE对象的提供商没有可用的ActiveX控件. 简单地说,是否有任何方法可以将OLE对象加载到Winform上?还是我需要编写一个加载OLE对象的ActiveX控件?如果后者,有人有一个例子,还是建议阅读材料? 欢呼, marc. 解决方案 您可以使用我的控件 ole容器替代.net 其他解决方案 我制作了一个简单的用户控件,可为VB6 OLE容器控件提供替换./2012/01/23/quick-replacement-for-the-vb6-ole-container-container-control-in-net.aspx" rel =" nofollow"> http://blogs.artinsoft.ne
0 2023-11-29
编程技术问答社区
Excel VBA创建一个嵌入式WebBrowser并使用它
嗨,我正在尝试在电子表格中动态创建Web浏览器,然后使用它,但是WebBrowser函数似乎无法正常工作 这是我创建WebBrowser 的方式 Set myWebBrowser = Sheets("test").OLEObjects.Add(ClassType:="Shell.Explorer.2", Link:=False, DisplayAsIcon:=False, left:=147, top:=60.75, width:=141, height:=96) 这将起作用 myWebBrowser.top = 10 但这会给我一个错误 myWebBrowser.Navigate ("about:blank") 关于我该怎么做的任何想法谢谢你 更新: 这也将不起作用并给出错误: myWebBrowser.Object.Document.body.Scroll = "no" myWebBrowser.Object.Silent = Tr
0 2023-11-29
编程技术问答社区
由waitr的execute_script引起的OLE错误代码80020101
我只是尝试了:$browser.execute_script("alert(\"aaa\")") 然后我在下面收到错误: h:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.2.0/lib/watir-classic/page-container.rb:46:in `method_missing': (in OLE method `execScript': ) (WIN32OLERuntimeError) OLE error code:80020101 in Could not complete the operation due to error 80020101.HRESULT error code:0x80020009 Exception occurred. from h:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.2.0/li
0 2023-11-27
编程技术问答社区
当文档通过OLE嵌入时,Word插件保持Word进程的活力
我已经构建了一个单词加载程序,该字母必须在用户关闭文档时必须执行任务.我为Application对象的DocumentBeforeClose事件安装了一个事件处理程序.问题在于,事件处理程序似乎可以防止当我将现有Word文档嵌入Excel Workbook中时退出. 当我通过功能区插入>对象>"从文件创建"中嵌入文档并选择一个Word Document时,就会发生问题.然后将文档加载到工作簿中.当我关闭Excel WinWord.exe时仍在运行并且窗口是不可见的. 当我禁用加载项时,winword.exe仅运行大约一秒钟以嵌入文档.这也是我想要的加载项的行为. 为了缩小问题,我创建了一个简单的VSTO单词加载项进行测试.这些是我对Visual Studio生成的类所做的更改: private void ThisAddIn_Startup(object sender, System.EventArgs e) { Applicatio
0 2023-11-25
编程技术问答社区
如何在Visual Studio 2019中从外部DTE检索IVSDEBUGGER以进行自动化
我正在尝试为Visual Studio 2019编写VSIX,该VSIX控制Visual Studio IDE的多个实例.我们正在研究一个网络项目,该项目需要一些自动化来对多个用户进行测试.过去,我会在外部工具中使用DTE,但我的理解是,从VS2017开始,COM GUID不再在全球注册,因此在IDE中进行IDE是唯一的方法. 无论如何,我正在尝试获取IVSDEBUGGER,以便我可以在调试器中跟踪事件.但是,我没有运气.我可以得到ivsdebugger2、3、4、5,但不能得到ivsdebugger.这是我正在做的一般流程: void CaptureDebugger() { DTE dte = GetDTE(GetRemoteProcessID()); ServiceProvider sp = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)dte);
0 2023-11-25
编程技术问答社区
IDispatch为CommandBarButton.Style返回DISP_E_UNKNOWNNAME。
我有一个Visual Studio加载项,其中包含C ++中实现的脚本引擎. 加载项只能使用IDispatch接口与Visual Studio进行通信. 我正在将其从VS 2005升级到VS2010. 加载项使一系列IDispatch::Invoke()呼叫等同于此视觉基本: control = commandBar.Controls.Add(MsoControlType.msoControlButton) control.Caption = "My button" control.FaceId = 59 在VS 2005中,这曾经起作用.,但在VS 2010中却没有. GetIDsOfNames()返回DISP_E_UNKNOWNNAME" faceid". 请注意,"标题"(成功)是CommandBarControl的属性,而" faceid"(失败)是CommandBarButton子类的属性.按钮IDispatch*的className是CommandBar
0 2023-11-23
编程技术问答社区
为什么我的COM工厂在程序有效期内从未被释放?
我有一个本机C ++ ATL-proc内COM服务器.单独的测试程序 调用CoInitialize(), 调用CoCreateInstance(),然后 在指针上调用Release() 然后调用CoUnitialize()并退出. 如果我在Visual C ++调试器下运行测试程序,则调试CRT报告单个内存泄漏,并且每次分配编号相同. 我使用分配挂钩和发现未返回堆的对象是类工厂对象. 因此,基本上发生以下情况: 程序调用CoCreateInstance() com内部调用DllGetClassObject() ATL实例化工厂并将所有权传递给呼叫者(com内部) 然后从未发布过工厂 - 我看不到班级工厂Release()的电话. 发生了什么事?这是com运行时的缺陷吗? 解决方案 事实证明这是ATL实现的问题. 服务器使用全局CComModule类实例.当称为CComModule::DllClassObject()时,它会
0 2023-11-20
编程技术问答社区
在最佳时间内从一个_变量_t中获取一个char*。
这是我想加快的代码.它从ADO RecordSet中获得了一个值,并将其转换为char*.但这很慢.我可以跳过_bstr_t的创建? _variant_t var = pRs->Fields->GetItem(i)->GetValue(); if (V_VT(&var) == VT_BSTR) { char* p = (const char*) (_bstr_t) var; 解决方案 BSTR的前4个字节包含长度.如果unicode或每个字符,则可以循环并获得其他所有字符,如果多键.某种模仿或其他方法也可以起作用. iirc,这可以比W2A或铸造(LPCSTR)(_bstr_t) 更快 其他解决方案 您的问题(除了_bstr_t内的内存副本的可能性外)是您将Unicode BSTR转换为ANSI CHAR*. 您可以使用在堆栈上
0 2023-11-20
编程技术问答社区
打开的CreateOleObject工作簿不会运行包含Application.Run "Solver.xlam!... "的宏,导致错误400
这个问题与我看到的上一篇文章有​​关系(不是我的问题),该帖子已关闭: 通过delphi ,但我相信我已经将我的问题调试到了更一般的OLE/VBA问题(以下更多).我可以在Delphi和VBS中复制. 我的delphi代码类似于那里的内容 - 我的代码是: uses ComObj, ActiveX; // and a long list of others not relevant var Excel : OleVariant; WkSheet : OleVariant; ... begin ... CoInitialize(nil); // Open Spreadsheet Excel := CreateOleObject('Excel.Application'); Excel.Workbooks.Open('c:\Local Data\filename.xlsm'); Excel.Visibl
0 2023-11-17
编程技术问答社区
如何使用PowerShell来访问第三方OLE DLL的方法和属性?
我正在尝试编写一个powershell脚本,该脚本可以访问第三方ole dll的方法和属性. 软件供应商在VBScript中提供了一个工作示例,以达到相同的结果.以下是代码的摘录: Set objOLE = CreateObject("NETIQOLE.APPMANAGER") objOLE.Logon strInstance, strRepository, strUserID, strPwd ... 但是,当我尝试在PowerShell中进行编码如下: $objOLE = New-Object -ComObject "NETIQOLE.APPMANAGER" $objOLE | Get-Member 我在下面输出了,没有看到任何相关方法或属性. TypeName: System.__ComObject Name MemberType Definition
0 2023-11-17
编程技术问答社区
从Ruby或VBS通过OLE调用时,Word Document.SaveAs忽略了编码。
我有一个脚本,vbs或ruby,可以将Word文档保存为"过滤HTML",但编码参数被忽略. HTML文件始终在Windows-1252中编码.我在Windows 7 SP1上使用Word 2007 SP3. Ruby示例: require 'win32ole' word = WIN32OLE.new('Word.Application') word.visible = false word_document = word.documents.open('C:\whatever.doc') word_document.saveas({'FileName' => 'C:\whatever.html', 'FileFormat' => 10, 'Encoding' => 65001}) word_document.close() word.quit VBS示例: Option Explicit Dim MyWord Dim MyDoc Set MyWord = Crea
2 2023-11-17
编程技术问答社区
为什么这个C# COM类可以从VBScript使用,而不是JScript?
考虑下面给出的C#中的自动兼容COM库.它遵循了一个常见的com模式,即具有可见的工厂镜泡沫状实现iCreatefoos,该小肠可创建类型的对象.小伙子是类型库中的仅 coclass. (工厂模式对于COM特别有用,因为它不允许参数化的构造函数). 在下面的代码中,我发现我无法从 jscript 访问返回的ifoo接口使其在类型库中显示为镜片). 没有这样的问题从vbscript . 也就是说,我可以运行此vbscript: set ff = CreateObject("jstest.FooFactory") set foo = ff.CreateFoo(0) foo.Foo 但是,此在功能上相同 jscript失败,而错误" c:\ temp \ jstest \ jstest \ jstest.js(4,1)microsoft jscript jscript运行时错误:'foo'是无效的": var ff = new ActiveXObject("jste
0 2023-11-17
编程技术问答社区
VBScript和多级OLE?
我制作了一个vbscript来针对某些计算机并在上面进行WMI查询,而我的老板希望将这些数据放入文档中.问题在于,该文档是一个Microsoft Word文档,其中包含嵌入式Excel对象.现在,我已经以任何方式在Google上进行了广泛的搜索,以靶向和操纵Ole内部的对象并对象,但我似乎无处可寻. 所以我对您的问题是,如果有人有一些代码,我可以查看或可能是教程,甚至有可能告诉我是否可能? 解决方案 基于图表是嵌入式excel对象的一些笔记,如最初所述. ''http://msdn.microsoft.com/en-us/library/aa213725(office.11).aspx ''http://msdn.microsoft.com/en-us/library/aa174298(office.11).aspx Dim wd ''As Word.Applicatio Dim shs ''As InlineShapes Dim objCh
2 2023-11-17
编程技术问答社区
在Microsoft Office中提取OLE对象数据,无需OLE应用程序
是否可以使用VBA/VSTO在Microsoft Office中提取嵌入式OLE对象的内容?我说的是无法创建OLE对象的应用程序的情况.在这种情况下,某种转换器应用程序可以使用原始数据. 例如,在Excel中可以通过ActiveSheet.Shapes(x).OLEFormat访问对象,但我尚未找到一种检索对象的原始数据的方法. 一种方法是打开本机文件(Office打开XML/复合文件)并从那里提取数据.但是也许有更简单的方法? 解决方案 将OLEObject复制到剪贴板,然后从剪贴板上获取它,例如.在VSTO中这样的东西: Dim ole as OLEObject ... ole.Copy ... Clipboard.GetData("Embedded Object") 在VBA中,我刚刚通过Shell打开一个文件夹,然后使用SendKeys粘贴. ole.copy Shell "explorer.exe " & sFolderName, vbNor
0 2023-11-16
编程技术问答社区
VBA防止在包对象(XML)被读入ADODB流时的键盘输入?
我正在开发一个应用程序,该应用程序打开并读取先前嵌入PowerPoint演示文稿或Word文档的XML文档.为了读取此对象(xmlFile as Object),我必须做: xmlFile.OLEFormat.DoVerb 1 这打开了包装对象,我还有另一个子例程,该子例程获得了Notepad.exe的开放实例,并将其内容读取到AdoDB流中. 该过程的一个示例可在Google文档上获得: xml_test.pptes.pptm 在此过程中,有几秒钟的窗口,notepad.exe获得焦点,而无意的击键可能会导致不希望的结果或阅读XML数据的错误. 我正在寻找两件事之一: 在执行此操作时,可以防止用户无意中输入(通过键盘/鼠标/等)的方法.最好是无法控制用户的机器,例如下面的MouseKeyboardTest子例程.或, 将XML数据提取到字符串变量中的更好方法. 对于#1:这是我发现的功能,我对使用的态度.我对对用户系统的这种控制感到谨慎.
2 2023-11-15
编程技术问答社区
保存后在 "我的文档 "中创建了Excel插件的副本。
我有一个应用程序(在IBM注释中运行,使用Lotusscript等)通过OLE自动化创建一个新的Excel对象.在我的应用程序中,我创建了一个新的工作簿并将其保存到临时文件夹中(我将其保存为带有宏观宏的Excel工作表 - > type 52),以便重新启动文件为STH.这样: tmp_abc1234.xlsx 然后,我以编程方式打开Excel中的文件.我有一个excel addin(文件名是" teamoffice.xlam",其中一些宏位于某些宏位置,我将触发在"自定义保存action"按钮中.在此保存方法中,我还调用保存功能: Call ActiveWorkbook.Save Call ThisWorkbook.Save 出于某种原因,Excel在"我的文档"文件夹中创建了一个名为" Teamoffice.xlsm"的文件.该文件本身不能在excel("错误的文件格式错误")中打开 - 当然,它是一个addin! 如果我的应用程序中只有一个Excel文档,
0 2023-11-15
编程技术问答社区
如何关闭由邮件合并启动的Excel实例
如何关闭excel实例由邮件合并 此代码在发射器内部运行,无法通过DDE ?? 访问Excel 'For i = 1 To Workbooks.Count ' MsgBox ("here" + Workbooks(i).Name) 'If (Workbooks(i).Name ActiveWorkbook.Name) Then 'Workbooks(i).Close 'End If 'Next i 解决方案 您可以像这样杀死Excel过程: .dreamincode.net/code/snippet1543.htm ) //Namespaces needed using System.Diagnostics; public bool FindAndKillProcess(string name) { //here we're going to get a list of all running processes on //the com
0 2023-11-15
编程技术问答社区
如何处理 "Microsoft Excel正在等待另一个应用程序完成OLE操作 "的问题
使用Excel自动化其他MS-office应用程序时,我经常得到只有的提示,说Microsoft Excel is waiting for another application to complete an OLE action. 这仅在自动化冗长的任务时才发生. 我该如何以适当的方式处理? 最近的两个示例(我重新指定代码不太重要): 用Access.Application创建一个ACCDB数据库,并通过在大量数据上运行相当复杂的SQL-queries来填充它. Public Function createDB(pathDB As String, pathSQL As String) As String Dim dbs As DAO.Database Dim sql As String Dim statement As Variant, file As Variant Dim sErr As String, iErr A
32 2023-11-15
编程技术问答社区
保存为嵌入另一个Excel文件的Excel文件
我想使用VBA管理一个嵌入在另一个Excel文件中的Excel文件.我可以通过.docx文档找到许多结果,但是我坚持使用.xlsx One. 我的最后一次尝试是使用OLE对象,但仍挂在" SaveAs"行(错误1004). 这是奇怪的部分:当我开始调试时,或者如果我使用F8逐步运行程序,它确实运行,但没有保存文件... 我为此示例称我的OleObject为"测试": Sub testOLE() mPath = ActiveWorkbook.Path For Each obj In Worksheets(1).OLEObjects If obj.Name = "TEST" Then obj.Verb obj.Object.Activate obj.Object.SaveAs mPath & "TEST_success.xlsx" obj.Object.Close End If i = i + 1 Next End Sub 我不明白如何将OleObject
2 2023-11-15
编程技术问答社区
处理在运行时创建的OLEObject CommandButtons的事件
现在,我一直在为这个问题而苦苦挣扎...我想做一些非常简单的事情.我想在运行时创建多个命令button,然后使用一个过程处理这些命令buttons的事件.因此,我已经建立了一个"伴随"类来处理自动化,但是我的代码不起作用.当我运行test()时,创建了命令button,但是当我单击它...没有消息框响应...我找不到错误..请任何帮助都很好! class ctest Public WithEvents Button As MSForms.CommandButton Public Sub Button_Click() s = MsgBox("Hello", vbOKOnly) End Sub 模块1 Public TestCollection As Collection Sub Test() Set TestCollection = New Collection Dim Btn As CommandButton Dim OLEBtnObj As cTest Se
0 2023-11-15
编程技术问答社区