Мне нужно настроить порт виртуального принтера, чтобы перенаправить его во внешнюю программу (файл .exe) через код С#. Прямо сейчас я могу установить виртуальный порт с некоторыми настройками (благодаря bghh code). Прилагаемое изображение иллюстрирует требование. Любая помощь будет высоко оценена.
Настройка перенаправления порта виртуального принтера
Ответы (1)
Я нашел решение вышеуказанной проблемы. Все порты принтеров, зарегистрированные в системе, перечислены в реестре в разделе «SYSTEM\ControlSet001\Control\Print\Monitors\Redirected Port\Ports».
Значения под этими ключами можно редактировать, чтобы получить желаемый результат. Ниже приведен код для его редактирования с помощью С#.
bool found = false;
string portName = "testing:";
RegistryKey PrinterPort = Registry.LocalMachine.OpenSubKey("SYSTEM\\ControlSet001\\Control\\Print\\Monitors\\Redirected Port\\Ports", true);
foreach (string pp in PrinterPort.GetSubKeyNames())
{
if (pp == portName)
{
PrinterPort = Registry.LocalMachine.OpenSubKey("SYSTEM\\ControlSet001\\Control\\Print\\Monitors\\Redirected Port\\Ports"+"\\"+portName, true);
found = true; break;
}
}
if (found)
{
PrinterPort.SetValue(@"Arguments", "@C:\\gs\\pdfwrite.txt -sOutputFile=\"d:\\hello.pdf\" -c .setpdfwrite -f -");
PrinterPort.SetValue(@"Command", "c:\\gs\\bin\\gswin32c.exe");
PrinterPort.SetValue(@"Delay", 0x12c);
PrinterPort.SetValue(@"LogFileDebug", 0x0);
PrinterPort.SetValue(@"LogFileName", "");
PrinterPort.SetValue(@"LogFileUse", 0x0);
PrinterPort.SetValue(@"Output", 0x0);
PrinterPort.SetValue(@"Printer", "Send To Cool Printer");
PrinterPort.SetValue(@"PrintError", 0x0);
PrinterPort.SetValue(@"RunUser", 0x0);
PrinterPort.SetValue(@"ShowWindow", 0x0);
}
PrinterPort.Close();
person
Naveen
schedule
02.05.2012
Я пытаюсь настроить виртуальный принтер для печати из приложений, а затем перенаправляю PostScript в свой рабочий процесс. Я не уверен, каков весь процесс для достижения этого или связанных с этим задач, кажется, что есть 2 части: драйвер и монитор. Информация выше кажется, что это о мониторе это правильно? У меня есть приведенный выше код, создающий записи реестра, хотя я не вижу порт, если пытаюсь создать драйвер вручную.
- person Mark Redman; 04.08.2013
Я нахожу этот код запутанным, почему там цикл
foreach
? Кажется, что это бесполезно и может быть значительно упрощено. Простите мой C#, но разве это функционально не эквивалентно? ideone.com/YAmUO6
- person Mooing Duck; 11.06.2014