Bitte um Hilfe:
Wie schließe ich aus meinem VB6-Programm heraus eine mit
shell Path\AcroRd32.exe Datei.pdf
geöffnete PDF-Datei wieder?
Hallo,
ein Beispiel:
Option Explicit
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias \_
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, \_
ByVal wParam As Long, lParam As Any) As Long
Dim Handle As Long
Const WM\_CLOSE = &H10
Private Sub Command1\_Click()
Shell "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe C:\mil.pdf", 1
Handle = GetForegroundWindow()
End Sub
Private Sub Command2\_Click()
SendMessage Handle, WM\_CLOSE, ByVal 0&, ByVal 0&
End Sub
OK?
Gruß Rainer
Lieber Reiner, danke für die rasche und kompedente Antwort.
Ich hab’s gleich probiert, Nach Click auf Command2 Button bleibt die PDF Datei aber leider geöffnet.
Die Compilierung meldete keinen Fehler.
Handle enthält eine 7 stellige Zahl. Die von shell zurückgelieferte ID ist meißt 4 stellig. Haben die beiden etwas miteinander zu tun?
Kannst Du mir noch einen Hinweis geben?!
Danke und Gruß
Horst
Hallo Horst,
danke für die rasche und kompedente Antwort.
Ich hab’s gleich probiert, Nach Click auf Command2 Button
bleibt die PDF Datei aber leider geöffnet.
Das verstehe ich nicht. Ich habe den Code getestet, bei mir wird der Reader geschlossen.
Die Compilierung meldete keinen Fehler.
Handle enthält eine 7 stellige Zahl. Die von shell
zurückgelieferte ID ist meißt 4 stellig. Haben die beiden
etwas miteinander zu tun?
Ein wenig.
Was ‚GetForegroundWindow‘ zurückliefert ist ein Fensterhandle. Sendmessage erwartet als Ziel ein fensterhandle.
Was Shell zurückliefert ist die Task-ID. Die Indentifikationsnummer des Prozesses, der durch Shell gestartet wird.
Kannst Du mir noch einen Hinweis geben?!
Hast Du am Code mehr verändert als Pfad und Namen der Datei?
GetForegroundWindow liefert das Handle des gerade aktiven Fensters, das im Vodregrund ist. Shell „Pfad/Name“,1 … die 1 sorgt dafür, daß das das gerade gestartete Programm ist. Läßt Du die weg, wird es vermutlich Dein eigenes Programm sein. Dann müsstest Du das mit Klick auf Button2 schließen.
Gruß Rainer
Lieber Rainer!
Natürlich funktioniert Dein Beispielprogramm jetzt auch bei mir.
Die Ursache des Problems war: ich arbeite mit 2 Bildschirmen. Die PDF Datei wurde am 2. Bildschirm angezeigt, dort wird sie allerdings nicht gelöscht, sondern das VB6 Programm (aktuelles Fenster).
Wüsstest Du ein Lösung für die Anwendung mit dem 2. Bildschirm?
Danke auch für die Beantwortung der Zusatzfragen zu ID und Handle.
Danke und beste Grüße
Horst
Hallo Horst,
Wüsstest Du ein Lösung für die Anwendung mit dem 2.
Bildschirm?
tut mir leid, mit zwei Bildschirmen habe ich noch nie gearbeitet. ich weiß nicht wie das geht.
Zeig doch bitte mal den Code, der die PDF-Datei auf dem zweiten Bildschirm öffnet, eventuell sehe ich da ja etwas, das zur Lösung führen kann. Versprechen und testen kann ich da aber nichts.
Gruß Rainer
Lieber Rainer,
bitte entschuldige; der Irrtum lag bei mir (nicht am 2. Bildschirm).
Ich hatte noch von früher nach shell eine ID Anzeige durch MsgBox und dann erst die Handle-Zuweisung. Die muß aber unmittelbar nach shell erfolgen.
Jetzt habe ich auch beim 2. Bildschir das gewünschte Verhaltren.
Ich danke Dir für Deine geduldige und prima Unterstützung.
Danke, alle Gute
Horst
Lieber Raine,
hier kommt der Nachtrag bezüglich 2. Monitor:
ich arbeite an einem Laptop mit zusätzlich einem 2. Monitor.
Der wird von shell automatisch bedient, wenn die aufgerfene Datei schon dort dargestellt war und geschlossen wurde (shell Parameter 1 bzw. 4).
Dazu ist am Laptop der 2. Monitor einzuschalten:
in Stichworten:
2ter Bildschirm/Monitor am Laptop:
Maus am Dektop re.MT. -> „Eigenschaften“ es öffnet sich:
„Eigenschaften von Anzeige“ -> Registerkarte: „Einstelungen“
es werden 2 Bildschirme symbol. Dargestellt,
„Anzeige“ - pull down Menü: 1 (Mehrere Monitore) mit MOBILITY RADEON 9000
2 (Mehrere Monitore) mit MOBILITY RADEON 9000
-> „Erweiter“ -> Registerkarte: "Anzeige:
„Schema“ bleibt leer,
beide Anzeigegeräte auf „EIN“ (Button):
„Monitor“ auf „EIN“
„Flachbildschirm“ auf „EIN“
-> „OK“
Nochmals danke für Deine Hilfe!
LG
Horst