Jetdirect 170x - Printerque

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Jetdirect 170x - Printerque

Beitrag von Sandomor » 04.08.2008, 14:14

Also ich hatte heute nacht eine Idee.

Ich habe einen HP Drucker der mit einer Jetdirect an mein Netzwerk angestopselt ist.

Jetzt möchte ich den Drucker mittles FS20ST ein- und ausschalten. Wenn ein Printjob an die Jetdirect ankommt würde ich das gerne wissen und mittels homeputer den Drucker einschalten.

Hat jemand schon sowas gemacht?
Hat jemand mit der jetdirect 170x Erfahrungen?

danke
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 07.08.2008, 14:35

So mit dem 170x von HP gehts nicht, das sagt leider nicht ob etwas in der Warteschlange steht.

Nun habe ich eine andere Version:

Der Rechner wo die Homeputer Studio läuft, ist gleichzeitig mein Printer Server. Die Warteschlange kann ich mit einem modifizierten prnjobs.vbs abfragen. Die einzige Ausgabe ist die Anzahl der Dokumente in der Que.

Die Commandline sieht folgendermaßen aus: 'cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"'

Derzeit verwende ich eine Batch-Datei, welche die Ausgabe in eine Datei umleitet. Diese Batchdatei wird von der Hoemputer Studio alle 5 Sek. (zum Test - wird später seltener) gestartet. Die Datei lese ich dann mit einem anderen Makro ein und bekomme die Anzahl der Dateien in der Warteschlange. Wenn >0 Drucker einschalten und Stoppuhr starten. Wenn =0 und Stoppuhr >10min Drucker ausschalten - Das geht schon.

Jetzt stört mich aber das aufpoppen des Fenster schon sehr. Gibt es eine Möglichkeit ein Programm in php zu starten und den Output dann direkt im Code einzulesen. Dann würde ich mir den umweg über das File ersparen.

Ich habe schon versucht:

$f=fopen('cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"','r');
$z=fgets($f,1000);
echo $z

Da kommt ein Warning und kein Ergebnis...

Kann mir wer helfen?
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Jetdirect 170x - Printerque

Beitrag von buempi » 07.08.2008, 18:13

Hallo Sandomor

Ich bin auch noch PHP-Anfänger. Aber versuch es doch mal so:

Code: Alles auswählen

<?
$Befehl = 'cscript //NoLogo e:\prnjobs1.vbs -l -o -p "HP LaserJet 6P"';
$AnzahlDruckJobs = exec($Befehl);
?>
Viele Grüsse
Bümpi

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 08.08.2008, 11:47

Danke Buempi...

