在64位Vista中获取默认打印机[英] Getting the default printer in 64-bit Vista

问题描述

你好,

我已使用下面的代码返回 32 位 WinXP 中的默认打印机
亲,但现在我运行的是 64 位 Vista Business,我收到了一个错误:

使用 System.Drawing.Printing;

使用 (PrintDocument objPrintDocument = new PrintDocument())
{
字符串 strDefaultPrinter =
objPrintDocument.PrinterSettings.PrinterName;
}

错误消息是:"未安装打印机."而这似乎来了
来自名为 HdevmodeInternal

的方法但是,我安装了几台打印机,默认打印机是一个
旧 HP LaserJet 5.

上面的代码不能在 64 位 Vista 上运行吗?有问题的应用是
为 x86 编译...

使用 WMI 返回默认打印机的名称会更好吗?

我已经尝试在 Google 和 MSDN 中找到解决方案,但没有太多
运气...

感谢您的任何帮助.
--
http://www.markrae.net

推荐答案

"Mark Rae"<ma**@markNOSPAMrae.net 在消息中写道
新闻:u5******************@TK2MSFTNGP04.phx.gbl...
你好,

我已使用下面的代码返回 32 位 WinXP 中的默认打印机
专业人士,但现在我正在运行 64 位 Vista Business 我收到一个错误:

使用 System.Drawing.Printing;

使用 (PrintDocument objPrintDocument = new PrintDocument())
{
字符串 strDefaultPrinter =
objPrintDocument.PrinterSettings.PrinterName;
}

错误消息是:"未安装打印机."而这似乎来了
来自一个名为 HdevmodeInternal

的方法但是,我安装了几台打印机,默认打印机是一个
旧版 HP LaserJet 5.

上面的代码不能在 64 位 Vista 上运行吗?有问题的应用是
为 x86 编译...

使用 WMI 返回默认打印机的名称会更好吗?

我已经尝试在 Google 和 MSDN 中找到解决方案,但没有太多
运气...

感谢您的任何帮助.
--
http://www.markrae.net


在 Vista 64 和 32 位上为我工作.如果你制作"Microsoft XPS
"会发生什么文档编写者"默认打印机?

威利.

"Willy Denoyette [MVP]"<wi*************@telenet.bewrote in message
新闻:%2****************@TK2MSFTNGP06.phx.gbl...
"马克·雷"<ma**@markNOSPAMrae.net 在消息中写道
新闻:u5******************@TK2MSFTNGP04.phx.gbl...
>嗨,

我已经使用下面的代码在 32 位 WinXP
Pro 中返回默认打印机,但现在我正在运行 64 位 Vista Business 我得到一个
错误:

using System.Drawing.Printing;

using (PrintDocument objPrintDocument = new PrintDocument())
{
字符串strDefaultPrinter =
objPrintDocument.PrinterSettings.PrinterName;
}

错误信息是:"没有安装打印机."这似乎
来自一个名为 HdevmodeInternal 的方法

但是,我安装了几台打印机,默认打印机是一个
旧的 HP LaserJet 5.

以上代码在 64 位 Vista 上不能运行吗?有问题的应用程序是
为 x86 编译的...

我最好使用 WMI 返回默认打印机的名称吗?

我已尝试在 Google 和 MSDN 中找到解决方案,但没有太多
运气...

感谢您提供任何帮助.
--
http://www.markrae.net

在 Vista 64 和 32 位上为我工作.如果您制作"Microsoft
"会发生什么XPS 文档编写器"默认打印机?
同样的事情...顺便说一句,它适用于我的 32 位 Vista...你试过了吗
它与在 64 位 Vista 上运行的 32 位应用程序...?

另外,当我尝试查询 objPrintDocument.PrinterSettings.PrinterName 时,它​​
返回"未设置默认打印机.",虽然它肯定是...

生成的 Exception 仍然没有 InnerException 的任何值,并且
<Exception>.TargetSite.Name 是"HdevmodeInternal";- 我什至找不到
在谷歌的任何地方!
--
http://www.markrae.net


"马克·雷"<ma**@markNOSPAMrae.net 在消息中写道
新闻:u4**************@TK2MSFTNGP04.phx.gbl...
"威利·德诺耶特 [MVP]"<wi*************@telenet.bewrote in message
新闻:%2****************@TK2MSFTNGP06.phx.gbl...
>"马克·雷"<ma**@markNOSPAMrae.net 在消息中写道
新闻:u5**************@TK2MSFTNGP04.phx.gbl...
>>嗨,

我已经使用下面的代码返回 32 位 WinXP 中的默认打印机
Pro,但现在我运行的是 64 位 Vista Business 我''我得到一个
错误:

using System.Drawing.Printing;

using (PrintDocument objPrintDocument = new PrintDocument())
{
string strDefaultPrinter =
objPrintDocument.PrinterSettings.PrinterName;
}

错误信息是:"没有安装打印机."这似乎
来自一个名为 HdevmodeInternal 的方法

但是,我安装了几台打印机,默认打印机是
旧的 HP LaserJet 5.

以上代码在 64 位 Vista 上不能运行吗?有问题的应用程序是
为 x86 编译的...

我最好使用 WMI 返回默认打印机的名称吗?

我已尝试在 Google 和 MSDN 中找到解决方案,但没有太多
运气...

感谢您提供任何帮助.
--
http://www.markrae.net

在 Vista 64 和 32 位上为我工作.如果您制作"Microsoft
XPS Document Writer"会发生什么?默认打印机?

同样的事情...顺便说一句,它适用于我的 32 位 Vista...你试过了吗
它与在 64 位 Vista 上运行的 32 位应用程序...?
是的,X86 和 X64 版本都适用于 64 位 Vista Ultimate.

请注意,我总是将应用程序清单添加到我的可执行文件
组件.如果您不向在
下运行的应用程序添加清单wow64,这个应用程序将获得注册表的虚拟化视图(部分
关闭)和文件系统(部分关闭).

为了防止虚拟化,您必须添加这样的清单:

<程序集 xmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0">
<assemblyIdentity 版本="1.0.0.0"
name="MyApplication.app"></assemblyIdentity>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<安全>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<请求的执行级别
level="asInvoker"></requestedExecutionLevel>
</requestedPrivileges>
</安全>
</信任信息>
</组装>

将上述内容保存在名为"MyApplication.manifest"的文件中,其中
"我的应用程序"是程序集的名称(不是绝对必需的任何
名称将作为清单文件名).
完成后,运行以下命令:
mt -manifest MyApplication.manifest -outputresource:MyApplication.exe;#1

mt.exe 是 VS2005 的一部分.

我不确定这是否会有所帮助,但值得一试.

威利.

本文地址:https://www.itbaoku.cn/post/1050550.html