Tag: interop

如何确定Adobe PDF打印机的“Ne”端口?

如何检测打印机所在的端口(Ne01:,Ne02:,Ne99:等)? BigCorp的计算机(WinXP)安装了Adobe Acrobat(版本7.0 Pro),它提供了一个名为“Adobe PDF”的虚拟打印机。 如果在录制宏的同时将Excel(2003)工作簿打印为pdf,则打印机的全名为“Nexx上的Adobe PDF:”,其中xx是两位数….根据您尝试使用的计算机而不同 。 我已经使用Excel.Interop编写了一个C#控制台应用程序(我强烈反对其他任何人开始这条路走向地狱),这会打开一系列电子表格。 它在每个中运行一个宏,保存,打印为pdf,然后将pdf移动到共享驱动器上的报告文件夹。 我面临的问题是,每次安装Acrobat似乎都会为PDF打印机选择一个随机端口号…我无法弄清楚如何获得它。 到目前为止,我已经尝试过像这样使用Win32_Printer类 var searcher = new ManagementObjectSearcher( @”SELECT * FROM Win32_Printer” ); foreach ( ManagementObject printer in searcher.Get() ) { if ( Regex.IsMatch( printer[“Name”].ToString(), @”(adobe|pdf)”, RegexOptions.IgnoreCase ) ) { //printer[“Name”]; => “Adobe PDF” //printer[“PortName”] => “my documents/*.pdf” foreach ( PropertyData pd in printer.Properties ) { […]

原生C ++和C#互操作

所以我正在构建一个必然会使C ++工作的应用程序,但是MFC / ATL对我来说太麻烦了,所以我有一个很好的想法,就是用本机C ++中的所有“思考”代码和C#中所有漂亮的UI代码。 但问题是两者之间的互操作性。 在我对此过于沉迷之前,我想知道这是否是一个已解决的问题,并且有一个非常好的方法来做到这一点。 请注意,我不想在同一模块中混合使用逻辑和显示,因为它会产生恼人的高耦合。 这是我到目前为止所拥有的: 那么告诉我,它可以做得更好吗?

我何时应该明确指定StructLayout?

我正在摆弄从C#调用DLL,并且需要定义我自己的结构。 很多文章强制结构的顺序布局 [StructLayout(LayoutKind.Sequential)] struct Foo … 所以,我按照套件,我的程序工作。 现在,当我把线路拿出来时,它仍然可以工作。 我为什么需要它?

通过互操作打开文档时,如何使单词可见?

我想通过互操作打开一个word文档,并且word必须在进程中可见。它看起来相当直接,因为在word文档的open函数中有一个名为“visible”的参数。但是word在后台。我错过了吗? static void Main(string[] args) { Microsoft.Office.Interop.Word.Application word = null; word = new Microsoft.Office.Interop.Word.Application(); object inputFile = “c:\\test.docx”; object confirmConversions = false; object readOnly = true; object visible = true; object missing = Type.Missing; // Open the document… Microsoft.Office.Interop.Word.Document doc = null; doc = word.Documents.Open( ref inputFile, ref confirmConversions, ref readOnly, ref missing, ref missing, […]

使用Windows脚本宿主

我正在使用Windows脚本主机用于某种安装程序应用程序,我正在使用它在开始菜单中创建快捷方式。 当我切换到x64环境时出现此问题(win7 ultimate x64 + vs2010) 我添加了对Windows脚本宿主对象模型的引用(来自c:\ windows \ syswow64 \ wshom.ocx),它生成了Interop.IWshRuntimeLibrary dll。 我添加了’using IWshRuntimeLibrary;’ 到我的.cs文件,但是当我尝试创建时 WshShell sh = new WshShellClass(); 它引发了一个exception: 无法加载文件或程序集“Interop.IWshRuntimeLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。 尝试加载格式不正确的程序。 我假设我需要64位版本的wshom.ocx来实现这一点,但我不知道应该尝试什么。 或者我只是转储Windows Script的东西,但我需要另一种方法来从.net应用程序创建开始菜单快捷方式。

从C#调用任何Java方法

有没有办法使用JNI和C#代码创建一个调用任何给定Java方法的程序? 假设我有一个包含类层次结构的jar,我负责加载JVM和这些类,我可以编写一个C#程序,它可以动态接收java方法签名+参数值并调用java代码吗? 请尽量限制您对免费技术的回答(首选JNI解决方案)。

Windows搜索sql – 无法访问System.Search.QueryFocusedSummary

我正在尝试使用sql查询Windows Search 4.0。 我感兴趣的属性是: System.Search.QueryFocusedSummary 。 我正在尝试从SystemIndex读取此属性。 我收到“列不存在”错误消息。 我能够读取其他列,例如: System.Search.AutoSummary 。 我在Windows 7操作系统和Windows Search 4.0上使用Microsoft Windows Search 3.x SDK下载(Windows.Search.Interop.dll)。 我的查询是: SELECT TOP 25 System.QueryFocusedSummary From SystemIndex where CONTAINS(‘microsoft’) ORDER BY System.ItemDate DESC 如何使用System.Search.QueryFocusedSummary进行查询? 代码如下: using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using System.Security.Permissions; using System.Text; using Microsoft.Search.Interop; namespace QueryFocusedSummaryTest { […]

如何在C#中应用Word快速风格 – 不只是简单的格式化而是整个风格?

我承认,我对使用Interop库非常陌生,但人们总是给出的建议是,记录一个宏并查看vba代码。 问题是,宏没有准确记录我正在做的事情: 单击快速样式将其应用于当前选择 。 我的任务非常简单: 我需要将快速样式应用于段落( Microsoft.Office.Interop.Word.Paragraph ) 。 但是,使用set_style命令仅应用基本格式,并且段落保持原始快速样式选择( 正常 )。 使用Remou的方法虽然对我有用,但它看起来与我自己的代码非常相似,我无法使其工作,我认为这可能是我对对象模型的理解有点过时了。 public void AddParagraph(string text, string styleName = null) { Paragraph paragraph = _document.Content.Paragraphs.Add(); if (styleName != null) { paragraph.Range.set_Style(_document.Styles[styleName]); } paragraph.Range.Text = text; paragraph.Range.InsertParagraphAfter(); } 然后我用例如AddParagraph(“A title”, “Heading 1”);调用它AddParagraph(“A title”, “Heading 1”); ,但使用上面的包装器来构建我的文档的结果是,没有应用完整的样式,只有字体,颜色,大小和粗体/斜体。 我正在使用我自己的.dotx文件,我自己定义和命名的样式,但只是从Remou复制代码使用我自己的模板,所以我不认为这是问题,并使用该代码我无法弄清楚如何使用各自的样式附加多个段落。 任何人都可以指出我的方法有什么问题,或者至少我如何能够让Remou为我的要求提供答案? 🙂

有没有办法注册免费激活EXE COM组件

有没有办法激活COM组件,这是一个EXE COM应用程序,它还依赖于COM dll? 我想从.NET应用程序(VS 2005 / VS 2008)激活此COM组件。 调用的路径是C#application – >调用out-of-proc exe(这是通过COM)然后这个out-of-proc调用几个COM dll

P / invoke函数将指针指向struct

诸如CreateProcess之类的函数具有指向结构的指针。 在CI中,只传递NULL作为可选参数的指针,而不是在堆栈上创建虚拟结构对象并将指针传递给虚拟对象。 在C#中,我已将其声明为(p / invoke) [DllImport(“kernel32.dll”, CharSet = CharSet.Auto)] public static extern bool CreateProcess( string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandles, CreateProcessFlags dwProcessCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, ref PROCESS_INFORMATION lpProcessInformation); 但是,如果我尝试为lpProcessAttributes参数或lpThreadAttributes参数传递null , lpProcessAttributes出现编译器错误: 错误2参数3:无法从“”转换为“ref Debugging.Wrappers.SECURITY_ATTRIBUTES” 如何修改上面的函数签名,以便我可以为SECURITY_ATTRIBUTES参数传递null ,而不会出现此编译器错误? (如果我愿意,还能传递一个真正的结构?)