I need to configure a virtual printer port to redirect it to a external program(.exe file) through c# code. Right now I am able to install a virtual port with some customization(thanks to bghh code). The attached picture illustrates the requirement. Any help will be highly appreciated.
Asked
Active
Viewed 9,406 times
1 Answers
4
I found out solution to the above problem. All the printer ports registered on the system are listed in registry under the key "SYSTEM\ControlSet001\Control\Print\Monitors\Redirected Port\Ports"
Values under these keys can be edited to get the desired result. Below is the code to edit it using c#.
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();

Naveen
- 193
- 2
- 12
-
I am trying to setup a virtual printer to print from applications then redirect a PostScript to my own workflow. I am not sure what the whole process is to achieve this or the tasks involved, it seems there are 2 parts, the driver and the monitor. The info above seems it about the monitor is that correct? I have the above code creating the Registry entries, although I cannot see the port if I try and create a driver manually. – Mark Redman Aug 04 '13 at 12:04
-
1I find this code confusing, why is the `foreach` loop there? It appears to serve no purpose, and could be greatly simplified. Forgive my C#, but isn't this functionally equivalent? http://ideone.com/YAmUO6 – Mooing Duck Jun 10 '14 at 22:35