ich habs nun mit popen('....','r') gemacht. Damit kann man Programme starten und die Ausgabe lesen. Funktioniert mittlerweile. Allerdings geht das Schwarze Fenster auch auf - auch bei exec(). Das bekommt man nicht weg - leider :-(

Sonst funktioniert das super und mein Drucker wird ein- und ausgeschalten.

Dnake für die Hilfe
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Jetdirect 170x - Printerque

Beitrag von buempi » 08.08.2008, 14:43

Hallo Sandomor

Dieses Aufpoppen stört doch bestimmt auf die Dauer!

Ich habe mal in AutoIt ein Programm geschrieben, mit welchem man Programme minimalisiert ausführen kann. Weil du so viele Parameter benötigst, habe ich es jetzt noch etwas erweitert. Falls CSCRIPT dass Fenster nicht selber wiederherstellt, müsste es damit funktionieren. Das heisst: CSCRIPT wird minimiert gestartet und du merkst davon so gut wie gar nichts. Nur das Homeputer-Fenster verliert für einen kurzen Augenblick den Fokus.

Aus einem Homeputer-Makro startest du es wie folgt:

Code: Alles auswählen

** Achtung: Alles in EINER Zeile; kein Zeilenumbruch!!
Startwin(",X:\DeinPfadZuStartMin\,X:\DeinPfadZuStartMin\StartMin.exe,X:\DeinPfadZuCscript\cscript.exe //NoLogo e:\prnjobs1.vbs -l -o -p 'HP LaserJet 6P'")
Ich hoffe, dass cscript die Übergabe des Druckernamens mit einfachen Anführungszeichen akzeptiert. Sonst müsstest du die Leerzeichen aus dem Druckernahmen entfernen (mit Startwin kann man ja keine " übergeben). Ferner empfehle ich dir, das Ganze in einem Pfad ohne Leerstellen abzulegen. Gibt erfahrungsgemäss weniger Probleme.

Leider konnte ich die Neue Version des Programms nicht ausführlich testen. Du bist also Beta-Tester!

Viele Grüsse
Bümpi

Edit: Wenn es mit den einfachen Anführungszeichen nicht klappt, kannst du ja den Parameter auch einfach weglassen und im Sript den Druckernamen als Konstante definieren.
Dateianhänge
StartMin.zip
(190.92 KiB) 102-mal heruntergeladen

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 11.08.2008, 09:47

Hallo,

danke werd heute abend testen - am WoE bin ich einfach zu nix gekommen...

lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 12.08.2008, 11:54

Gestern sind unsere Schwiegereltern über mich hereingefallen. Derzeit komme ich gar nicht zum Testen - melde mich sobald ich wieder an die Steuerung darf....
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

mirank
Beiträge: 141
Registriert: 05.10.2006, 10:06

Re: Jetdirect 170x - Printerque

Beitrag von mirank » 23.08.2008, 19:28

Hallo Zusammen,

ich würde auch gerne meinen Netzwerkdrucker (Samsung CLP 510N) bei eingehenden Druckaufträgen einschalten lassen. Das gnaze geht über meinen Server der so zu sagen als Prinserver läuft. Auf dem gleichen Server läuft auch die Homeputer Software.

Nur hab ich nicht ganz verstanden wie ihr das macht. Den Kommandozeilenbefehl "prnjobs" hab ich soweit verstanden das funktioniert auch. Nur bin ich noch nicht dahintergekommen wie ich das ganze jetzt die Homeputer Software übergeben soll.

Könntet ihr mir da vielleicht helfen??

Schon mal vielen vielen Dank im Voraus!!

Gruß
MiRank

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 25.08.2008, 07:37

Hallo,

ich habe jetzt meine ganzes IT Equipment (Computer, LCD Modul, ROuter, Modem, Printer, ...) übersiedeln müssen.

Jetzt war ich die letzte Zeit mit Arbeit ziemlich eingedeckt - @Buempi: leider auch noch nicht zum Testen gekommen

@MiRank:
Ich habe das Script ein wenig abgewandelt, jetzt gibt es genau die Anzahl der Printjobs für einen bestimmten Drucker aus. Diese hole ich mir mit popen(...,'r') ins php Skript und dann als Skriptoutput in ein Anzeigefeld. Das mache ich für jeden Drucker. In meiner Homeputer Steuerung gibt es für jeden Drucker ein Anzeigeobjekt (Zahl), in welches die Zahl geschreiben wird. Ist die Zahl >0 wird der Printer eingeschalten. Ist die Zahl 0 wird ein Timer gestartet, welcher solange läuft bis die Zahl wieder nicht 0 ist. Wenn der Timer nun >8min ist, wird der Printer ausgeschalten. Die 8 min habe ich einfach einmal so festgelegt. Damit verhindere ich, dass - wenn jemand etwas druckt - der Printer gleich wieder ausgeschalten wird, da ja mein Laserdrucker zum aufheizen einiges an Energie braucht.

Ich hoffe Dir geholfen zu haben.

lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

Sandomor
Beiträge: 239
Registriert: 07.11.2007, 15:27
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wien
Hat sich bedankt: 1 Mal

Re: Jetdirect 170x - Printerque

Beitrag von Sandomor » 29.08.2008, 08:35

Hallo zusammen,

auf Grund mehrerer Anfragen hier meine Lösung für Drucker einschalten, wenn ein Printjob vorhanden ist:

1. Vorraussetzungen:
Homeputer Studio
php
Windows csript
Homeputer Server ist auch PrintServer für den gewünschten Drucker

2. Objekte
ich habe für meine Objekte eine eigene Nomiklatur, daher bitte nicht wundern, die ersten beiden Stellen sind immer der Raum in dem das Gerät steht

ABPRinter
FS20 Schalt-Steckdose

ABHPLJ6Jobs
Typ: Zeichen

Makro:

Code: Alles auswählen

<?
$fp=popen("cscript //NoLogo e:\ELV\BAT\prnjobs1.vbs -l -o","r");
$z=fread($fp,2048);
echo trim($z);
pclose($fp);
?>
test:=Scriptoutput
ABHPLJ6Jobs:= Scriptoutput + " wartende Jobs"
jobs:=Scriptoutput
wenn jobs > 0  und ABprinter ausgeschaltet dann
  ABPrinter einschalten
  startzeit:=ZEIT
ENDEwenn
wenn jobs >0 und ABprinter eingeschaltet dann
  startzeit:=ZEIT
ENDEwenn
  ABHPLJ6Zeit:= stoppzeit(startzeit)
Das Objekt 'test' ist mein allgemeines Outputziel für alle php Scripts. Das Objekt ABHPLJ6Zeit ist auch vom Typ Zeichen und zeigt die Zeit ohne Printjob an.
jobs und startzeit sind Variablen im Objekt ABHPLJ6Jobs.

Die aufgerufene Sciptdatei ist im gegensatz zu der von Windows modifiziert. Es ist ein Parameter "-o" eingebaut worden. Mit diesem wird ausschließlich die Anzahl der Druckjobs ausgegeben. Hier die modifizierte prnjobs1.vbs

Code: Alles auswählen

'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation. All rights reserved.
'
' Abstract:
' prnjobs.vbs - job control script for WMI on Whistler
'     used to pause, resume, cancel and list jobs
'
' Usage:
' prnjobs [-zmxl?] [-s server] [-p printer] [-j jobid] [-u user name] [-w password]
'
' Examples:
' prnjobs -z -j jobid -p printer
' prnjobs -l -p printer
'
' Erweitert von Andreas Dolinar
' zusätzlicher Parameter -o
' dieser gibt nur die Anzahl der Printjobs für einen Drucker aus - nur sinnvoll wenn Option -l auch aktiv....
'
'----------------------------------------------------------------------
option explicit

' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim   gDebugFlag
gDebugFlag = false

' Operation action values.
'
const kActionUnknown    = 0
const kActionPause      = 1
const kActionResume     = 2
const kActionCancel     = 3
const kActionList       = 4

const kErrorSuccess     = 0
const KErrorFailure     = 1

const kNameSpace        = "root\cimv2"

'
' Generic strings
'
const L_Empty_Text                 = ""
const L_Space_Text                 = " "
const L_Error_Text                 = "Fehler"
const L_Success_Text               = "Erfolg"
const L_Failed_Text                = "Fehlgeschlagen"
const L_Hex_Text                   = "0x"
const L_Printer_Text               = "Drucker"
const L_Operation_Text             = "Vorgang"
const L_Provider_Text              = "Anbieter"
const L_Description_Text           = "Beschreibung"
const L_Debug_Text                 = "Debug:"

'
' General usage messages
'                                 
const L_Help_Help_General01_Text   = "Syntax: prnjobs [-zmxl?] [-s Server][-p Drucker][-j Auftragskennung][-u Benutzername][-w Kennwort]" 
const L_Help_Help_General02_Text   = "Argumente:"
const L_Help_Help_General03_Text   = "-j     - Auftragskennung"
const L_Help_Help_General04_Text   = "-l     - Zeigt alle Aufträge an.    zusaetzlich -o gibt nur die Anzahl der Printjobs aus"
const L_Help_Help_General05_Text   = "-m     - Setzt den Auftrag fort."
const L_Help_Help_General06_Text   = "-p     - Druckername"
const L_Help_Help_General07_Text   = "-s     - Servername"
const L_Help_Help_General08_Text   = "-u     - Benutzername"
const L_Help_Help_General09_Text   = "-w     - Kennwort"
const L_Help_Help_General10_Text   = "-x     - Bricht den Auftrag ab."
const L_Help_Help_General11_Text   = "-z     - Hält den Auftrag an."
const L_Help_Help_General12_Text   = "-?     - Zeigt die Befehlssyntax an."
const L_Help_Help_General13_Text   = "Beispiele:"
const L_Help_Help_General14_Text   = "prnjobs -z -p Drucker -j Auftragskennung"
const L_Help_Help_General15_Text   = "prnjobs -l -p Drucker"
const L_Help_Help_General16_Text   = "prnjobs -l"

'
' Messages to be displayed if the scripting host is not cscript
'                            
const L_Help_Help_Host01_Text      = "Führen Sie dieses Skript mit CScript aus."  
const L_Help_Help_Host02_Text      = "Dies kann erreicht werden durch:"
const L_Help_Help_Host03_Text      = "1. Unter der Verwendung von ""Script.vbs Argumente"" oder" 
const L_Help_Help_Host04_Text      = "2. durch Ändern des Standard-Windows Scripting Host in CScript,"
const L_Help_Help_Host05_Text      = "   indem ""CScript //H:CScript //S"" und das Script"
const L_Help_Help_Host06_Text      = "   ""script.vbs Argumente"" ausgeführt wird."

'
' General error messages
'                                                 
const L_Text_Error_General01_Text  = "Der Scripting Host konnte nicht ermittelt werden."                
const L_Text_Error_General02_Text  = "Befehlszeile konnte nicht analysiert werden." 
const L_Text_Error_General03_Text  = "Win32-Fehlercode"

'
' Miscellaneous messages
'
const L_Text_Msg_General01_Text    = "Druckaufträge können nicht aufgelistet werden."
const L_Text_Msg_General02_Text    = "Anzahl der aufgelisteten Druckaufträge"
const L_Text_Msg_General03_Text    = "Druckauftrag kann nicht festgelegt werden"
const L_Text_Msg_General04_Text    = "Objekt ""SWbemLocator"" konnte nicht ermittelt werden."
const L_Text_Msg_General05_Text    = "Verbindung mit dem WMI-Dienst konnte nicht hergestellt werden."


'
' Print job properties
'
const L_Text_Msg_Job01_Text        = "Jobkennung"
const L_Text_Msg_Job02_Text        = "Drucker"
const L_Text_Msg_Job03_Text        = "Dokument"
const L_Text_Msg_Job04_Text        = "Datentyp"
const L_Text_Msg_Job05_Text        = "Treibername"
const L_Text_Msg_Job06_Text        = "Beschreibung"
const L_Text_Msg_Job07_Text        = "Verstrichene Zeit"
const L_Text_Msg_Job08_Text        = "Computername"
const L_Text_Msg_Job09_Text        = "Jobstatus"
const L_Text_Msg_Job10_Text        = "Benachrichtigen"
const L_Text_Msg_Job11_Text        = "Besitzer"
const L_Text_Msg_Job12_Text        = "Gedruckte Seiten"
const L_Text_Msg_Job13_Text        = "Parameter"
const L_Text_Msg_Job14_Text        = "Größe"
const L_Text_Msg_Job15_Text        = "Startzeit"
const L_Text_Msg_Job16_Text        = "Endzeit"
const L_Text_Msg_Job17_Text        = "Status"
const L_Text_Msg_Job18_Text        = "Statusmaske"
const L_Text_Msg_Job19_Text        = "Zeit der Auftragserteilung"
const L_Text_Msg_Job20_Text        = "Seiten insgesamt"

'
' Action strings
'
const L_Text_Action_General01_Text = "Anhalten"
const L_Text_Action_General02_Text = "Fortsetzen"
const L_Text_Action_General03_Text = "Abbrechen"

'
' Debug messages
'
const L_Text_Dbg_Msg01_Text        = "In function ListJobs"
const L_Text_Dbg_Msg02_Text        = "In function ExecJob"
const L_Text_Dbg_Msg03_Text        = "In function ParseCommandLine"

main

'
' Main execution starts here
'
sub main

    dim iAction
    dim iRetval
    dim strServer
    dim strPrinter
    dim strJob
    dim strUser
    dim strPassword
    dim strModus
    
    '
    ' Abort if the host is not cscript
    '
    if not IsHostCscript() then
   
        call wscript.echo(L_Help_Help_Host01_Text & vbCRLF & L_Help_Help_Host02_Text & vbCRLF & _
                          L_Help_Help_Host03_Text & vbCRLF & L_Help_Help_Host04_Text & vbCRLF & _
                          L_Help_Help_Host05_Text & vbCRLF & L_Help_Help_Host06_Text & vbCRLF)
        
        wscript.quit
   
    end if

    iRetval = ParseCommandLine(iAction, strServer, strPrinter, strJob, strUser, strPassword, strModus)

    if iRetval = kErrorSuccess then

        select case iAction

            case kActionPause
                 iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General01_Text)

            case kActionResume
                 iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General02_Text)

            case kActionCancel
                 iRetval = ExecJob(strServer, strJob, strPrinter, strUser, strPassword, L_Text_Action_General03_Text)

            case kActionList
                 iRetval = ListJobs(strServer, strPrinter, strUser, strPassword, strModus)

            case else
                 Usage(true)
                 exit sub

        end select

    end if

