Standarddrucker auslesen, per wsh verarbeiten (CC) (gelöst)

1. Februar 2012 17:22

Hallo zusammen!

Ich benötige für das dialoglose Drucken von PDF Dateien per Stapelverarbeitung den jeweiligen Standarddrucker des Users aus der Windows RDP Sitzung, und muss diesen Drucker dann per wsh.RUN als Parameter an den Adobe Reader weitergeben.

Prinzipiell funktioniert mein code, wenn ich den Defaultdrucker manuell als String so anlege wie er in der registry steht. Mein Problem ist dass
Code:
wsh.RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device');

die Backslashe weglässt, und dass ich aus dem Ergebnis dieses Strings nur die Zeichen bis zu dem ersten Komma benötige.

Also in der registry steht z.B. sowas drin : \\printserver\NRG MP C3000 PCL 5c Flur 1. OG,winspool,Ne04:
Das fett geschriebene muss ich als String an den Reader übergeben:
Code:
wsh.Run('"%programfiles%\Adobe\Reader 9.0\Reader\AcroRd32.exe" /s /h /t "' + V_Pfad + '" ' +printer, wmode, waitonreturn);


HowTo?

Kompletter codeschnipsel:
Code:
  //SHELL(V_Befehlszeile,V_Befehl);   <-- gibt eine Sicherheitswarnung beim ersten Öffnen !!!
   
    //Alternative: (UNTERSCHIED zu wsh.run???)
    //wsh.EXEC('%programfiles%\Adobe\Reader 9.0\Reader\AcroRd32.exe /s /p' + V_Pfad);
    wmode := 0;  //1 = display windows + activity, 0 = hide window + activity
    waitonreturn := FALSE;
    DefPrint := wsh.RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device');
    //printer := '"\\printserver\mpc3000_1og" "NRG MP C3000 PCL 5c Flur 1. OG"';
    Message(DefPrint);
    printer := DELCHR(DefPrint, '>', ','); // <-- greift nur für Zeichen am Ende des Strings
    MESSAGE(Printer);
wsh.Run('"%programfiles%\Adobe\Reader 9.0\Reader\AcroRd32.exe" /s /h /t "' + V_Pfad + '" ' +printer, wmode, waitonreturn);
    CLEAR(wsh);
Zuletzt geändert von JoergR am 2. Februar 2012 10:56, insgesamt 1-mal geändert.

Re: Standarddrucker auslesen, per wsh verarbeiten (CC)

2. Februar 2012 09:26

Hallo Jörg,

wenn ich das richtig sehe musst Du nur den String splitten. Sollte in etwa so funktionieren:
Code:
Printer1 = Split(DefPrint, ",")
Printer2 = Printer1 (0)

Re: Standarddrucker auslesen, per wsh verarbeiten (CC)

2. Februar 2012 10:29

Hallo Falk,

den Befehl Split kennt mein C/AL nicht...ab wann ist der denn Verfügbar?

Ich werds nun so machen,
Code:
printer := DELSTR(DefPrint, STRPOS(DefPrint, ','));


PS: das mit den fehlenden Backslashe lag ja nur daran das Message die als Zeilenumbruch interpretiert.

Funktioniert nun alles

Danke :)

Re: Standarddrucker auslesen, per wsh verarbeiten (CC) (gelö

2. Februar 2012 12:06

Aber bei deinem Code ist noch Vorsicht geboten! Wenn dort mal kein Komma enthalten ist, wirst du vermutlich einen Fehler enthalten. Findet STRPOS nichts gibt er 0 zurück. DELSTR aber erwartet Werte > 0 ;)

JoergR hat geschrieben:den Befehl Split kennt mein C/AL nicht...ab wann ist der denn Verfügbar?

Kenne ich auch nicht ...

Re: Standarddrucker auslesen, per wsh verarbeiten (CC) (gelö

3. Februar 2012 08:50

Hallo Jörg,

Sorry, hatte Dich falsch verstanden. Ich war direkt in WSH und nicht in CAL aber der Weg ist ja eigentlich der selbe.