gpt4 book ai didi

c# - 无法更改打印机的 DEVMODE

转载 作者:行者123 更新时间:2023-11-30 12:33:51 25 4
gpt4 key购买 nike

我需要为当前打印任务更改打印机的 DEVMODE 以通过标准和特定于设备的设置。我执行以下操作:

PrintDocument d = new PrintDocument();
d.PrinterSettings.PrinterName = "Microsoft XPS Document Writer"; // example printer name
byte[] devmode_data; // contains a valid value that is obtained from registry
IntPtr devmode = IntPtr.Zero;
GCHandle handle = GCHandle.Alloc(devmode_data, GCHandleType.Pinned);
try
{
devmode = handle.AddrOfPinnedObject();
if (devmode != IntPtr.Zero) d.PrinterSettings.SetHdevmode(devmode);
}
finally
{
if (handle.IsAllocated) handle.Free();
}

当我尝试使用 NullReferenceException 执行 PrinterSettings.SetHdevmode 并且没有任何有意义的错误信息时,它失败了。 d.PrinterSettings 不为空,在PrinterSettings.SetHdevmode 方法内部抛出异常。
所以我的问题是:出了什么问题? byte[]IntPtr 转换错了吗?也许 SetHdevmode 需要的不是 byte[] 数组?

我从注册表中获取了 byte[] devmode_data 数组。这是一个有效值,并且与当前打印机设置中使用的值相同。

最佳答案

我按以下方式修改了您的代码,因为我没有任何有效的 devmode_data 数据:

devmode = d.PrinterSettings.GetHdevmode();
if (devmode != IntPtr.Zero) d.PrinterSettings.SetHdevmode(devmode);

现在这里也不异常(exception)。

请向我提供您的 devmode_data 数据或检查您自己的数据是否有效!

关于c# - 无法更改打印机的 DEVMODE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com