Autor Thema: Drucker und Druckoptionen einstellen  (Gelesen 27887 mal)

Offline muR

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
  • Rock my life
Re:Drucker und Druckoptionen einstellen
« Antwort #40 am: 29.04.03 - 11:22:25 »
Hallo,

hab' noch etwas probiert (auch mit meinem VB Tool) dabei hat sich gezeigt, daß Notes doch mitbekommt wenn der Drucker umgesetzt wird. Allerdings erst nach dem das Script beendet ist.
Probiert mal aus, das Script im Debug laufen lassen, nach dem Umsetzen des Druckers das Script stoppen, nach Notes wechseln und den Ausdruck starten, bei mir war dann der Drucker umgestellt.
Mein Problem ist jetzt, wie halte ich das Script an und gebe Notes für eine Kurze Zeit frei damit die Meldung von SendMessage auch angenommen werden kann. Dann hat auch Notes die Info über die neuen Einstellungen.
Die in der Hilfe beschrieben Yield Funktion läuft bei mir nicht. ???

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Re:Drucker und Druckoptionen einstellen
« Antwort #41 am: 29.04.03 - 14:00:04 »
So Leute, ich habe ja gesagt es gibt noch eine andere Möglichkeit als HWND-BROADCASTS an Notes zu schicken und ich habe auch eine gefunden! (Ich werde auf Arbeit nicht um sonst Potter genannt!) ;D

In den Declarations diese Zeile einfügen:
Declare Function GetForegroundWindow Lib "user32" () As Long

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

und dann in der Funktion zum Drucker wechseln das hier anstatt dem alten SendMessage-Aufruf:

Dim hWndNotes As Long ' Variable für das NotesFenster

' Über die Funktion GetForegroundWindow die HWND des aktuellen Fensters
' (Notes) auslesen
hWndNotes = GetForegroundWindow()

' anschließend die HWND SendMessage übergeben
Call SendMessage(hWndNotes, WM_WININICHANGE, 0, Byval "Windows")

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

Also es scheind zumindest schneller zu laufen! Ach ja hatte ich eigentlich vergessen zu sagen das ich nie probiert habe aus meiner TestDB gleich nach dem wechsel zu drucken, sondern mir dann lediglich die Einstellungen aus dem Druckmenü angeschaut hab?  ::)

Have a lot of fun ...
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Drucker und Druckoptionen einstellen
« Antwort #42 am: 29.04.03 - 14:05:18 »
... na das hört sich schon mal anders an - ich gebe dir Bescheid, wenn es damit klappt....

ata
Grüßle Toni :)

Offline muR

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
  • Rock my life
Re:Drucker und Druckoptionen einstellen
« Antwort #43 am: 29.04.03 - 14:15:34 »
Hallo,

wir will der Unterschied nicht einleuchten, ob ich die SendMessage an alle offenen Fenster sende oder nur an das Notes Fenster. Bleibt für mein Verständnis gleich.

@enny, probier doch mal aus aus Deinem Script heraus zu drucken. Das es danach umgestellt würde ja mit meiner Aussage übereinstimmen, daß Notes die SendMessage Anweisung angenommen hat sobald das Script beendet ist.

Oder seit Ihr da anderer Meinung?
muR

Offline Manfred

  • Frischling
  • *
  • Beiträge: 5
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #44 am: 29.04.03 - 14:29:51 »
Änderungen an den globalen Einstellungen sollten immer an alle Anwendungen mitgeteilt werden. Dies sollte zwar zu den Aufgaben eines Betriebssystems gehören, aber Microsoft überlässt es dem Programmierer.

Eine weitere Möglichkeit, das Notes-Fenster zu ermitteln:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (Byval lpClassName As String, Byval lpWindowName As Long) As Long

hWndNotes = FindWindow("NOTES", 0)

Funktioniert auch dann, wenn Notes nicht das "Foreground-Window" ist.

Manfred

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #45 am: 29.04.03 - 14:47:27 »
Hi,

der Vorteil liegt mit Sicherheit darin, daß

Call SendMessage(hWndNotes, WM_WININICHANGE, 0, Byval "Windows")

den Broadcast nur an das fenster schickt, daß es auch angeht und nicht an andere offenen Parent Windows, die damit im Prinzip nix anfangen können.

Die Crux liegt aber woanders:

