Das Notes Forum

Lotus Notes / Domino Sonstiges => OLE/COM-Programmierung => Thema gestartet von: jo@chim am 22.06.12 - 12:15:34



Titel: API-Handle auf Druckerdialog
Beitrag von: jo@chim am 22.06.12 - 12:15:34
Hi,

ich habe im Forum  unter "Grundgerüst für eine Excel-Klasse" ein schönes Codebeispiel von Axel gefunden, um per API-Handle ein Excel-fenster in den Vordergrund zu holen:
http://atnotes.de/index.php/topic,39862.msg253621.html#msg253621

Code:
  Dim hWnd As Long

    'Handle für Excel-Application ermittlen
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then Exit Sub

    'Excel aktivieren und in den Vordergrund bringen
    Call SetActiveWindow(hWnd)
    Call SetForegroundWindow(hWnd)


Wie lautet denn die entsprechend Fensterbezeichnung für den Druckerauswahldialog (den ich per "excelobj.Application.Dialogs(8).Show" aufrufe)?

hWnd = FindWindow("print", 0) und hWnd = FindWindow("drucken", 0)

habe ich schon versucht - das ist sie aber offensichtlich nicht, hWnd gibt 0 zurück.

Hintergrund:

Unter Windows XP und Windows Server 2008 wird der Druckerauswahldialog im Vordergrund ausgegeben, unter Windows 7 aber im Hintergrund, und kann deshalb nur per "Desktop anzeigen" erreicht werden.


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: Axel am 22.06.12 - 12:32:31
Das ist nicht ganz trivial.

Hier -> http://www.herber.de/forum/archiv/372to376/t373425.htm (http://www.herber.de/forum/archiv/372to376/t373425.htm) hab ich mal einen Lösungsansatz gefunden. Getestet habe ich das allerdings nicht.

Hier wird der Fenstertitel herangezogen um das Handle zu ermitteln. Ich halte das für etwas problematisch, denn wenn z.B. bei einer neueren Version der Titel geändert wird, funktioniert dein Code schon nicht mehr.

Was hast du den vor? vielleicht gibt's auch noch einen anderen Weg.


Axel


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: jo@chim am 22.06.12 - 13:06:01
Was hast du den vor? vielleicht gibt's auch noch einen anderen Weg.

Hab ich doch geschrieben, im letzten Satz ;-)

Ich habe einen Stapeldruck programmiert, um die Excel-Anhänge aus verschiedenen Dokumenten, die in einer Ansicht selektiert wurden zu drucken.


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: Axel am 22.06.12 - 15:07:57
Hab ich doch geschrieben, im letzten Satz ;-)

Ich habe einen Stapeldruck programmiert, um die Excel-Anhänge aus verschiedenen Dokumenten, die in einer Ansicht selektiert wurden zu drucken.

In welchem letzten Satz?   ;)    :-:


Eventuell wäre die PrintOut - Methode des Worksheet - Objekts eine Alternative.

Axel



Titel: Re: API-Handle auf Druckerdialog
Beitrag von: jo@chim am 25.06.12 - 12:47:35
Eventuell wäre die PrintOut - Methode des Worksheet - Objekts eine Alternative.
Negativ. Anforderung ist leider, dass die Druckereinstellungen vom Anwender konfiguriert werden können...


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: Axel am 25.06.12 - 16:04:42
Versuch's mal so

    ...
    hWnd = FindWindow("", "Fenstertitel")
    If hWnd = 0 Then Exit Sub
    ...

Das hab' ich irgendwo im Web gefunden.


Axel


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: jo@chim am 25.06.12 - 16:28:48
Näää...
    hWnd = FindWindow("", "Fenstertitel")
... (bzw. "Drucken") gibt nen Lotusscript Fehler...


Titel: Re: API-Handle auf Druckerdialog
Beitrag von: Axel am 25.06.12 - 16:46:35
Was für'n Fehler?

Ich habe mal noch ein bisschen gestöbert. Meine Erfahrungen mit API-Aufrufen hält sich in Grenzen. Ich habe schon ewige Zeiten nichts mehr in die Richtung gemacht.

Bei dieser Art Aufruf von FindWindow muss der erste Parameter ein Nullstring sein.

Versuch's mal so:
 
hWnd = FindWindow(0, "Fenstertitel")

oder

const strNullstring As String
hWnd = FindWindow(strNullstring , "Fenstertitel")

Axel