- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我编写了一个在 x86 和 x64 MS Windows 系统下工作的打印机驱动程序。我还编写了一个安装程序,通过 AddPrinterDriver 和 AddPrinter 函数安装打印机驱动程序。
到目前为止,还不错。问题是,如果我想将这台打印机从 x64 系统共享到 x86 系统,x64 打印服务器需要为 x86 系统安装额外的驱动程序。
现在我可以通过“打印机属性”->“共享”->“其他驱动程序”安装其他驱动程序并选择正确的 .inf 文件,但我想通过我的安装程序来完成。
有人知道如何实现吗?
感谢您的帮助!
最佳答案
所以我自己找到了解决办法。一定有更好、更简单的方法,但效果很好。
在安装驱动的时候,也要将正确的架构文件复制到其他架构中。 x86 驱动程序到 x86 后台处理程序驱动程序目录,x64 到 x64 后台处理程序驱动程序目录等。
然后在调用 AddPrinterDriver 和 AddPrinter 之前,您必须为您想要支持的彼此体系结构添加一些注册表值。然后仅针对安装驱动程序的操作系统的基本架构调用 AddPrinterDriver 和 AddPrinter。
注册表值必须添加到
SYSTEM\CurrentControlSet\Control\Print\Environments\{TARGET_ENVIROMENT}\Drivers\Version-3\{NAME_OF_YOUR_DRIVER}
其中 {TARGET_ENVIROMENT} 是您要支持的其他环境,例如“Windows NT x86”; “Windows x64”; “Windows IA64”和 {NAME_OF_YOUR_DRIVER} 必须与您用于 AddPrinterDriver 的驱动程序名称相匹配。您必须添加的值是 AddPrinterDriver 将添加到您的系统环境的值的副本。您可以在下面的代码示例中详细查看它们。之后只需为系统架构调用 AddPrinterDriver 和 AddPrinter,额外的驱动程序也会出现。
在 Win32 中,您可以使用以下方法在 x64 系统上安装 x86 和 x64 的驱动程序(此示例不进行错误检查):
DWORD uSize;
BYTE driver_dir_x86[MAX_PATH];
BYTE driver_dir_x64[MAX_PATH];
GetPrinterDriverDirectory(NULL,"Windows NT x86",1,driver_dir_x86,MAX_PATH,&uSize);
GetPrinterDriverDirectory(NULL,"Windows x64",1,driver_dir_x64,MAX_PATH,&uSize);
CopyFile(".\x86\printer_driver.dll",driver_dir_x86);
CopyFile(".\x86\PRINTER.PPD",driver_dir_x86);
CopyFile(".\x86\PRINTERUI.DLL",driver_dir_x86);
CopyFile(".\x86\PRINTER.HLP",driver_dir_x86);
CopyFile(".\x64\printer_driver.dll",driver_dir_x64);
CopyFile(".\x86\PRINTER.PPD",driver_dir_x64);
CopyFile(".\x86\PRINTERUI.DLL",driver_dir_x64);
CopyFile(".\x86\PRINTER.HLP",driver_dir_x64);
//Insert x86 additional drivers to registry
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Print\\Environments\\Windows NT x86\\Drivers\\Version-3\\", 0, KEY_ALL_ACCESS, &hkey);
RegCreateKey(hkey, "My_Printer_Drivername", &hsubkey); {
RegSetValueEx(hsubkey, "Dependent Files", 0, REG_MULTI_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "Previous Names", 0, REG_MULTI_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "ColorProfiles", 0, REG_MULTI_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "CoreDependencies", 0, REG_MULTI_SZ, (BYTE*)"", lstrlen("")+1);
DWORD Val = 3;
RegSetValueEx(hsubkey, "Version", 0, REG_DWORD, (BYTE*)&Val, sizeof(DWORD));
Val = 0;
RegSetValueEx(hsubkey, "TempDir", 0, REG_DWORD, (BYTE*)&Val, sizeof(DWORD));
Val = 2;
RegSetValueEx(hsubkey, "Attributes", 0, REG_DWORD, (BYTE*)&Val, sizeof(DWORD));
Val = 0;
RegSetValueEx(hsubkey, "PrinterDriverAttributes", 0, REG_DWORD, (BYTE*)&Val, sizeof(DWORD));
RegSetValueEx(hsubkey, "Configuration File", 0, REG_SZ, (BYTE*)"PRINTERUI.DLL", lstrlen("PRINTERUI.DLL")+1);
RegSetValueEx(hsubkey, "Data File", 0, REG_SZ, (BYTE*)"PRINTER.PPD", lstrlen("PRINTER.PPD")+1);
RegSetValueEx(hsubkey, "Driver", 0, REG_SZ, (BYTE*)"printer_driver.dll", lstrlen("printer_driver.dll")+1);
RegSetValueEx(hsubkey, "Help File", 0, REG_SZ, (BYTE*)"PRINTER.HLP", lstrlen("PRINTER.HLP")+1);
RegSetValueEx(hsubkey, "Monitor", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "Datatype", 0, REG_SZ, (BYTE*)"RAW", lstrlen("RAW")+1);
RegSetValueEx(hsubkey, "Manufacturer", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "OEM URL", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "HardwareID", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "Provider", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "Print Processor", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "VendorSetup", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "InfPath", 0, REG_SZ, (BYTE*)"", lstrlen("")+1);
RegSetValueEx(hsubkey, "DriverDate", 0, REG_SZ, (BYTE*)"01/01/2010", lstrlen("01/01/2010")+1);
RegSetValueEx(hsubkey, "DriverVersion", 0, REG_SZ, (BYTE*)"1.0.0.0", lstrlen("1.0.0.0")+1);
RegSetValueEx(hsubkey, "MinInboxDriverVerDate", 0, REG_SZ, (BYTE*)"01/01/2010", lstrlen("01/01/2010")+1);
RegSetValueEx(hsubkey, "MinInboxDriverVerVersion", 0, REG_SZ, (BYTE*)"1.0.0.0", lstrlen("1.0.0.0")+1);
RegCloseKey(hsubkey);
RegCloseKey(hkey);
//Add x64 printer driver
DRIVER_INFO_3 di3;
ZeroMemory(&di3, sizeof(DRIVER_INFO_3));
di3.cVersion = 0x03;
di3.pConfigFile = "PRINTERUI.DLL";
di3.pDataFile = "PRINTER.PPD";
di3.pDependentFiles = "";
di3.pDriverPath = "printer_driver.dll";
di3.pEnvironment = "Windows x64";
di3.pHelpFile = "PRINTER.HLP";
di3.pMonitorName = NULL;
di3.pName = "My_Printer_Drivername";
di3.pDefaultDataType = TEXT("RAW");
AddPrinterDriver(NULL, 3, (LPBYTE)&di3);
关于windows - 如何在 Windows XP、2003、7、2008 下以编程方式添加其他打印机驱动程序 (x86/x64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3158575/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!