Fokus im Wechsel ..zur Hälfte ;-)
18.01.2006 14:38:36
Ingo
Hallo Heiko,
das war schon mal sehr hilfreich, was Du mir hast zukommen lassen.
Die Mappe öffnet nun die externe Anwendung, danach erfolgt jetzt auch der erste
Wechsel zurück auf die Mappe.
Terminieren kann ich das andere Programm auch - nur der Wechsel von Excel
auf das Programm haut einfach nicht hin.
Ein paar Seiten mit dem Thema Handle bin ich schon durch, aber das Thema
erschließt sich mir einfach nicht wirklich.
Ich finde dieses verd...Fenster nicht.
Da der Code erst ein paar Zeilen hat, füge ich das alles 'mal ein.
Evtl. magst Du ja mal auf die Stelle mit den "?" schauen und mir noch einmal
unter die Arme greifen ?
(die Funktionen FindWindow und SetForegroundWindow sind anderweitig als public )
So oder so, vielen Dank die Unterstützung
Ingo
Option Private Module
Option Explicit
Private Declare
Function TerminateProcess Lib "kernel32" ( _
ByVal hProcess As Long, _
ByVal uExitCode As Long) _
As Long
Private Declare
Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) _
As Long
Private Declare
Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) _
As Long
Const PROCESS_TERMINATE = &H1
Private ProcessId As Long
Private ProcessId_Exit As Long
Private RetVal As Variant
Sub TeubStarten()
On Error GoTo Errorhandler
'Überprüfen, ob Teub auf dem Rechner installiert ist.
'Falls nein, Programmabruch
If Dir("D:\Win32app\TUN\EMUL\3270_32.EXE") = "" Then
MsgBox "Auf diesem Client ist keine TUN Emulation installiert!"
Exit Sub
End If
'Teub starten und ProcessID festhalten
ProcessId = _
Shell("D:\Win32app\TUN\EMUL\3270_32.EXE", vbNormalFocus)
'Wartezeit, damit Dataport reagieren kann
Application.Wait (Now + TimeValue("0:00:10"))
'TEST Fensterwechsel******
Dim lngActiveW As Long
'Excel erhält den Fokus
lngActiveW = FindWindow("XLMAIN", Application.Caption)
SetForegroundWindow lngActiveW
Application.Wait (Now + TimeValue("0:00:2"))
'?zurück auf die ProcessId ?
Exit Sub
'Über die ProcessID Teub beenden
ProcessId_Exit = OpenProcess(PROCESS_TERMINATE, 0&, ProcessId)
RetVal = TerminateProcess(ProcessId_Exit, 1&)
RetVal = CloseHandle(ProcessId_Exit)
Errorhandler:
End Sub