tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
23
ZUGRIFFE
4430
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    Tach Leute,

    ich bin gerade dabei ein Programm zu schreiben, welches mir die Namen der installierten Drucker anzeigt. Das hat auch soweit geklappt. Hab die Daten mittels WMI rausgesucht. Doch jetzt will ich noch die Treiberversion von den Druckern raussuchen. Bin leider in der WMI nicht fündig geworden. Und in der Registrierung sind die Daten so verstreut. Ich wollte das Programm auch auf anderen Rechnern laufen lassen und wenn die Daten in der Registrierung so zerstreut sind, komme ich über fixe Angaben wohl nicht weiter. Hat hier jemand ne Ahnung, wie man dynamisch an die Druckertreiber Version kommt und das Programm auch auf anderen Rechnern die Versionen anzeigt?

    Danke im voraus.
    MfG
    coolazid
     

  2. #2
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Hallo coolazid!

    Hast Du mal die Suche des Forums angestengt?
    Dieser Thread sollte Dir weiterhelfen.
    Mit dem Beispielprogramm kannst Du dir alle WMI verzeichnisse ausgeben lassen.

    MfG, cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  3. #3
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    Hallo cosmochaosmaker,

    ich habe die Suchfunktion benutzt und zu meinem Problem nichts gefunden.
    Wie ich in meinem ersten Post geschrieben haben, habe ich bereits über die WMI
    die Drucker gefunden. Jetzt ist mein Problem, dass ich zu jedem Drucker die passende
    Treiberversion haben will. Ich habe über msdn keine Klasse gefunden, die mir die
    Druckertreiber Version ausspuckt. Jetzt hoffe ich, dass mir jemand sagen kann, wo
    ich suchen muss.

    MfG
     

  4. #4
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    Hallo,

    hab mal weiter im Netz nach einer Lösung für mein Problem gefunden.
    Leider hab ich nichts gefunden was direkt zur Lösung beitragen könnte.
    Aber auf einer Seite hat jemand geschrieben, dass er über System.Drawing
    an die Druckertreiber herangekommen ist (er wollte den Standart-Drucker mit
    einem C# Prog ändern).
    Jetzt meine Frage: Hat jemand ne Ahnung wie man über System.Drawing
    an die Druckertreiber kommt und ob man so auch die Treiberversionen heraus-
    finden kann.

    MfG
    Alex
     

  5. #5
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    So, im Namespace Drawing hab ich nichts bezüglich der Druckerversion gefunden.
    Aber ich hab mal gegoogelt und das hier gefunden.
    Ich schätze mal das Du davon blos das brauchst:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    using System.Runtime.InteropServices;
     
    public static short DRIVERVERSION = 0; // Device driver version
     
    /// <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 );
     
    // hDc ist das Handle;
    object o = GetDeviceCaps( hDc, DRIVERVERSION );
    Hab's aber nicht getestet.
    Das mit dem Handle und dem Rückgabewert ist jetzt dein Part.
    Kannst ja mal den kompletten Code posten wenndes hinbekommen hast.

    Hoffe mal das Dich das weiterbringt.

    MfG, cosmo
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  6. #6
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
     

  7. #7
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Zitat Zitat von Norbert Eder
    Man findet halt nicht alles, wenn man nur auf Deutsch sucht.
    Wie wahr....
    Auf dem Beispiel von TheCodeProject hab ich aber anfangs nichts
    bezüglich der DriverVersion gefunden. Muss das wohl übersehen haben. *peinlich*
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  8. #8
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    CodeProject is eh nix drinnen. Aber über die DruckerSettings sieht man auch wie man zu den Informationen kommt. Das sollte als Ansatzpunkt eigentlich reichen. Der Weg sollte damit zu finden sein.
     

  9. #9
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    Hallo,

    erstmal danke für eure Hilfe.

    Ich komme aber mit dem Codeschnipsel nicht weiter. Bin auch nicht gerade ein
    Programmier-Genie. Ich mache gerade Praktikum bei einer Softwarefirma und
    da hab ich die Aufgabe bekommen, ein Programm mit C# zu schreiben, welches
    die installieren Drucker anzeigt und halt deren Treiberversion.

    Ich habe vorher noch nie mit C# programmiert und in der Schule nur ein bisschen
    Delphi, hab also nicht viel Erfahrung.

    Die Drucker habe ich über die WMI ausgelesen, im i-net waren viele gute Berichte,
    aber mit den Treiber komme ich überhaupt nicht weiter.

    Kann mir vllt jemand ein Beispiel programmieren?

    MfG
    Alex
     

  10. #10
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Nimms mir nicht übel, aber Programmieren musst schon selber. Du kannst hier Tipps und Tricks erwarten, aber sicher keine fertige Lösungen. Immerhin ist es DEINE Aufgabe eine Lösung zu finden.

    Aber vielleicht hilft dir dieser Link weiter.
    Geändert von Norbert Eder (11.07.05 um 11:28 Uhr)
     

  11. #11
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    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.
     

  12. #12
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Ich hab dir einen Lösungsansatz geliefert
     

  13. #13
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    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);
    }
    Geändert von coolazid (11.07.05 um 12:14 Uhr)
     

  14. #14
    Avatar von Christian Kusmanow
    Christian Kusmanow Christian Kusmanow ist offline Mitglied Diamant
    Registriert seit
    Aug 2004
    Ort
    Aachen (NRW)
    Beiträge
    2.208
    Blog-Einträge
    15
    Ok, kann ich verstehen. Als Anfänger ist vor allem der Quellcode von TheCodeProject
    non understandable.

    Das Beispiel von TheCodeProject baut die Struktur nach,
    mit der das System anscheinend Drückerinformationen speichert.
    Code :
    1
    2
    3
    
    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
     
    MfG,
    Christian

    Wer sein Problem definiert, hat es schon halb gelöst!

    Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.

    The Code Project! - C# Programming | C# / VB.NET Pendants

    Regeln + Netiquette

    Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
    und vor allem nicht auf das, was euch die IHK dazu erzählt!
    Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...

  15. #15
    Avatar von coolazid
    coolazid coolazid ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    16
    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?
     

Ähnliche Themen

  1. Java Version auslesen
    Von Ganto im Forum Java
    Antworten: 4
    Letzter Beitrag: 11.07.05, 11:38
  2. Java Version auslesen
    Von sonny1986 im Forum ASP
    Antworten: 0
    Letzter Beitrag: 11.07.05, 11:24
  3. maximale Version auslesen
    Von rogo im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 24.09.04, 22:34
  4. Version String auslesen
    Von Frarr im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 12.03.04, 22:38
  5. Windows Version (Sprache) auslesen
    Von virtualsix im Forum ASP
    Antworten: 1
    Letzter Beitrag: 16.12.02, 09:35