Du bist nicht angemeldet.

Kontrollzentrum

Spenden

Jeder Euro hilft uns, euch zu helfen.

Adsense

Downloads

Stabil: 3.3.8.1 (Q, H)
Stabil: 3.3.12.0 (Q, H)
Beta: 3.3.11.5 (Q, H)
SciTE: 4/5/2014 (Q, H)
Hilfe Deutsch: 12/23/2013 (Q)
Download: OrganizeIncludes (Q)
Stand: 02.06.2014 - 2:21 Uhr

Lieber Besucher, herzlich willkommen bei: AutoIt.de - Das deutsche AutoIt-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

1

Dienstag, 24. April 2012, 21:32

Drucker managen per autoit

Hallo,

folgendes würde ich gerne machen:
Während mein script läuft, soll kein Druckauftrag eines anderen programmes ausgeführt werden. Stattdessen sollen die Druckauftrage in Dateien landen.
Anhand der Dateien erkenne ich ja welche Aufträge es gibt, nun will ich einfach nur die Reihenfolge ändern. und sobald ich will sollen die dateien ausgedruckt werden.(einfache cmd line)

So weit bin ich bisher gekommen:
Ich weis das sowieso alle druckaufträge erst in Dateien gesammelt werden unter
C:\Windows\System32\spool\PRINTERS
Natürlich wäre es schöner wenn ich in meinem Programm die namen und den ort selber entscheiden könnte, aber notfalls würde dies ja gehen.

Schalte ich den Drucker pyhsikalisch aus, werden alle aufträge in dem ordner gesammelt, mache ich ihn an geht das drucken los. Das meiste meines Programmes ist also bereits windows intern geklärt, jedoch sind es die feinheiten.
Ich will nicht die ganze zeit den drucker an und aus machen, und die reihenfolge lässt sich auch nicht wirklich ändern. (Könnte ich alle druckaufträge in eigenen dateien umleiten wäre die reihenfolge kein problem da ich sie dann ja in gewünschter reihenfolge in die spool legen könnte)

Ich hab dann
http://msdn.microsoft.com/en-us/library/…v=VS.85%29.aspx
gefunden, werde daraus jedoch nicht schlau, leider finde ich auch kein code beispiel für autoit welches mit der spool api arbeitet sodass ich daran etwas lernen kann und dann per trial and error mich langsam vortasten kann.

Nochmal kurz:
Druckaufträge umleiten(in datei)
Druckaufträge neu sortieren
Auf wunsch ausdrucken


Kann mir da jemand helfen? geht das mit autoit oder sollte ich doch eine andere sprache wählen?

Vielen dank im vorraus

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

2

Freitag, 27. April 2012, 22:56

ich glaube da wirst du nicht viel finden!

folgend mal etwas aus dem englischen forum
http://www.autoitscript.com/forum/topic/…l-printer-jobs/

ich würde so vorgehen ...
1. spooler service anhalten
2. dateien in array listen und umbenennen
3. sortieren
4. service starten und array abarbeiten

aber ob das so klappt müsste man testen :)

gruß gmmg

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

3

Donnerstag, 3. Mai 2012, 16:49

Danke, das hat mir sehr geholfen, habe nun aber ein problem mit dem Setzen von eigenschaften
Das VB script sieht so aus:

objPrintJob.Put "Priority" , 2
objPrintJob.SetInfo

Das SetInfo ist das problem, das kann ich nicht in Autoit sprache umwandeln

objPrintJob.Priority = 2 ;geht einwandfrei
objPrintJob.SetInfo ;geht nicht


wie ist der Autoit befehl dafür?

water

User

Registrierungsdatum: 24. November 2009

Wohnort: Austria

  • Private Nachricht senden

4

Donnerstag, 3. Mai 2012, 16:54

objPrintJob.Put("Priority", 2)
objPrintJob.SetInfo

Wenn's dann immer noch klemmt, dann brauchst Du einen COM error handler um die Details des Problemes abzufragen.
UDFs:
Active Directory (2014-07-21 - Version 1.4.1.1) - Download - Support - Example Scripts - Wiki
OutlookEX (2013-11-10 - Version 0.10.0.0) - Download - Support - Example Scripts - Wiki
ExcelChart (2013-01-21 - Version 0.3.1.1) - Download
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

5

Donnerstag, 3. Mai 2012, 17:45

objPrintJob.Put("Priority", 2)
objPrintJob.SetInfo

Wenn's dann immer noch klemmt, dann brauchst Du einen COM error handler um die Details des Problemes abzufragen.


Das habe ich ja ausprobiert, geht aber nicht

Anstatt
$objPrinter.Put("Priority", 2)

zu schreiben muss man
$objPrinter.Priority = 2
schreiben.

Leider weis ich nicht wie man die SetInfo funktion nutzt(im moment ist es ja nur auf meinem PC so gesetzt, nun muss ich dem Drucker das ja zurückschicken)

Und dein COM error handler sagt mir nun leider nichts.

Als fehler bekomme ich bei der SetInfo:
The requested action with this object has failed.:
$objPrinter.SetInfo
$objPrinter.SetInfo^ ERROR

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

6

Donnerstag, 3. Mai 2012, 19:27

Hab es nun auch mal mit der anderen variante probiert und den Printojb direkt eine Priorität geben wollen, aber das geht auch nicht

objPrinter.Priority = 2
objPrinter.Put_

WIeder kann ich die priorität setzen, aber den Put_befehl kann er nicht ausführen.

