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

查看:49
本文介绍了获得64位Vista中的默认打印机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




我使用下面的代码返回32位WinXP中的默认打印机

Pro,但现在我正在运行64 -bit Vista Business我收到一个错误:


使用System.Drawing.Printing;


使用(PrintDocument objPrintDocument = new PrintDocument ())

{

string strDefaultPrinter =

objPrintDocument.PrinterSettings.PrinterName;

}


错误消息是:未安装打印机。这似乎来自一个名为HdevmodeInternal的方法


但是,我安装了几台打印机,默认打印机是

旧HP LaserJet 5.

上述代码是否不适用于64位Vista?有问题的应用程序是为x86编译的
...


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


我试图在谷歌和MSDN上找到一个解决方案,但是没有多少运气好吗?


感激不尽的任何帮助。

-
http ://www.markrae.net

解决方案

" Mark Rae" < ma ** @ markNOSPAMrae.netwrote in message

news:u5 ************** @ TK2MSFTNGP04.phx.gbl ...
< blockquote class =post_quotes>



我使用下面的代码返回32位WinXP中的默认打印机

Pro ,但现在我正在运行64位Vista Business我收到一个错误:


使用System.Drawing.Printing;


使用(PrintDocument objPrintDocument = new PrintDocument())

{

string strDefaultPrinter =

objPrintDocument.PrinterSettings.PrinterName;

}


错误消息是:未安装打印机。这似乎来自一个名为HdevmodeInternal的方法


但是,我安装了几台打印机,默认打印机是

旧HP LaserJet 5.

上述代码是否不适用于64位Vista?有问题的应用程序是为x86编译的
...


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


我试图在谷歌和MSDN上找到一个解决方案,但是没有多少运气好吗?


感激不尽的任何帮助。


-
http://www.markrae.net




适用于Vista 64和32位。如果您制作Microsoft XPS

Document Writer会发生什么?默认打印机?


Willy。


" Willy Denoyette [MVP]" < wi ************* @ telenet.bewrote in message

新闻:%2 **************** @ TK2MSFTNGP06.phx.gbl ...


" Mark Rae" < ma ** @ markNOSPAMrae.netwrote in message

news:u5 ************** @ TK2MSFTNGP04.phx.gbl ...
< blockquote class =post_quotes>
>

我使用下面的代码返回32位WinXP
Pro中的默认打印机,但现在我已经运行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 Document Writer会发生什么?默认打印机?



同样的事情......顺便提一下,它适用于我在32位Vista上...你有没有试过

它带有32在64位Vista上运行的应用程序...?


此外,当我尝试查询objPrintDocument.PrinterSettings.PrinterName时,它会返回b $ b。默认打印机没有设置。,虽然肯定是......


生成的Exception仍然没有InnerException的任何值,并且

< Exception> .TargetSite.Name是HdevmodeInternal。 - 我甚至无法在Google的任何地方找到



-
http://www.markrae.net


" Mark Rae" < ma ** @ markNOSPAMrae.netwrote in message

news:u4 ************** @ TK2MSFTNGP04.phx.gbl ...
< blockquote class =post_quotes>
" Willy Denoyette [MVP]" < wi ************* @ telenet.bewrote in message

新闻:%2 **************** @ TK2MSFTNGP06.phx.gbl ...


>" Mark Rae" < ma ** @ markNOSPAMrae.net写信息
新闻:u5 ************** @ TK2MSFTNGP04.phx.gbl ...


>>

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

使用System.Drawing.Printing;