end sub

'
' Enumerate all print jobs on a printer
'
function ListJobs(strServer, strPrinter, strUser, strPassword, strModus)
    
    on error resume next
    
    DebugPrint kDebugTrace, L_Text_Dbg_Msg01_Text

    dim Jobs
    dim oJob
    dim oService
    dim iRetval
    dim strTemp
    dim iTotal
    
    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
        
        set Jobs = oService.InstancesOf("Win32_PrintJob")

    else
    
        ListJobs = kErrorFailure
        
        exit function        
    
    end if
    
     if Err.Number <> kErrorSuccess then         
    
        wscript.echo L_Text_Msg_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description

        ListJobs = kErrorFailure
            
        exit function
        
     end if
    
    iTotal = 0
    
    for each oJob in Jobs
                '
        ' oJob.Name has the form "printer name, job id". We are isolating the printer name
        '                              
        strTemp = Mid(oJob.Name, 1, InStr(1, oJob.Name, ",", 1)-1 )
        '
        ' If no printer was specified, then enumerate all jobs
        '
        if strPrinter = null or strPrinter = "" or LCase(strTemp) = LCase(strPrinter) then
            
            iTotal = iTotal + 1
        	if strModus = "0" then 
              wscript.echo L_Empty_Text
              wscript.echo L_Text_Msg_Job01_Text & L_Space_Text & oJob.JobId
              wscript.echo L_Text_Msg_Job02_Text & L_Space_Text & strTemp
              wscript.echo L_Text_Msg_Job03_Text & L_Space_Text & oJob.Document
              wscript.echo L_Text_Msg_Job04_Text & L_Space_Text & oJob.DataType
              wscript.echo L_Text_Msg_Job05_Text & L_Space_Text & oJob.DriverName
              wscript.echo L_Text_Msg_Job06_Text & L_Space_Text & oJob.Description
              wscript.echo L_Text_Msg_Job07_Text & L_Space_Text & Mid(CStr(oJob.ElapsedTime), 9, 2) & ":" & Mid(CStr(oJob.ElapsedTime), 11, 2) & ":" _
                                                                & Mid(CStr(oJob.ElapsedTime), 13, 2)
              wscript.echo L_Text_Msg_Job08_Text & L_Space_Text & oJob.HostPrintQueue
              wscript.echo L_Text_Msg_Job09_Text & L_Space_Text & oJob.JobStatus
              wscript.echo L_Text_Msg_Job10_Text & L_Space_Text & oJob.Notify
              wscript.echo L_Text_Msg_Job11_Text & L_Space_Text & oJob.Owner
              wscript.echo L_Text_Msg_Job12_Text & L_Space_Text & oJob.PagesPrinted
              wscript.echo L_Text_Msg_Job13_Text & L_Space_Text & oJob.Parameters
              wscript.echo L_Text_Msg_Job14_Text & L_Space_Text & oJob.Size
              if CStr(oJob.StartTime) <> "********000000.000000+000" and CStr(oJob.UntilTime) <> "********000000.000000+000" then
                wscript.echo L_Text_Msg_Job15_Text & L_Space_Text & Mid(Mid(CStr(oJob.StartTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oJob.StartTime), 9, 4), 3, 2) 
                wscript.echo L_Text_Msg_Job16_Text & L_Space_Text & Mid(Mid(CStr(oJob.UntilTime), 9, 4), 1, 2) & "h" & Mid(Mid(CStr(oJob.UntilTime), 9, 4), 3, 2) 
              end if
              wscript.echo L_Text_Msg_Job17_Text & L_Space_Text & oJob.Status
              wscript.echo L_Text_Msg_Job18_Text & L_Space_Text & oJob.StatusMask
              wscript.echo L_Text_Msg_Job19_Text & L_Space_Text & Mid(CStr(oJob.TimeSubmitted), 5, 2) & "/" _
                                                                & Mid(CStr(oJob.TimeSubmitted), 7, 2) & "/" _
                                                                & Mid(CStr(oJob.TimeSubmitted), 1, 4) & " " _
                                                                & Mid(CStr(oJob.TimeSubmitted), 9, 2) & ":" _
                                                                & Mid(CStr(oJob.TimeSubmitted), 11, 2) & ":" _
                                                                & Mid(CStr(oJob.TimeSubmitted), 13, 2)
              wscript.echo L_Text_Msg_Job20_Text & L_Space_Text & oJob.TotalPages
            end if
            Err.Clear
        end if        
    next
    if strModus = "0" then 
    	wscript.echo L_Empty_Text
    	wscript.echo L_Text_Msg_General02_Text & L_Space_Text & iTotal 
    else
    	wscript.echo iTotal 
    end if
    ListJobs = kErrorSuccess
end function

'
' Pause/Resume/Cancel jobs
'
function ExecJob(strServer, strJob, strPrinter, strUser, strPassword, strCommand)

    on error resume next

    DebugPrint kDebugTrace, L_Text_Dbg_Msg02_Text

    dim oJob
    dim oService
    dim iRetval
    dim uResult
    dim strName

    '
    ' Build up the key. The key for print jobs is "printer-name, job-id"
    '                                  
    strName = strPrinter & ", " & strJob

    iRetval = kErrorFailure
    
    if WmiConnect(strServer, kNameSpace, strUser, strPassword, oService) then
        
        set oJob = oService.Get("Win32_PrintJob.Name='" & strName & "'")
    
    else
    
        ExecJob = kErrorFailure
        
        exit function        
    
    end if

    '
    ' Check if getting job instance succeeded
    '
    if Err.Number = kErrorSuccess then
    
        uResult = kErrorSuccess                      
                              
        select case strCommand
        
            case L_Text_Action_General01_Text
                 uResult = oJob.Pause()
                 
            case L_Text_Action_General02_Text
                 uResult = oJob.Resume()
                 
            case L_Text_Action_General03_Text
                 oJob.Delete_()          
                 
             case else
                 Usage(true)
                 
        end select

        if Err.Number = kErrorSuccess then

            if uResult = kErrorSuccess then                     
            
                wscript.echo L_Success_Text & L_Space_Text & strCommand & L_Space_Text _
                             & L_Text_Msg_Job01_Text & L_Space_Text & strJob _
                             & L_Space_Text & L_Printer_Text & L_Space_Text & strPrinter
        
                iRetval = kErrorSuccess
                
            else
            
                wscript.echo L_Failed_Text & L_Space_Text & strCommand & L_Space_Text _ 
                             & L_Text_Error_General03_Text & L_Space_Text & uResult 
            
            end if    

        else

            wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _
                         & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
                         
            '
            ' Try getting extended error information
            '
            call LastError()             
            
        end if
         
   else      
        
        wscript.echo L_Text_Msg_General03_Text & L_Space_Text & L_Error_Text & L_Space_Text _ 
                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description
        
        '
        ' Try getting extended error information
        '
        call LastError()
        
    end if
    
    ExecJob = iRetval
    
