Настройка перенаправления порта виртуального принтера

Мне нужно настроить порт виртуального принтера, чтобы перенаправить его во внешнюю программу (файл .exe) через код С#. Прямо сейчас я могу установить виртуальный порт с некоторыми настройками (благодаря bghh code). Прилагаемое изображение иллюстрирует требование. Любая помощь будет высоко оценена.

Настройка перенаправления порта виртуального принтера вручную


person Naveen    schedule 01.05.2012    source источник


Ответы (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
comment
Я пытаюсь настроить виртуальный принтер для печати из приложений, а затем перенаправляю PostScript в свой рабочий процесс. Я не уверен, каков весь процесс для достижения этого или связанных с этим задач, кажется, что есть 2 части: драйвер и монитор. Информация выше кажется, что это о мониторе это правильно? У меня есть приведенный выше код, создающий записи реестра, хотя я не вижу порт, если пытаюсь создать драйвер вручную. - person Mark Redman; 04.08.2013
comment
Я нахожу этот код запутанным, почему там цикл foreach? Кажется, что это бесполезно и может быть значительно упрощено. Простите мой C#, но разве это функционально не эквивалентно? ideone.com/YAmUO6 - person Mooing Duck; 11.06.2014