使用(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上...你有没有尝试

它带有32在64位Vista上运行的应用程序应用程序......?



是的,X86和X64版本都适用于64位Vista Ultimate。


请注意,我总是将应用程序清单添加到我的可执行文件

程序集中。如果您没有向运行在

wow64下的应用程序添加清单,则此应用程序将获得注册表的虚拟化视图(部分

off)和文件系统(部分关闭)。


为了防止虚拟化,您必须添加如下清单:


<?xml version =" 1.0"编码= QUOT; UTF-8英寸standalone =" yes"?>

< assembly xmlns =" urn:schemas-microsoft-com:asm.v1" manifestVersion =" 1.0">

< assemblyIdentity version =" 1.0.0.0"

name =" MyApplication.app">< / assemblyIdentity>

< trustInfo xmlns =" urn:schemas-microsoft-com:asm.v2">

< security>

< requestedPrivileges xmlns =" urn:schemas-microsoft-com:asm.v3">

< requestedExecutionLevel

level =" asInvoker">< ; / requestedExecutionLevel>

< / requestedPrivileges>

< / security>

< / trustInfo>

< / assembly>

将上述内容保存在名为MyApplication.manifest的文件中,其中

" MyApplication"是程序集的名称(不是绝对必需的任何

名称将作为清单文件名)。

完成后,运行以下命令:

mt -manifest MyApplication.manifest -outputresource:MyApplication.exe;#1


mt.exe是VS2005的一部分。


我'我不确定这会有什么帮助,但值得一试。


威利。


Hi,

I have used the code below to return the default printer in 32-bit WinXP
Pro, but now that I am running 64-bit Vista Business I''m getting an error:

using System.Drawing.Printing;

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

The error message is: "No printers are installed." and which seems to come
from a method called HdevmodeInternal

However, I have several printers installed, and the default printer is an
old HP LaserJet 5.

Does the above code not work on 64-bit Vista? The app in question is
compiled for x86...

Would I be better off using WMI to return the name of the default printer?

I''ve tried to find a solution in Google and MSDN, but haven''t had much
luck...

Any assistance gratefully received.
--
http://www.markrae.net

解决方案

"Mark Rae" <ma**@markNOSPAMrae.netwrote in message
news:u5**************@TK2MSFTNGP04.phx.gbl...

Hi,

I have used the code below to return the default printer in 32-bit WinXP
Pro, but now that I am running 64-bit Vista Business I''m getting an error:

using System.Drawing.Printing;

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

The error message is: "No printers are installed." and which seems to come
from a method called HdevmodeInternal

However, I have several printers installed, and the default printer is an
old HP LaserJet 5.

Does the above code not work on 64-bit Vista? The app in question is
compiled for x86...

Would I be better off using WMI to return the name of the default printer?

I''ve tried to find a solution in Google and MSDN, but haven''t had much
luck...

Any assistance gratefully received.
--
http://www.markrae.net



Works for me on Vista 64 and 32 bit. What happens if you make "Microsoft XPS
Document Writer" the default printer?

Willy.


"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:%2****************@TK2MSFTNGP06.phx.gbl...

"Mark Rae" <ma**@markNOSPAMrae.netwrote in message
news:u5**************@TK2MSFTNGP04.phx.gbl...

>Hi,

I have used the code below to return the default printer in 32-bit WinXP
Pro, but now that I am running 64-bit Vista Business I''m getting an
error:

using System.Drawing.Printing;

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

The error message is: "No printers are installed." and which seems to
come from a method called HdevmodeInternal

However, I have several printers installed, and the default printer is an
old HP LaserJet 5.

Does the above code not work on 64-bit Vista? The app in question is
compiled for x86...

Would I be better off using WMI to return the name of the default
printer?

I''ve tried to find a solution in Google and MSDN, but haven''t had much
luck...

Any assistance gratefully received.
--
http://www.markrae.net


Works for me on Vista 64 and 32 bit. What happens if you make "Microsoft
XPS Document Writer" the default printer?

Same thing... Incidentally, it works for me on 32-bit Vista... Did you try
it with a 32-bit app running on 64-bit Vista...?

Also, when I try to query objPrintDocument.PrinterSettings.PrinterName, it
returns "Default printer is not set.", though it definitely is...

The Exception generated still doesn''t have any value for InnerException, and
the <Exception>.TargetSite.Name is "HdevmodeInternal" - I can''t even find
that anywhere in Google!
--
http://www.markrae.net


"Mark Rae" <ma**@markNOSPAMrae.netwrote in message
news:u4**************@TK2MSFTNGP04.phx.gbl...

"Willy Denoyette [MVP]" <wi*************@telenet.bewrote in message
news:%2****************@TK2MSFTNGP06.phx.gbl...

>"Mark Rae" <ma**@markNOSPAMrae.netwrote in message
news:u5**************@TK2MSFTNGP04.phx.gbl...

>>Hi,

I have used the code below to return the default printer in 32-bit WinXP
Pro, but now that I am running 64-bit Vista Business I''m getting an
error:

using System.Drawing.Printing;

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

The error message is: "No printers are installed." and which seems to
come from a method called HdevmodeInternal

However, I have several printers installed, and the default printer is
an old HP LaserJet 5.

Does the above code not work on 64-bit Vista? The app in question is
compiled for x86...

Would I be better off using WMI to return the name of the default
printer?

I''ve tried to find a solution in Google and MSDN, but haven''t had much
luck...

Any assistance gratefully received.
--
http://www.markrae.net


Works for me on Vista 64 and 32 bit. What happens if you make "Microsoft
XPS Document Writer" the default printer?


Same thing... Incidentally, it works for me on 32-bit Vista... Did you try
it with a 32-bit app running on 64-bit Vista...?

Yep, both X86 and X64 flavors work on 64-bit Vista Ultimate.

Note that I''m allways adding an application manifest to my executable
assemblies. If you don''t add a manifest to an application that runs under
wow64, this application will get a virtualized view of the registry (part
off) and the file system (part off).

To prevent virtualization you have to add a manifest like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
name="MyApplication.app"></assemblyIdentity>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel
level="asInvoker"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

save above contents in a file named "MyApplication.manifest", where
"MyApplication" is the name of the assembly (not absolutely required any
name will do as manifest filename).
When done, run the following command:
mt -manifest MyApplication.manifest -outputresource:MyApplication.exe;#1

mt.exe is part of VS2005.

I''m not sure this will be of any help, but it''s worth a try.

Willy.


这篇关于获得64位Vista中的默认打印机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