Alle Script ( VB, VBA und sonstige Arten und somit auch LS ) laufen im Speicher in einem abgeschlossenen Adressbereich.
Auch wenn du API Calls verwendest, werden diese in genau diesem einen bereich ausgeführt. Dann werden aber auch die Prozesse sequentiell abgearbeitet. Daher muß das LS erst beendet werden, bevor der Broadcast ausgeführt wird.
Die vorher schon einmal angesprochene SLEEP Funktion hilft da überhaupt nicht weiter, da sie lediglich ein FREEZEN der weiteren programmausführung bewirkt.

Mit Script wirst du daher nicht weiterkommen, da du dich immer in diesem abgeschlossenen bereich bewegst.

eknori
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Manfred

  • Frischling
  • *
  • Beiträge: 5
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #46 am: 29.04.03 - 15:30:46 »
Meiner Meinung nach sind einige Aussagen nicht so ganz richtig:

Änderungen in den globalen Einstellungen gehen selbstverständlich alle derzeit laufenden Anwendungen etwas an. Wie sollen die sonst z.B. auf die Änderung des Standarddruckers reagieren?

Auch der Notes-Client bekommt die Änderung mitgeteilt, unabhängig davon, in welchem Adressbereich SendMessage aufgerufen wird.:

"The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. "

Manfred





Offline muR

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
  • Rock my life
Re:Drucker und Druckoptionen einstellen
« Antwort #47 am: 29.04.03 - 15:41:08 »
Ob man die SendMessage an alle oder nur an Notes sendet kann am diskutieren, ändert aber nichts am Verhalten von Notes.
Notes setzt die Mitteilung von SendMessage nicht um solange das Script läuft. Wie also unterbreche ich das Script, damit Notes die SendMessage Aufforderung verarbeitet?
VB/VBA kann mit eigenen Befehlen den Drucker auswählen mit dem es arbeiten will und muß nicht den Standarddrucker ändern. Notes kann das aber nicht in der 5er Version. Hat jemand Erfahrung mit der 6er Version?
muR

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Drucker und Druckoptionen einstellen
« Antwort #48 am: 29.04.03 - 19:46:17 »
... ich wiederhole mich zwar, aber es liegt nicht alleine an Notes, denn unter Win98SE funzt es...

ata
Grüßle Toni :)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #49 am: 29.04.03 - 19:49:34 »
Win9x.xx verwendet eine andere Speicherverwaltung als NT, W2K und XP.

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Re:Drucker und Druckoptionen einstellen
« Antwort #50 am: 30.04.03 - 07:20:26 »
Mein Vorteil ist das ich Eingabe und Druckmaske in meiner DB habe die ich entwickle. Ich gebe dem User somit in der Eingabemaske lediglich die Möglichkeit sich die Vorschau anzusehen und anschließend müssen Sie dann eben noch einen Button zum Drucken drücken. Ist zwar keine Lösung für das Problem aber damit habe ich dann zwei getrennte Scripts und dann sollte es auch gehen!
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #51 am: 30.04.03 - 07:36:12 »
Ich habe hier noch eine Funktion, die ein SLEEP ohne das komplette Blockieren der weiteren Codebearbeitung ermöglicht.

Declarations:
'********************************************
 Const STATUS_TIMEOUT = &H102&
 Const INFINITE = -1& ' Infinite interval
 Const QS_KEY = &H1&
 Const QS_MOUSEMOVE = &H2&
 Const QS_MOUSEBUTTON = &H4&
 Const QS_POSTMESSAGE = &H8&
 Const QS_TIMER = &H10&
 Const QS_PAINT = &H20&
 Const QS_SENDMESSAGE = &H40&
 Const QS_HOTKEY = &H80&
 Const QS_ALLINPUT = (QS_SENDMESSAGE Or QS_PAINT _
        Or QS_TIMER Or QS_POSTMESSAGE Or QS_MOUSEBUTTON _
        Or QS_MOUSEMOVE Or QS_HOTKEY Or QS_KEY)
 Declare Function MsgWaitForMultipleObjects Lib "user32" _
        (ByVal nCount As Long, pHandles As Long, _
        ByVal fWaitAll As Long, ByVal dwMilliseconds _
        As Long, ByVal dwWakeMask As Long) As Long
 Declare Function GetTickCount Lib "kernel32" () As Long

Code:
' The MsgWaitObj function replaces Sleep,
' WaitForSingleObject, WaitForMultipleObjects functions.
' Unlike these functions, it
' doesn't block thread messages processing.
' Using instead Sleep:
'     MsgWaitObj dwMilliseconds
' Using instead WaitForSingleObject:
'     retval = MsgWaitObj(dwMilliseconds, hObj, 1&)
' Using instead WaitForMultipleObjects:
'     retval = MsgWaitObj(dwMilliseconds, hObj(0&), n),
'     where n - wait objects quantity,
'     hObj() - their handles array.

 Function MsgWaitObj(Interval As Long,hObj As Long,nObj As Long ) As Long
Dim T As Long, T1 As Long
If Interval <> INFINITE Then
    T = GetTickCount()
    On Error Resume Next
    T = T + Interval
    ' Overflow prevention
    If Err <> 0& Then
        If T > 0& Then
            T = ((T + &H80000000) _
            + Interval) + &H80000000
        Else
            T = ((T - &H80000000) _
            + Interval) - &H80000000
        End If
    End If
    On Error GoTo 0
    ' T contains now absolute time of the end of interval
Else
    T1 = INFINITE
End If
Do
    If Interval <> INFINITE Then
        T1 = GetTickCount()
        On Error Resume Next
     T1 = T - T1
        ' Overflow prevention
        If Err <> 0& Then
            If T > 0& Then
                T1 = ((T + &H80000000) _
                - (T1 - &H80000000))
            Else
                T1 = ((T - &H80000000) _
                - (T1 + &H80000000))
            End If
        End If
        On Error GoTo 0
        ' T1 contains now the remaining interval part
        ' ACHTUNG: Fürr LS muß das folgende IIF noch aufgelöst werden
        If IIf((T1 Xor Interval) > 0&, _
            T1 > Interval, T1 < 0&) Then
            ' Interval expired
            ' during DoEvents
            MsgWaitObj = STATUS_TIMEOUT
            Exit Function
        End If
    End If
    ' Wait for event, interval expiration
    ' or message appearance in thread queue
    MsgWaitObj = MsgWaitForMultipleObjects(nObj, _
            hObj, 0&, T1, QS_ALLINPUT)
    ' Let's message be processed
    DoEvents
    If MsgWaitObj <> nObj Then Exit Function
    ' It was message - continue to wait
Loop
End Function
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Drucker und Druckoptionen einstellen
« Antwort #52 am: 30.04.03 - 09:54:28 »
evtl hilft Euch dieser Link ein bißerl weiter:

http://www.experts-exchange.com/Applications/Email/Lotus_Notes/Q_20506162.html

incl. einer gezippten Bsp DB mit API Calls: http://www.icejersey.com/dev/printerchange.zip

Der Bursch hat es für WinNT/W2k geschafft, allerdings scheint es bei der Combo R6/Win98 Probleme zu geben, nämlich genau der Art wie Ihr sie schon entdeckt habt:
"Wow!! This is proving to be a real pain, the SendMessage call does change the default printer but notes doesn't recognise it.  However if you change the default printer manually Notes does recognise the changes.

I am trying out some other things and I think I am getting close, this lot seems to work with windows NT/2000 but Win98 is not playing ball.
I just need to work out what windows98 does after the user changes the default printer manually to see if I can do the same. Soon as I find this out we should be sorted..
Sorry this is taking a while faithsg "
Das war am 28.03.


(Seine Erläuterungen zur DB:
Hi Faithsg,

I have put together a sample of a printer change system
I have had it working on my computer so you shouldn't have any problems using it.

You should be able to copy/paste bits of it into your database; the essential items you need to look at are as follows.

1) Script Library - this holds all the api calls and other goodies and is called "PrinterChange"
2) In the main form you need to look at the form globals, PostOpen event and QueryClose event
3) Lastly you need to see the code behind the two buttons, these buttons call the functions in the script library.


Click on the following link to download example
http://www.icejersey.com/dev/printerchange.zip

Hope this helps, Notes can be a pain to change printers, after looking myself for aaagggeeeessssss I managed to find out that setting the printer to default then back again is the only way to get the job done.

One last thing, you need to be on Notes 5.0.10 or later for this to work, if your on a lower version you have do an incremental upgrade by visiting the notes website, look out for MR (Maintanance release).

Good luck,  Joe.)
« Letzte Änderung: 30.04.03 - 09:56:29 von Rob Green »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Re:Drucker und Druckoptionen einstellen
« Antwort #53 am: 30.04.03 - 10:06:02 »
Ich konnte mir die Datei leider nicht runterladen aber kann mir mal jemand sagen ob er vielleicht im PostOpen bereits den Drucker umstellt denn dann wär das nichts neues. Das wollte ich ja auch so lösen. Beim öffnen den Drucker umstellen und dann die User über einen Button drucken lassen. Wo wir wieder bei dem Thema wären das es zwei von einander getrennte Skripts währen!
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #54 am: 30.04.03 - 10:10:27 »
YEAH, das funzt bei mir ( momentan NT4 SP 6a und Client 5.0.11 )  :D :D :D

Kommando zurück   :'( :'( :'( :'(

Das funktioniert nur, wenn man das SetDefault Printer und Print Kommando trennt.

In einer Aktion klappt das nicht. Also nichts neues

Nachtrag:

scheint wohl probleme mit dem DL zu geben, daher hier die Datei:
« Letzte Änderung: 30.04.03 - 10:24:41 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re:Drucker und Druckoptionen einstellen
« Antwort #55 am: 30.04.03 - 10:24:05 »
und was ist daran so schlimm, eknori, daß die User 2 Fingerbewegungen machen müssen, statt einer? Oder stört das irgendwie einen Ablauf groß?

Und wie sieht es mit der Timer Klasse aus...kann man da Notes "zeit" geben, die Änderungen mitzubekommen und dann den Prozess weiter anschieben?

Achsoo...eigentlich wollt ich nur die Datei attachen..siehe unten
« Letzte Änderung: 30.04.03 - 10:26:16 von Rob Green »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #56 am: 30.04.03 - 10:29:23 »
@RobGreen:

ne, ich finde das nicht schlimm, aber dann kann ich auch gleich den normalen Druckerdialog verwenden.

Es geht ja in der Hauptsache darum ( wenn ich das richtig verstanden habe) den einzelnen Dokumenten mitzugeben, auf welchem Drucker sie ausgedruckt werden sollen. Und da kannst du natürlich keine Interaktion gebrauchen.

Eine Idee wäre noch, die beiden Aktionen in 2 Agenten zu stecken und dann durch einen dritten agenten aufrufen zu lassen.
Möglicherweise reicht diese trennung schon aus, damit Notes den Change mitbekommt.

Ulrich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Drucker und Druckoptionen einstellen
« Antwort #57 am: 30.04.03 - 10:38:36 »
... das ist natürlich auch noch eine Idee - werde ich checken...

ata
Grüßle Toni :)

Offline enny

  • Junior Mitglied
  • **
  • Beiträge: 84
  • Geschlecht: Männlich
  • Don't drink and su!
Re:Drucker und Druckoptionen einstellen
« Antwort #58 am: 30.04.03 - 10:41:17 »
@Rob Green:
Wie eknori sagt eigentlich wollte ich keine Benutzerinteraktion und es tatsächlich erst beim drücken des Buttons umstellen. Aber ich bin mittlerweile auch schon so weit zu sagen: Meine User sind sonst keine PowerUser und haben dementsprechend eigentlich nicht zwei Unterschiedliche Masken im Einsatz also wird bei mir jetzt der Drucker via PostOpen Event umgestellt und anschließend kann der User über einen Button ausdrucken.
Server:
  Platformen: 1 x Windows 2000 Server, 4 x Windows 2003 Server, 1 x OS400
  Versionen: 4 x 6.5.4 FP2, 2 x 8.0.1
Clients:
  Anzahl: ca. 600
  Versionen: 6.5.3, 6.5.4, 8.0.1

Offline Manfred

  • Frischling
  • *
  • Beiträge: 5
  • Geschlecht: Männlich
Re:Drucker und Druckoptionen einstellen
« Antwort #59 am: 30.04.03 - 10:43:58 »
Laut Notes-Fixliste soll es ab der Version 5.0.10 funktionieren, dass der Notes-Client Änderungen des Standarddrucker berücksichtigt:

SPR# HYAI4LR8WS - Fixed a problem which caused default printer changes not to be recognized by the Notes client. This regression was introduced in 5.0.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz