There is no vendor-independent approach, especially for direct attached printers. As there is no standard and/or interface the driver must comply in this matter. Every vendor will use it's own dll-s, own methods to signal such conditions to the user (if at all).
For network printers the only not vendor-specific approach of monitoring them is using SNMP if the device supports it. Consult this article:
http://techblog.willshouse.com/2012/01/24/how-to-monitor-canon-printers-with-snmp/[
^]. And only network printers will have an embedded web server, that can be also used to retrieve this kind of information. But USB printers do not have this either.
Update: there is something you could follow. The PRINTER_INFO_2 structure contains a status field that is near of what you want. You need to call out to unmanaged api.
Read these:
http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/38280210-406a-4e4e-8d31-f044a59708e2[
^]
Changing printer settings using C#[
^]
Printers and SafeHandles[
^]