不使用互操作/非托管代码监控打印后台打印

2023-11-22

背景:

我正在使用 .NET 4.0 用 C# 编写一个应用程序。它按一定顺序打印一堆文档。这些文档具有不同的类型,并且实际上是使用 ShellExecute 和“print”动词打印的。

为了确保顺序不会混乱,我想检查相关打印机的打印队列。我的主循环如下所示:

  1. 对文档调用“打印”操作
  2. 等待文档出现在打印队列中
  3. 重复直到完成

如何使用托管代码监控打印队列?

我发现了一些使用非托管调用执行类似操作的好例子(例如:http://blogs.msdn.com/b/martijnh/archive/2009/08/05/printmonitor-a-c-print-spooler-monitor.aspx)。另外,我知道如何查看 c:\windows\system32\spool... 下的假脱机文件,并以这种方式解决问题。

然而,这些解决方案都不是非常令人满意……由于我调用了大量非托管代码,我觉得我应该只用 C++ 编写应用程序。 (并且没有 .NET 依赖/开销。)

主要问题:真的没有办法仅使用托管调用来监视打印队列吗?

更一般的问题:我来自 java 世界,通常只在我想做一些操作系统特定的事情或需要与 MS 世界中的其他事物交互的事情时才使用 .NET 语言。 (例如 SSIS 组件。)

似乎每次我启动一个项目时,我都会陷入同样的​​混乱:对本机函数、COM 内容等的各种调用。

第二个问题:关于 .NET 理念或实现,我是否遗漏了什么? (我是否只是没有足够努力地寻找托管库来执行某些操作?对于需要执行 Windows 特定操作(例如操作打印队列)的任何操作,.NET 是否是错误的选择?)我明白(或者我认为我明白).NET 理论上应该是独立于操作系统的。但是大多数现代操作系统肯定都有打印机和打印队列之类的东西。 (因此,如果您有执行此类操作的通用调用,则可以在每个平台的框架版本上实现它们。)


主要问题:看一下打印队列 and 本地打印服务器类中的系统打印命名空间。

第二个问题:.NET 并不是为了独立于操作系统而编写的(没有 Mono),而是为了独立于 Windows 版本而编写的。虽然只处理托管对象和托管调用会很好,但我认为这是一个有点不切实际的期望。 Windows 公开的现有 C 和 COM 函数的绝对大小和数量使得包装一切这是一项艰巨的任务。虽然我确信微软拥有大量的开发人员,但我想说,考虑到相对容易使用的 COM 和 P/Invoke 支持,这样的事业的投资回报率相当低。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不使用互操作/非托管代码监控打印后台打印 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何在.NET Core上直接调用F#编译器?

    UPD 我想直接从 NET Core SDK 调用 F 编译器 即 fsc 我了解 dotnet build co 但当我只需要编译一个简单的问题时 即 fsc file fs 就足够的情况下 我不想涉及它们 我尝试在 NET Core S
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • Docker PHP 7.1 imagick

    Docker php 7 1 imagick pecl install imagick docker php ext enable imagick 软件包 pecl php net imagick 没有可用的版本 安装失败 错误 服务 应用
  • 通过 .NET 确定每个查询的 DocumentDB 请求费用

    我试图弄清楚在通过提供的 NET 客户端库执行 DocumentDB 查询请求时是否可以获得 请求费用 详细信息返回到底层 HTTP 标头 x ms request charge 中 我可以通过 Fiddler 等进行监控 但如果我可以直接
  • Python:pip 尝试安装到 /bin 目录

    我安装了 pythonbrew install python which pip usr local bin pip my PYTHONPATH shows usr local lib python2 7 site packages 但是
  • Symfony2 自定义存储库类

    我是 symfony2 的新手 我正在尝试创建自定义存储库类 但无法做到 这是我正在做的事情 我向实体类 手机 添加了注释 ORM Entity repositoryClass Maak DefaultBundle Entity Mobil
  • iOS16 Bug 键盘在关闭 SwiftUI 时破坏布局

    在 iOS16 中 工作表内部存在键盘的错误 当工作表关闭时键盘消失 没关系 但布局未更新 我只看到了关于同一问题的 1 个问题 想知道也许有人找到了临时解决方法 直到苹果不解决这个问题 重现代码 struct Test View Stat
  • 如何检查域名是否存在?

    不仅是 com 或 net 等简单的域名 还有 co uk fr gov rw 我真的应该做一个巨大的映射 tld 到相关的 whois 服务器 还是有更简单的方法 http php net manual en function check
  • 尝试查看项目属性时 Visual Studio 2008 中出现“未指定错误”

    当我将活动解决方案从 Win32 设置为 x64 时 我无法构建项目或查看属性 当我尝试构建我的项目时 它被跳过 当我尝试查看属性时 第一次尝试时没有任何反应 第二次 我收到一条错误消息 操作无法完成 未指定的错误 我正在运行 Visual
  • Int16 - .net 中的字节容量?

    为什么 short a 0 Console Write Marshal SizeOf a shows 2 但如果我看到 IL 代码 我会看到 1 IL 0000 ldc i4 0 2 IL 0001 stloc 0 3 IL 0002 ld
  • strftime 或仅 PHP 是否弃用了“美国/东部”、“美国/中部”和“美国/太平洋”?

    我有一个 shell 脚本 准确地说是 zsh 它使用 strftime I M p Z a b d EPOCHSECONDS 生成 当前时间 例如 中部标准时间 02 45 PM 3 月 1 日星期四 这需要能够显示几个不同的美国时区的时
  • 如何在 gdb 启动时加载 .gdbinit?

    这是一个看似微不足道的问题 但我找不到一个简单的方法来完成这个任务 我有我的 gdbinit文件定义在与 gdb exe 所在目录相同的目录中 即在我的编译器的 bin 目录中 但是 当我运行 gdb 时 我得到以下信息 GNU gdb G
  • 从实体框架返回自定义对象 并分配给对象数据源

    我需要一些有关问题的指导 我正在使用 Entity Framework 4 0 我有 DAL 和 BLL 并且绑定到页面上的 ObjectDataSource 我必须使用编写一个存储过程PIVOT和动态 SQL 以我想要的方式从多个实体返回
  • NETWORK_PROVIDER 的 LocationListener 已启用,但从未调用 onLocationChanged

    我正在开发一个应用程序 可以在服务中全天 6 和 6 分钟内获取手机的位置 它工作正常 但有时该方法OnLocationChanged网络提供商侦听器的停止被调用 我不知道为什么 由于某种原因 它停止被调用 但当我手动启用或禁用提供程序时
  • 使用 stringstream 浮动的字符串

    我在网上找到了这段代码作为模板 用于进行字符串到 float int double 转换 它只是在这里 所以我有一些可以参考的问题 我想让用户输入一个数字作为字符串 将其转换为浮点数 测试它是否成功 如果输入是 Q 则退出 或者如果不是 Q
  • 创建扩展方法来生成打开和关闭标签,例如 Html.BeginForm()

    我想知道是否可以创建一个具有与 Html BeginForm 类似的功能和行为的扩展方法 因为它会生成一个完整的 Html 标记 并且我可以在其中指定其内容 tags 例如 我可以有这样的视图 此功能在我尝试使用示例中生成的功能的上下文中非
  • 使用动态键在 Typescript 中动态创建对象,无需将类型扩展为 { [key: string]: T }

    动态对象键 无需扩展至 key string V 我正在尝试创建一个 Typescript 函数来生成一个具有动态键的对象 其名称在函数签名中提供 而返回类型不会扩展为 key string V 所以我想打电话 createObject t
  • 检测文件是否在批处理文件中打开

    假设我有一个用于执行长时间构建的批处理文件 最后它会创建一个 EXE 如果我忘记在开始构建之前关闭应用程序 则链接阶段会在无法重新创建 EXE 时失败 我想检查 EXE 是否在以下位置打开start构建的 我尝试将 EXE 文件重命名为自身
  • Python 与 Ruby 相比的限制:lambda

    我浏览了 WikiVS 的一些页面 我引用了这些页面 因为 Python 中的 lambda 仅限于表达式 不能 包含语句 我想知道这个限制的一个很好的例子 或更多 最好与 Ruby 语言相比 感谢您的回答 评论和反馈 我不认为你真的在问
  • 如何让 github 页面提供像 RFC5785 的 /.well-known/ 这样的点文件?

    我有一个从我的文档项目的 Github master 分支填充的文档网站 我想要https mydomain well known security txt提供以下文件tree master well known security txt
  • 在Java中设置图标图像

    我一直在到处搜索如何在 Java 中设置图标图像 但它总是以不起作用或给我错误 在这里 在我的主要方法中放置代码 public static void main String args Game game new Game This rig
  • 不使用互操作/非托管代码监控打印后台打印

    背景 我正在使用 NET 4 0 用 C 编写一个应用程序 它按一定顺序打印一堆文档 这些文档具有不同的类型 并且实际上是使用 ShellExecute 和 print 动词打印的 为了确保顺序不会混乱 我想检查相关打印机的打印队列 我的主