WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Hilfe zu VBS: PDF nach Ausdruck löschen (http://www.wcm.at/forum/showthread.php?t=243928)

mankra 12.02.2012 23:46

Hilfe zu VBS: PDF nach Ausdruck löschen
 
Mit VBS hab ich bis jetzt noch keine Erfahrung. Per Tante Google hab ich mir folgendes Skript zusammengesucht, welches einen Ordner auf neue PDF Dateien überwacht und gegebenenfalls ausdruckt.
Soweit klappt dies auch.

Code:

On Error Resume Next
strFolder = "T:\ordner" 'ohne abschließenden "\", auch bei Root-Folder

WScript.Echo "Druckprogramm gestartet"
strUserFolder = """" & Replace(strFolder, "\", "\\\\") & """"
strComputer = "."
Set fso = CreateObject("Scripting.FileSystemObject")
fso.DeleteFile("T:\ordner\*.pdf"),true
Set objShell = CreateObject("Wscript.Shell")
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
        & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _
            & "TargetInstance.GroupComponent= " _
                & "'Win32_Directory.Name=" & strUserFolder & "'")
Do
    Set objLatestEvent = colMonitoredEvents.NextEvent
    strNewFile = objLatestEvent.TargetInstance.PartComponent
    arrNewFile = Split(strNewFile, "=")
    strFileName = arrNewFile(1)
    strFileName = Replace(strFileName, Chr(34), "")
    Select Case LCase(fso.GetExtensionName(strFileName))
    Case "pdf" 'Typ in Kleinbuchstaben angeben
        objShell.Run """C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe"" /p """ & strFileName & """"

    Case Else
        ' keine Aktion erforderlich
    End Select
Loop

Problem ist, daß ich gerne nach dem Ausdruck das File gelöscht hätte und ich mit den vielen Anführungszeichen nicht so zurecht komme.
z.B:
fso.DeleteFile("T:\rechnungen\11\etiketten\""" & strFileName & """"),true
nach dem Foxit Reader Aufruf funktioniert nicht (keine Fehlermeldung, aber die Files bleiben stehen).

Andere komplette Noob Frage:
Über Google hätte ich nichts gefunden:
Gibt es außer echo keine Möglichkeit einer Bildschirmausgabe?
Z.B. ein Fenster, welches jede gedruckte Datei anzeigt.

wbendl 13.02.2012 16:59

Hi!

Mit VBS hab ich es nicht so, aber üblicherweise ist die Syntax identisch mit VB6/VBA.

In diesem Fall müßte es so aussehen:
fso.DeleteFile("T:\rechnungen\11\etiketten\" & strFileName),true

Die vielen komplizierten Hochkommas sind nur in der Eingabeaufforderung notwendig. Oder wie in deinem Fall, wenn mit der Shell gearbeitet wird.
Wobei es auch ohne Hochkommas funktioniert, wenn keine Leerzeichen in Pfad und Dateinamen enthalten sind.


mfg

WB

mankra 13.02.2012 21:59

Danke, werds am Mittwoch probieren.

Kann mir noch jemand beantworten, ob oder wie man ein Fenster mit VBS öffnen kann?

wbendl 13.02.2012 22:52

Hi!

Ich weiß ja nicht, was du genau machen willst. Die korrekte Lösung beginnt wahrscheinlich mit CreateProcess, aber das ist höchst fortgeschritten.

Eine leichter zu verstehende Lösung könnte so aussehen:
Den Editor starten, und mit SendKeys steuern.

Damit hast du die Daten in einem Fenster gesammelt, und kannst sie bei Bedarf auch gleich als Datei abspeichern.


mfg

WB

mankra 14.02.2012 00:49

Wie oben geschrieben, eine visuelle Ausgabe, daß A das Programm läuft und B daß ein PDF gedruckt wurde, wäre praktisch.

Es passiert immer wieder, daß meine Leute das Programm doppelt starten, dann werden die PDFs auch doppelt ausgedruckt.

Also hab ich das richtig verstanden, eine simple Methode einer Bildschirmausgabe, wie z.B. bei Batch Dateien gibt es nicht.

FranzK 14.02.2012 02:34

Solche Dinge können mit AutoIt oder AutoHotkey wesentlich einfacher programmiert werden.

:hallo:

wbendl 14.02.2012 10:51

Hi!

Die Ausgabe in ein Fenster des Editors betrachte ich als "simple Methode".
Konsolenfenster sollte auch möglich sein, finde ich aber nicht so schön.

Hier ein paar Zeilen, die zeigen wie das gedacht ist:
Code:

'Editor öffnen, und Text schreiben
'on error resume next
set ws = CreateObject("Wscript.Shell")
AppID = ws.run("%WINDIR%\notepad.exe")
'Etwas Zeit lassen, damit das Programm auch wirklich schon läuft
wscript.sleep 1000
'Sicherheitshalber das Editorfenster aktivieren
ws.AppActivate AppID
'Text im Fenster ausgeben
ws.SendKeys "Testtext", True

Der Nachteil von SendKeys ist halt, daß immer das Fenster aktiviert werden muß.


mfg

WB

mankra 15.02.2012 10:22

Danke, damit hab ich einen Anhaltspunkt.
Sehe aber schon, das VBS doch eingeschränkt ist und dies für die Anzeige keine Lösung ist (Es soll sich das Fenster nicht immer nach vorne drängen).

wbendl 15.02.2012 12:47

Hi!

Eine wesentliche Einschränkung von VBS ist Deklaration von Variablen. Da es keine Typen gibt, können keine API-Aufrufe eingesetzt werden.

Um diese Einschränkung zu umgehen kann ein API-Wrapper eingesetzt werden, z. B. die dynacall.dll.
Soweit ich weiß arbeiten auch die von FranzK erwähnten Tools auf diese Art.

Über die dann verfügbare Windows API können alle deine Wünsche umgesetzt werden. Allerdings ist das nicht mehr Einsteigerniveau.

Vielleich solltest du dir die von FranzK erwähnten Tools näher anschauen.


mfg

WB

mankra 15.02.2012 13:36

Autoit schaut wirklich interressant aus. Mal schauen, wann ich Zeit finde, mich einzuarbeiten.
Soweit funktioniert es ja.


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag