Announcement

Collapse
No announcement yet.

Standarddrucker per Programmcode setzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Standarddrucker per Programmcode setzen

    Hallo,

    ich benötige die Möglichkeit den Standarddrucker (im Windows-2000) per Programmcode setzen.

    Aus der Stringliste Printer.Printers können die installierten Drucker ermittelt werden.

    Der Code "Printer.PrinterIndex := -1" schaltet den PrinterIndex auf den Standarddrucker.

    Aber damit kann ich den Standarddrucker selbst noch nicht auf einen anderen Drucker setzen.

    Ich benötige eine Funktion mit der ich unter Angabe des DruckerNamens (String) den Standarddrucker auf diesen Drucker setzen kann.

    z.B.

    procedure SetzeStandardDrucker( DruckerName:String );<br>
    begin<br>
    ????<br>
    end;<br>

    ....<br>
    SetzeStandardDrucker('HL-1260');<br>
    ....<br>

    Wer kennt eine Lösung ?

    Vielen Dank<br>Helmut

  • #2
    Eine eigene Funktion brauchst du nicht, da es Dank der <b>IndexOf</b>-Methode der TStrings einfach geht:
    <p>
    Printer.PrinterIndex := Printer.Printers.IndexOf('HL-1260');<p>
    Gruß,<br>Bernhar

    Comment


    • #3
      Vielen Dank für die Antwort.

      Leider geht es nicht so.

      Printer.PrinterIndex zeigt nur auf den gerade ausgewählten Drucker, welcher deshalb noch nicht zum Standarddrucker wird.

      Ich benötige eine Möglichkeit einen beliebigen Drucker, per Quelltext zum Standarddrucker zu deklarieren, damit es auch Windows mitbekommt.

      Ich besitze nämlich ein 'dummes', sehr teures Programm (ohne Quelltext), welches nur auf den Standarddrucker ausgeben kann. Also kann ich eine Druckerauswahl nur damit erreichen, indem ich dem Programm jeweils einen anderen Standarddrucker präsentiere.

      Vielen Dank<br>Helmu

      Comment


      • #4
        Hallo,

        auch wenn die folgende Lösung sehr merkwürdig aussieht, sollte sie doch funktionieren:
        <pre>
        var
        Device : array[0..255] of char;
        Driver : array[0..255] of char;
        Port : array[0..255] of char;
        hDeviceMode: THandle;
        begin
        Printer.PrinterIndex := Printer.Printers.IndexOf('HL-1260');
        Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
        StrCat(Device, ',');
        StrCat(Device, Driver);
        StrCat(Device, ',');
        StrCat(Device, Port);
        WriteProfileString('windows', 'device', Device);
        StrCopy(Device, 'windows');
        SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, longint(@Device));
        </pre>

        Ich habe das zwar noch nicht unter Windows 2000 ausprobiert, aber das direkte Mappen der virtuellen WIN.INI in die Registry (HKEY_LOCAL_MACHINE/Config/0001/System/CurrentControlSet/Control/Print/Printers/Default) sollte nicht nur in NT 4, sondern auch in Windows 2000 funktionieren. Der Botschafts-Rundruf mit WM_WININICHANGE sorgt dafür, das die neue Einstellung auch ohne Neubooten wirksam wird.
        &#10

        Comment


        • #5
          Testbericht:

          Windows-NT 4.0 Servicepack 4: <b>Funktioniert</b>

          Windows-2000 Profess.: <b>Funktioniert</b>

          VIELEN DANK HERR KOSCH !!!!!

          Gruss <br>
          Helmu

          Comment


          • #6
            Eine kleine Anmerkung noch: Die MSDN empfiehlt ab Windows 2000 die API-Funktion <b>SetDefaultPrinter</b> zu verwenden, die allerdings auch erst ab Windows 2000 zur Verfügung steht..

            Comment

            Working...
            X