Da muss es doch eine dokumentation geben wie man das mit autoit hinbekommt

water

User

Registrierungsdatum: 24. November 2009

Wohnort: Austria

  • Private Nachricht senden

7

Donnerstag, 3. Mai 2012, 19:42

Das sieht nach WMI Objekten aus. Dieses Beispiel verwendet Put ind SetInfo so wie ich es vorgeschlagen habe.
Den COM Error Handler findest Du beim Befehl ObEvent.

AutoIt-Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")
; Dein Code kommt hierhin
; User's COM error function. Will be called if COM error 
occurs
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite("err.number is: " 
& @TAB & $oError.number & @CRLF & _
            "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            "err.description is: " & @TAB & $oError.description & @CRLF & _
            "err.source is: " & @TAB & $oError.source & @CRLF & _
            
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            "err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc
UDFs:
Active Directory (2014-07-21 - Version 1.4.1.1) - Download - Support - Example Scripts - Wiki
OutlookEX (2013-11-10 - Version 0.10.0.0) - Download - Support - Example Scripts - Wiki
ExcelChart (2013-01-21 - Version 0.3.1.1) - Download
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

8

Donnerstag, 3. Mai 2012, 19:59

Ok danke, hab es nun so angepasst, hier der Quellcode

----------------------------------------------------------------

Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

$strComputer = "."
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colPrintJobs = $objWMIService.ExecQuery ("Select * from Win32_PrintJob")
For $objPrintJob in $colPrintJobs
$objPrintJob.Put("Priority", 2)
$objPrintJob.SetInfo()
Next


; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
; Do anything here.
ConsoleWrite("err.number is: "& @TAB & $oError.number & @CRLF & _
"err.windescription:" & @TAB & $oError.windescription & @CRLF & _
"err.description is: " & @TAB & $oError.description & @CRLF & _
"err.source is: " & @TAB & $oError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
"err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
"err.retcode is: " & @TAB & $oError.retcode & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc

----------------------------------------------------------------

Und hier die Fehler Meldung

----------------------------------------------------------------

err.number is: -2147352570
err.windescription: Unbekannter Name.

err.description is:
err.source is:
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 7
err.retcode is: 0

err.number is: -2147352570
err.windescription: Unbekannter Name.

err.description is:
err.source is:
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 8
err.retcode is: 0

err.number is: -2147352570
err.windescription: Unbekannter Name.

err.description is:
err.source is:
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 7
err.retcode is: 0

err.number is: -2147352570
err.windescription: Unbekannter Name.

err.description is:
err.source is:
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 8
err.retcode is: 0

----------------------------------------------------------------

water

User

Registrierungsdatum: 24. November 2009

Wohnort: Austria

  • Private Nachricht senden

9

Donnerstag, 3. Mai 2012, 20:06

Die WMI Klasse Win32_PrintJob findest Du hier.
Hier habe ich einen Hinweis gefunden, dass sich die Priorität mit WMI nicht ändern lässt.
Bist Du sicher, dass das geht?
UDFs:
Active Directory (2014-07-21 - Version 1.4.1.1) - Download - Support - Example Scripts - Wiki
OutlookEX (2013-11-10 - Version 0.10.0.0) - Download - Support - Example Scripts - Wiki
ExcelChart (2013-01-21 - Version 0.3.1.1) - Download
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

  • »Fraantzz« ist der Autor dieses Themas

Registrierungsdatum: 24. April 2012

  • Private Nachricht senden

10

Donnerstag, 3. Mai 2012, 20:13

Ich habe
http://www.activexperts.com/activmonitor…inting/servers/

das als vorbild genommen und dort gibt es code snippets die ich einfach umbauen wollte.

ich muss ja nur die priorität der printjobs ändern, und wenn ich mir

http://technet.microsoft.com/en-us/library/ee176752.aspx

ansehe, ist dort kein "Read only" bei priorität, also gehe ich davon aus das es geht. vor allem da ja meine lösung mit

$objPrintJob.Priority = 2

während

$objPrintJob.Put("Priority", 2)

nicht geht, zeigt mir das es eigentlich gehen sollte, nur die sets funktion scheint problematisch.


Ich habe dann mal geschaut ob es eine möglichkeit gibt ein vba script direkt durch autoit auszuführen, das muss es wohl auch geben, aber da bekomme ich es auch nicht zum laufen

http://www.autoitscript.com/forum/topic/…-autoit-script/


Ich dachte eigentlich nicht das es so schwer ist die priorität zu ändern, weil stoppen weitermachen alles löschen und so kann ich am drucker, nur eben die eigenschaften machen probleme weil der set/put befehl nicht geht

water

User

Registrierungsdatum: 24. November 2009

Wohnort: Austria

  • Private Nachricht senden

11

Donnerstag, 3. Mai 2012, 21:51

Das Beispiel auf das Du verlinkst verwendet aber den WinNT Provider, während Du den WMI Provider ansprichst, der scheinbar nicht erlaubt die Priorität zu ändern.
UDFs:
Active Directory (2014-07-21 - Version 1.4.1.1) - Download - Support - Example Scripts - Wiki
OutlookEX (2013-11-10 - Version 0.10.0.0) - Download - Support - Example Scripts - Wiki
ExcelChart (2013-01-21 - Version 0.3.1.1) - Download
Excel - Example Scripts - Wiki
Word - Wiki
Tutorials:
ADO - Wiki

autoit.de Webutation