druckertreiber version auslesen

Stimmt schon, dass es meine Aufgabe ist, aber wenn ich keine Ahnung habe
wie ich an die Treiberversion komme, dann kann ich die Aufgabe auch nicht lösen.

Ich verstehe nicht wie man auf die Infos zugreift und wie man sie ausgibt.
Natürlich kann ich nicht erwarten, dass andere für mich die Arbeit machen, aber
ein paar Lösungsansätze wären nicht schlecht.
 
Das stimmt, nur leider kann ich nicht wirklich viel damit anfangen. :(

Edit:

Der Code z. B. funktioniert, aber ich hab keine Ahnung wie ich auf die da was
ausgeben soll, wenn der Code überhaupt irgendwelche Infos bekommt.

Code:
public static short HORZSIZE = 4; // Horizontal size in millimeters
public static short VERTSIZE = 6; // Vertical size in millimeters
public static short HORZRES = 8; // Horizontal width in pixels
public static short VERTRES = 10; // Vertical height in pixels
public static short PHYSICALOFFSETX = 112; // Physical Printable Area x
public static short PHYSICALOFFSETY = 113; // Physical Printable Area y

/// <summary>
/// Call the GetDeviceCaps Win32 method
/// </summary>

[DllImport("gdi32.dll")]
public static extern Int16 GetDeviceCaps(
	[In] [MarshalAs (UnmanagedType.U4)] int hDc,
	[In] [MarshalAs (UnmanagedType.U2)] Int16 funct);
		
/// <summary>
/// Return the device 'hard' margins for the passed in
/// Device Context handle. Return data in 1/100ths inch
/// </summary>
/// <param name="hDc">Input handle</param>
/// <param name="left">output left margin in 1/100ths inch</param>
/// <param name="top">output top margin in 1/100ths inch</param>
/// <param name="right">output right margin in 1/100ths inch</param>
/// <param name="bottom">output bottom margin in 1/100ths inch</param>
		
public void GetHardMargins(int hDc, ref float left, ref float top,
			ref float right, ref float bottom)
{
	float offx = Convert.ToSingle(GetDeviceCaps(hDc, PHYSICALOFFSETX));
	float offy = Convert.ToSingle(GetDeviceCaps(hDc, PHYSICALOFFSETY));;
	float resx = Convert.ToSingle(GetDeviceCaps(hDc, HORZRES));
	float resy = Convert.ToSingle(GetDeviceCaps(hDc, VERTRES));
	float hsz = Convert.ToSingle(GetDeviceCaps(hDc, HORZSIZE))/25.4f; // screen
	float vsz = Convert.ToSingle(GetDeviceCaps(hDc, VERTSIZE))/25.4f; // screen
			
	float ppix = resx/hsz;
	float ppiy = resy/vsz;
	left = (offx/ppix) * 100.0f;
	top = (offy/ppix) * 100.0f;
	bottom = top + (vsz * 100.0f);
	right = left + (hsz * 100.0f);
}
 
Zuletzt bearbeitet:
Ok, kann ich verstehen. Als Anfänger ist vor allem der Quellcode von TheCodeProject
non understandable. :D

Das Beispiel von TheCodeProject baut die Struktur nach,
mit der das System anscheinend Drückerinformationen speichert.
Code:
struct DEVMODE{ [...] }
DEVMODE dm = (DEVMODE)Marshal.PtrToStructure(yDevModeData, typeof(DEVMODE));
MessageBox.Show( dm.dmDriverVersion.ToString() );
Das Beispiel aus dem Codeguru Forum beschreibt einen WorkArround via OS.
Da kann man sich eine Datei mit den Druckerinformationen irgendwo abspeichern
und man braucht seine Infos dann einfach nur auslesen.

MfG, cosmo
 
Ich bin total überfordert mit den Druckertreibern. Über die WMI hat es so gut
geklappt. Und jetzt versteh ich überhaupt nichts mehr.
Stehen die Infos ganz sicher nirgends in der WMI?
 
Das Prog soll auf jedem Rechner, auf dem es augeführt wird, die Informationen
holen. Geht das mit deinem Link?
 
Geht unter XP und 2000 (vermutlich auch 2003).

Nur warum such ich eigentlich für dich und poste einen Link, wenn du dir das nicht einmal ansiehst?
 
Ich hab mir das schon angesehen, aber bin da nicht weitergekommen.
Hab da auch keinen Code gesehen.
Bin schon wie gesagt ein Anfänger.
Weiß jetzt auch nicht wie ich den Link auf mein Programm umsetzen kann.
 
Was is so schwierig daran? Probier das halt aus, was geschrieben steht.

zB bekommst mit

rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n\\nightwish\Laserjet

die Druckereigenschaften in die Datei results.txt geschrieben. Damit kannst du unter anderem Treiber installieren, deinstallieren und dir die Informationen besorgen.
 
Zurück