end function

'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)

    if gDebugFlag = true then

        if uFlags = kDebugTrace then

            wscript.echo L_Debug_Text & L_Space_Text & strString

        end if

        if uFlags = kDebugError then

            if Err <> 0 then

                wscript.echo L_Debug_Text & L_Space_Text & strString & L_Space_Text _
                             & L_Error_Text & L_Space_Text & L_Hex_Text & hex(Err.Number) _
                             & L_Space_Text & Err.Description

            end if

        end if

    end if

end sub

'
' Parse the command line into its components
'
function ParseCommandLine(iAction, strServer, strPrinter, strJob, strUser, strPassword, strModus)

    on error resume next

    DebugPrint kDebugTrace, L_Text_Dbg_Msg03_Text

    dim oArgs
    dim iIndex

    iAction = kActionUnknown
    iIndex = 0
    strModus = "0"

    set oArgs = wscript.Arguments

    while iIndex < oArgs.Count

        select case oArgs(iIndex)

            case "-z"
                iAction = kActionPause

            case "-m"
                iAction = kActionResume

            case "-x"
                iAction = kActionCancel

            case "-l"
                iAction = kActionList

            case "-p"
                iIndex = iIndex + 1
                strPrinter = oArgs(iIndex)
                
            case "-s"
                iIndex = iIndex + 1
                strServer = RemoveBackslashes(oArgs(iIndex))

            case "-j"
                iIndex = iIndex + 1
                strJob = oArgs(iIndex)
                
            case "-u"
                iIndex = iIndex + 1
                strUser = oArgs(iIndex)
                
            case "-w"
                iIndex = iIndex + 1
                strPassword = oArgs(iIndex)    

            case "-o"
                iIndex = iIndex + 1
                strModus = "1"
                            
            case "-?"
                Usage(true)
                exit function

            case else
                Usage(true)
                exit function

        end select

        iIndex = iIndex + 1

    wend

    if Err.Number = kErrorSuccess then

        ParseCommandLine = kErrorSuccess

    else
    
        wscript.echo L_Text_Error_General02_Text & L_Space_Text & L_Error_Text & L_Space_Text _
                     & L_Hex_Text & hex(Err.Number) & L_Space_text & Err.Description
        
        ParseCommandLine = kErrorFailure
    
    end if
        
end function

'
' Display command usage.
'
sub Usage(bExit)

    wscript.echo L_Help_Help_General01_Text
    wscript.echo L_Empty_Text
    wscript.echo L_Help_Help_General02_Text
    wscript.echo L_Help_Help_General03_Text
    wscript.echo L_Help_Help_General04_Text
    wscript.echo L_Help_Help_General05_Text
    wscript.echo L_Help_Help_General06_Text
    wscript.echo L_Help_Help_General07_Text
    wscript.echo L_Help_Help_General08_Text
    wscript.echo L_Help_Help_General09_Text
    wscript.echo L_Help_Help_General10_Text
    wscript.echo L_Help_Help_General11_Text
    wscript.echo L_Help_Help_General12_Text
    wscript.echo L_Empty_Text
    wscript.echo L_Help_Help_General13_Text
    wscript.echo L_Help_Help_General14_Text
    wscript.echo L_Help_Help_General15_Text
    wscript.echo L_Help_Help_General16_Text

    if bExit then

        wscript.quit(1)

    end if

end sub

'
' Determines which program is being used to run this script. 
' Returns true if the script host is cscript.exe
'
function IsHostCscript()

    on error resume next
    
    dim strFullName 
    dim strCommand 
    dim i, j 
    dim bReturn
    
    bReturn = false
    
    strFullName = WScript.FullName
    
    i = InStr(1, strFullName, ".exe", 1)
    
    if i <> 0 then
        
        j = InStrRev(strFullName, "\", i, 1)
        
        if j <> 0 then
            
            strCommand = Mid(strFullName, j+1, i-j-1)
            
            if LCase(strCommand) = "cscript" then
            
                bReturn = true  
            
            end if    
                
        end if
        
    end if
    
    if Err <> 0 then
    
        wscript.echo L_Text_Error_General01_Text & L_Space_Text & L_Error_Text & L_Space_Text _
                     & L_Hex_Text & hex(Err.Number) & L_Space_Text & Err.Description 
        
    end if
    
    IsHostCscript = bReturn

end function

'
' Retrieves extended information about the last error that occured 
' during a WBEM operation. The methods that set an SWbemLastError
' object are GetObject, PutInstance, DeleteInstance
'
sub LastError()

    on error resume next

    dim oError

    set oError = CreateObject("WbemScripting.SWbemLastError")
   
    if Err = kErrorSuccess then
   
        wscript.echo L_Operation_Text            & L_Space_Text & oError.Operation
        wscript.echo L_Provider_Text             & L_Space_Text & oError.ProviderName
        wscript.echo L_Description_Text          & L_Space_Text & oError.Description
        wscript.echo L_Text_Error_General03_Text & L_Space_Text & oError.StatusCode
                
    end if                                                             
                                                             
end sub

'
' Connects to the WMI service on a server. oService is returned as a service
' object (SWbemServices)
'
function WmiConnect(strServer, strNameSpace, strUser, strPassword, oService)

    on error resume next

    dim oLocator
    dim bResult
   
    oService = null
   
    bResult  = false
   
    set oLocator = CreateObject("WbemScripting.SWbemLocator")

    if Err = kErrorSuccess then

        set oService = oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword)

        if Err = kErrorSuccess then

            bResult = true
      
            oService.Security_.impersonationlevel = 3
  
            '
            ' Required to perform administrative tasks on the spooler service
            '
            oService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege"
          
            Err.Clear
      
        else

            wscript.echo L_Text_Msg_General05_Text & L_Space_Text & L_Error_Text _
                         & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
                         & Err.Description
            
        end if
   
    else
   
        wscript.echo L_Text_Msg_General04_Text & L_Space_Text & L_Error_Text _
                     & L_Space_Text & L_Hex_Text & hex(Err.Number) & L_Space_Text _
                     & Err.Description
         
    end if                                                         
   
    WmiConnect = bResult
            
end function

'
' Remove leading "\\" from server name
'
function RemoveBackslashes(strServer)

    dim strRet
    
    strRet = strServer
    
    if Left(strServer, 2) = "\\" and Len(strServer) > 2 then 
   
        strRet = Mid(strServer, 3) 
        
    end if   

    RemoveBackslashes = strRet

end function


Makro im Objekt ABHPLJ6Zeit:

Code: Alles auswählen

wenn stoppzeit(ABHPLJ6Jobs.startzeit) > "00:08:00" und ABPrinter eingeschaltet dann
ABPrinter ausschalten
endewenn
Nach 8 Minuten Leerlauf wird der Printer abgeschalten.

Falls noch etwas unklar ist bitte einfach fragen...

lg
---------------------------------------------
Auf mehrfachen Wunsch hier keine Inventur meiner Homematic mehr... Viele Komponenten in BEtrieb

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“