How to Log or Capture Print Driver Specific Preferences? - c#

I'm trying to capture or log all the print settings for any given print job that I make on Windows (in particular from Photoshop, but I don't think that matters much).
In particular, I want to log or capture the Printer Driver specific settings. I have an Epson 3880 which has many many print settings (colour/quality/media type). My understanding is that these settings are provided via the Specific Printer Drivers and not Windows?
Reason I want to do this is because I'm sampling many new paper types for fine art, and want to tweak and record all the settings I use for tracking. I found a few software monitors, but all they seem to track from the print jobs are No of copies, and paper orientation.
Any ideas?

Related

Verify Display HDCP Compliance (Force HDCP output, disable output if HDCP unavailable)

I am working in C# Windows Forms, and would like to ensure that the content on my form is only output through an HDCP compliant stream using the system's hardware. This would require a multi-step process. A high level block-diagram description of the process would be:
determine if the display supports HDCP
determine if the graphics adapter supports HDCP
finally enabling the HDCP encryption on the output
If any of these stages report failure, it is then a trivial matter to black out the form.
I have done a minor amount of research into this manner, but cannot seem to find any detailed examples, leads, or instructions for accomplishing this. I have so far looked into using DirectX and Windows OPM, but have found insufficient help. The Windows PlayReady license also seems to touch up on this issue, but appears to be for pre-encrypted content (and is also quite expensive). Perhaps there is an approach that I have not noticed or thought about?
If you need any other information, please let me know.
Thank you in advance.
HDCP is nice to have but very hard to implement. Even if you have such a product on the market which does exactly what you want, it won't be certified by HDCP becuase it is easy to hack it. Most of the time, HDCP related things, for example the ROM where you store the HDCP keys, are hardware protected and can never be read out when your product is on the market. Sometimes you even need to hide the hardware paths from one component to another one to protect sniffing out your HDCP de-crypted data, for example, from between the graphics card chip and the HDMI connector.
To answer your question, you can only detect if the display supports HDCP or not if you can somehow read the EDID of the display. I don't think that you can do it using existing tools in windows. I might be wrong though.

Scanner driver conflicts with 2 same scanners

I have this C#, WIA app that I made to control 1+ scanners. Its on Win7
I start a new instance of the app each time I want to control another scanner. This works fine with 2 different scanners, HP and Epson, but when I add another Epson and try to scan with it, it fails. I believe this is due to the drivers being locked by the first Epson scanner. How do I tell the second Epson scanner to use a different set of drivers? My thoughts are to copy the first scanners drivers to another location. Then search the registry for the first set of driver files. Then see if I can puzzle out individual scanners. I know that there is a unique ID property for the scanners. Then i would tell the second scanner's ID to use these drivers instead.
I have thought about using a Virtual Machine but don’t want to do that.

Can we get a FileStream for a Printer?

If I understand it right, a printer is also a file from the operating system's view. Can I get a .NET C# FileStream type for a printer? It seems wild to do this.
Thanks in advance.
A printer is modeled in Win32 as a set of bitmaps. This is wrapped by the PrintDocument, which basically sets up a callback that lets you draw each page individually and sends them one by one to the printing spooler which then sends the data (in .ps format usually) to the printer.
This is how modern printers operate, they draw pages, not text. Only the old school matrix printers drew text character by character, in a stream-like fashion. They used to use the "PRN:" special file. This has lost all meaning in a modern environment however.
The good news is, it's really easy to work with the PrintDocument class, you get a Graphics object for each page that you can use to print text anywhere on the page, as well as draw graphics.
You can simulate a stream-like printer if you so wish by caching all the data then just calling DrawText for every page.
Building a Windows Forms application, you can think of a printer as a Graphics Device.
The System.Drawing.Printing namespace provides print-related services for Windows Forms applications.
If you want to print from a Windows Presentation Foundation (WPF) application, see the System.Printing namespace. It provides classes that enable you to automate the management of print servers, print queues, and print jobs.
Assuming that you want to send the raw data to printer, please see How to send raw data to a printer by using Visual C# .NET
Since .Net 3.0 you can, by using the
PrintSystemJobInfo.JobStream
When you create a printjob in the spooler, e.g.
var job = LocalPrinter.GetDefaultQueue().AddJob();
You can write to the
job.JobStream
Closing that stream queues it for printing.
Interestingly, you can use that stream to write control codes and text to a generic/text-only printer (e.g. LPT1 parallel port impact printer)

.Net Printing from a web site?

Scenario- I have a website that tracks/manages data stored in a DB(I know this covers 90% of websites :)). I have users that need to print specialized labels and barcodes. The app will need to print to a specialized Zebra RFID printer as well as a specific printer for bar codes. All users must use IE 7. Only 3-4 users will print these items. I want to give the user a button they press and then the barcodes/reports are just printed.
Question-
I can create all the files that need to be printed on the server but can I use an XBAP to automate the specialized printing? If not is there any other way?
Access to special hardware from within Internet Explorer is not always easy - even for something as basic as a printer. You can try using the built-in printing facilities of IE7 - but you are likely to run into formatting and layout problems when printing something like barcodes.
XBAPs run an a sandbox and have limited access to hardware as well - but you may be able to print from one - it all depends on whether you need access to any Win32 print or device APIs.
A gauranteed way to implement something like this is using an ActiveX control - but that a much more complicated thing to implement - and it will only work on Internet Explorer - and on a machine that is configured to allow ActiveX controls to run.

Windows API for detecting out of paper on specific printer tray

I'm looking for a way to determine if a specific tray on a given printer in Windows is out of paper. Currenly I'm using the WMI Win32_Printer object to get the status of the entire printer, and if one of the trays is out of paper I do get a status that tells me the entire printer is out of paper.
But I'd like to know if a specific tray is out of paper. Copious Google searches have come up with nothing.
I'm writing the app in c# but pointers to examples in any language would do.
Thanks, in advance..
That is because they are usually hardware specific interfaces. If you use one hardware vendor like HP or Dell then you can probably find a way to figure this out. But the Windows interface seems to only allow notification of the printer being totally out of paper.
I haven't done this but I seem to recall you can do it via SNMP.

Categories

Resources